1 创建数据库
Apollo服务端共需要两个数据库:ApolloPortalDB
和ApolloConfigDB
,我们把数据库、表的创建和样例数据都分别准备了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及以上版本
- 根据实际情况修改flyway-portaldb.properties中的
flyway.user
、flyway.password
和flyway.url
配置 - 在apollo项目根目录下执行
mvn -N -Pportaldb flyway:migrate
1.1.3 验证
导入成功后,可以通过执行以下sql语句来验证:
select `Id`, `Key`, `Value`, `Comment` from `ApolloPortalDB`.`ServerConfig` limit 1;
Id | Key | Value | Comment |
---|---|---|---|
1 | apollo.portal.envs | dev | 可支持的环境列表 |
注: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及以上版本
- 根据实际情况修改flyway-configdb.properties中的
flyway.user
、flyway.password
和flyway.url
配置 - 在apollo项目根目录下执行
mvn -N -Pconfigdb flyway:migrate
1.2.3 验证
导入成功后,可以通过执行以下sql语句来验证:
select `Id`, `Key`, `Value`, `Comment` from `ApolloConfigDB`.`ServerConfig` limit 1;
Id | Key | Value | Comment |
---|---|---|---|
1 | eureka.service.url | http://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张表,下面同时附上需要导入的数据查询语句:
- App
- 导入全部的App
- 如:insert into
新环境的ApolloConfigDB
.App
select * from其它环境的ApolloConfigDB
.App
whereIsDeleted
= 0;
- AppNamespace
- 导入全部的AppNamespace
- 如:insert into
新环境的ApolloConfigDB
.AppNamespace
select * from其它环境的ApolloConfigDB
.AppNamespace
whereIsDeleted
= 0;
- Cluster
- 导入默认的default集群
- 如:insert into
新环境的ApolloConfigDB
.Cluster
select * from其它环境的ApolloConfigDB
.Cluster
whereName
= ‘default’ andIsDeleted
= 0;
- Namespace
- 导入默认的default集群中的namespace
- 如:insert into
新环境的ApolloConfigDB
.Namespace
select * from其它环境的ApolloConfigDB
.Namespace
whereClusterName
= ‘default’ andIsDeleted
= 0;
同时也别忘了通知用户在新的环境给自己的项目设置正确的配置信息,尤其是一些影响面比较大的公共namespace配置。
如果是为正在运行的环境迁移数据,建议迁移完重启一下config service,因为config service中有appnamespace的缓存数据
2 获取安装包
可以通过两种方式获取安装包:
- 直接下载安装包
- 从GitHub Release页面下载预先打好的安装包
- 如果对Apollo的代码没有定制需求,建议使用这种方式,可以省去本地打包的过程
- 通过源码构建
- 从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.zip
、apollo-adminservice-x.x.x-github.zip
和apollo-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 如下
3.4 访问http://xxx.xx.xx.xx:8070
文章转载请说明出处:八零岁月 » Apollo 单机环境Docker 部署
评论前必须登录!