apolloconfig / apollo

Apollo is a reliable configuration management system suitable for microservice configuration management scenarios.
https://www.apolloconfig.com
Apache License 2.0
29.08k stars 10.2k forks source link

不管是 docker compose 还是 helm,都必须手动自行初始化sql吗 #5070

Closed oomgomgxx closed 8 months ago

oomgomgxx commented 8 months ago

这部分工作不能改由内部完成,即使不用 flyway 应该也不难实现吧。感觉不太方便🤔

dosubot[bot] commented 8 months ago

🤖

你好 @oomgomgxx,欢迎来到 Apollo 项目社区!我是 Dosu,一个帮助解决问题、回答疑问和协助你成为贡献者的机器人。在人类维护者回复你之前,我在这里提供帮助。很高兴遇见你!

根据我在Apollo仓库中的查找,Apollo确实提供了用于初始化数据库的SQL脚本,这些脚本位于scripts/sql目录中,包括用于创建和配置各种表的脚本,如AppAppNamespaceClusterCommitInstanceConfigNamespaceReleaseReleaseHistoryReleaseMessageServerConfigAccessKey

然而,这些脚本并不直接支持Docker Compose环境。如果要在Docker Compose中使用它们,你需要创建一个包含这些脚本的Dockerfile,并在容器启动时针对你的SQL数据库运行它们。以下是一个基本示例:

FROM mysql:5.7

COPY ./scripts/sql/apolloconfigdb.sql /docker-entrypoint-initdb.d/

EXPOSE 3306

在这个Dockerfile中,apolloconfigdb.sql脚本被复制到/docker-entrypoint-initdb.d/目录中。MySQL Docker镜像被配置为在容器启动时自动执行此目录中的任何脚本。

然后,在你的docker-compose.yml文件中,你需要包含一个使用这个Dockerfile的数据库服务:

version: '3'
services:
  db:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example

volumes:
  db_data: {}

在这个docker-compose.yml文件中,创建了一个名为db的新服务,该服务使用当前目录中的Dockerfile构建Docker镜像。db_data卷用于持久化数据库数据。MYSQL_ROOT_PASSWORD环境变量用于设置MySQL服务器的root密码。

至于Helm环境,Apollo仓库并未提供直接支持。你可能需要自行创建一个Helm chart,其中包含一个job或init container来运行这些SQL脚本。

至于你的建议,让Apollo内部完成这部分工作,这是一个很好的建议。但是,目前Apollo仓库中并没有现成的Dockerfile或Helm chart设计用于在容器启动时初始化SQL数据库。你可以考虑提交一个issue或pull request,提出这个改进建议。

参考链接:

Sources


This response is meant to be useful and save you time. It is not meant to be a precise solution, but rather a starting point for your own research.

Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.

If you want to continue the conversation, start your reply with @dosu-bot.

nobodyiam commented 8 months ago

如果是 quick start,可以参考文档,是自动初始化的。 如果是生产部署,一般场景是有 DBA 来审核并执行的,自动初始化的场景不多。

oomgomgxx commented 8 months ago

如果是 quick start,可以参考文档,是自动初始化的。 如果是生产部署,一般场景是有 DBA 来审核并执行的,自动初始化的场景不多。

但事实上大部份公司都是没有DBA。如果可以提供一个选择方式是不是体验性更好一些,譬如可以选择手动或者执行初始化(不是用flyway)