Apollo 单机环境Docker 部署-八零岁月
记录所见
分享所感

Apollo 单机环境Docker 部署

1 创建数据库

Apollo服务端共需要两个数据库:ApolloPortalDBApolloConfigDB,我们把数据库、表的创建和样例数据都分别准备了sql文件,只需要导入数据库即可。

需要注意的是ApolloPortalDB只需要在生产环境部署一个即可,而ApolloConfigDB需要在每个环境部署一套,如fat、uat和pro分别部署3套ApolloConfigDB。

注意:如果你本地已经创建过Apollo数据库,请注意备份数据。我们准备的sql文件会清空Apollo相关的表。

1.1 创建ApolloPortalDB

可以根据实际情况选择通过手动导入SQL或是通过Flyway自动导入SQL创建。

1.1.1 手动导入SQL创建

通过各种MySQL客户端导入apolloportaldb.sql即可。

以MySQL原生客户端为例:

source /your_local_path/scripts/sql/apolloportaldb.sql

1.1.2 通过Flyway导入SQL创建

需要1.3.0及以上版本

  1. 根据实际情况修改flyway-portaldb.properties中的flyway.userflyway.passwordflyway.url配置
  2. 在apollo项目根目录下执行mvn -N -Pportaldb flyway:migrate

1.1.3 验证

导入成功后,可以通过执行以下sql语句来验证:

select `Id`, `Key`, `Value`, `Comment` from `ApolloPortalDB`.`ServerConfig` limit 1;
IdKeyValueComment
1apollo.portal.envsdev可支持的环境列表

注:ApolloPortalDB只需要在生产环境部署一个即可

1.2 创建ApolloConfigDB

可以根据实际情况选择通过手动导入SQL或是通过Flyway自动导入SQL创建。

1.2.1 手动导入SQL

通过各种MySQL客户端导入apolloconfigdb.sql即可。

以MySQL原生客户端为例:

source /your_local_path/scripts/sql/apolloconfigdb.sql

1.2.2 通过Flyway导入SQL

需要1.3.0及以上版本

  1. 根据实际情况修改flyway-configdb.properties中的flyway.userflyway.passwordflyway.url配置
  2. 在apollo项目根目录下执行mvn -N -Pconfigdb flyway:migrate

1.2.3 验证

导入成功后,可以通过执行以下sql语句来验证:

select `Id`, `Key`, `Value`, `Comment` from `ApolloConfigDB`.`ServerConfig` limit 1;
IdKeyValueComment
1eureka.service.urlhttp://127.0.0.1:8080/eureka/Eureka服务Url

注:ApolloConfigDB需要在每个环境部署一套,如fat、uat和pro分别部署3套ApolloConfigDB

1.2.1 从别的环境导入ApolloConfigDB的项目数据

如果是全新部署的Apollo配置中心,请忽略此步。

如果不是全新部署的Apollo配置中心,比如已经使用了一段时间,这时在Apollo配置中心已经创建了不少项目以及namespace等,那么在新环境中的ApolloConfigDB中需要从其它正常运行的环境中导入必要的项目数据。

主要涉及ApolloConfigDB的下面4张表,下面同时附上需要导入的数据查询语句:

  1. App
    • 导入全部的App
    • 如:insert into 新环境的ApolloConfigDB.App select * from 其它环境的ApolloConfigDB.App where IsDeleted = 0;
  2. AppNamespace
    • 导入全部的AppNamespace
    • 如:insert into 新环境的ApolloConfigDB.AppNamespace select * from 其它环境的ApolloConfigDB.AppNamespace where IsDeleted = 0;
  3. Cluster
    • 导入默认的default集群
    • 如:insert into 新环境的ApolloConfigDB.Cluster select * from 其它环境的ApolloConfigDB.Cluster where Name = ‘default’ and IsDeleted = 0;
  4. Namespace
    • 导入默认的default集群中的namespace
    • 如:insert into 新环境的ApolloConfigDB.Namespace select * from 其它环境的ApolloConfigDB.Namespace where ClusterName = ‘default’ and IsDeleted = 0;

同时也别忘了通知用户在新的环境给自己的项目设置正确的配置信息,尤其是一些影响面比较大的公共namespace配置。

如果是为正在运行的环境迁移数据,建议迁移完重启一下config service,因为config service中有appnamespace的缓存数据

2 获取安装包

可以通过两种方式获取安装包:

  1. 直接下载安装包
    • GitHub Release页面下载预先打好的安装包
    • 如果对Apollo的代码没有定制需求,建议使用这种方式,可以省去本地打包的过程
  2. 通过源码构建
    • GitHub Release页面下载Source code包或直接clone源码后在本地构建
    • 如果需要对Apollo的做定制开发,需要使用这种方式

2.1 直接下载安装包

2.1.1 获取apollo-configservice、apollo-adminservice、apollo-portal安装包

GitHub Release页面下载最新版本的apollo-configservice-x.x.x-github.zipapollo-adminservice-x.x.x-github.zipapollo-portal-x.x.x-github.zip即可。

3.创建Docker镜像制作目录

3.1 将apollo-configservice、apollo-adminservice、apollo-portal分别放在各自的目录下

Dockerfile for apollo-configservice :

# Dockerfile for apollo-configservice
# 1. Copy apollo-configservice-${VERSION}-github.zip to current directory
# 2. Build with: docker build -t apollo-configservice .
# 3. Run with: docker run -p 8080:8080 -e DS_URL="jdbc:mysql://fill-in-the-correct-server:3306/ApolloConfigDB?characterEncoding=utf8" -e DS_USERNAME=FillInCorrectUser -e DS_PASSWORD=FillInCorrectPassword -d -v /tmp/logs:/opt/logs --name apollo-configservice apollo-configservice

FROM openjdk:8-jre-alpine
MAINTAINER ameizi <sxyx2008@163.com>

ENV VERSION 1.7.0-SNAPSHOT
ENV SERVER_PORT 8080
# DataSource Info
ENV DS_URL ""
ENV DS_USERNAME ""
ENV DS_PASSWORD ""

RUN echo "http://mirrors.aliyun.com/alpine/v3.8/main" > /etc/apk/repositories \
  && echo "http://mirrors.aliyun.com/alpine/v3.8/community" >> /etc/apk/repositories \
  && apk update upgrade \
  && apk add --no-cache procps unzip curl bash tzdata \
  && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
  && echo "Asia/Shanghai" > /etc/timezone

ADD apollo-configservice-${VERSION}-github.zip /apollo-configservice/apollo-configservice-${VERSION}-github.zip

RUN unzip /apollo-configservice/apollo-configservice-${VERSION}-github.zip -d /apollo-configservice \
  && rm -rf /apollo-configservice/apollo-configservice-${VERSION}-github.zip \
  && sed -i '$d' /apollo-configservice/scripts/startup.sh \
  && chmod +x /apollo-configservice/scripts/startup.sh \
  && echo "tail -f /dev/null" >> /apollo-configservice/scripts/startup.sh

EXPOSE $SERVER_PORT

CMD ["/apollo-configservice/scripts/startup.sh"]

目录树如下:

apollo-configservice-1.6.1/
├── apollo-configservice-1.6.1-github.zip
└── Dockerfile
ps:需要修改

ENV DS_URL ""
ENV DS_USERNAME ""
ENV DS_PASSWORD ""

按照实际信息填写
3.2 创建apollo-configservice 镜像 apollo-adminservice、apollo-portal 创建方式相同。
docker build -t apollo-configservice-1.6.1 .
3.3 运行Docker 容器
docker run -d -p 8080:8080 -v /var/log/apollo:/opt/logs  --name apollo-configservice  apollo-configservice

依次启动 apollo-adminservice、apollo-portal

Portainer 如下

image-20200523145452126

3.4 访问http://xxx.xx.xx.xx:8070

文章转载请说明出处:八零岁月 » Apollo 单机环境Docker 部署

分享到:更多 ()

吐槽集中营 抢沙发

评论前必须登录!