一套Portal可以管理多个环境,但是每个环境都需要独立部署一套Config Service、Admin Service和ApolloConfigDB,apollo 0.10.2版本默认支持的环境为:
LOCAL, DEV, FWS, FAT, UAT, LPT, PRO, TOOLS
(ps:环境枚举类, com.ctrip.framework.apollo.core.enums.Env, 添加自定义环境参考:
https://github.com/ctripcorp/apollo/wiki/%E9%83%A8%E7%BD%B2&%E5%BC%80%E5%8F%91%E9%81%87%E5%88%B0%E7%9A%84%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98#42-%E6%B7%BB%E5%8A%A0%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9A%84%E7%8E%AF%E5%A2%83)
下面我们以部署一套Portal管理DEV, FAT, UAT三个环境为例具体说明apollo多环境部署
由于服务器有限,我在一台服务器三个目录存放三套apollo,每套使用不同端口来模拟三个服务器,并在一个dbserver上使用三个不同名字的数据库,
portal只部署在UAT中,
服务存放目录及数据库对应关系如下表:
环境
|
目录
|
configservice
|
adminservice
|
portal
|
数据库名称
|
DEV
|
~/apollo/dev
|
Y
|
Y
|
N
|
ApolloConfigDB
|
FAT
|
~/apollo/fat
|
Y
|
Y
|
N
|
ApolloConfigDB2
|
UAT
|
~/apollo/uat
|
Y
|
Y
|
Y
|
ApolloConfigDB3
ApolloPortalDB
|
apollo官方文档中提到的各环境meta地址是在build.sh(或build.bat)中定义的,我们不这样做,我们使用运行时通过设置相应参数来实现
部署前准备:
1.下载apollo源码
https://github.com/ctripcorp/apollo
2.编译打包apollo (需要maven3.5.2+)
进到 apollo\scripts目录下, 执行 build.bat (linux环境使用build.sh)
编译完成我们要使用的adminservice、configserivce及portal包分别位于:
apollo\apollo-adminservice\target\apollo-adminservice-0.10.2-github.zip
apollo\apollo-configservice\target\apollo-configservice-0.10.2-github.zip
apollo\apollo-portal\target\apollo-portal-0.10.2-github.zip
3. 部署服务端服务器
3.1 安装mysql5.7 , 根据实际情况选择新安装还是升级
mysql5.1升级到5.7参考:
https://blog.csdn.net/buyaore_wo/article/details/79549648
CentOS6下解压安装mysql-5.7.20
https://blog.csdn.net/buyaore_wo/article/details/79549605
3.2 安装jdk1.8
如果服务器上运行有其它java应用不能直接升级java版本,可以在服务器上新安装jdk1.8, apollo应用通过设置环境变量来指定使用1.8
1)单独一个linux用户跑apollo, bashrc中设置java_home及path
2)修改apollo启动脚本,指定java_home (此文用到的就是这种方式)
一、apollo服务端
1.1 DEV环境
1.1.1 创建数据库
dev环境没有portal, 所以只需要使用 apollo\scripts\sql\apolloconfigdb.sql,在mysql中创建数据库即可(如果要修改数据库名称,注意到sql文件中修改)
1.1.2 configservice部署
将apollo-configservice-0.10.2-github.zip解压到
~/apollo/dev/configservice下
修改~/apollo/dev/configservice/script/startup.sh, 配置数据库、几个meta地址
JAVA_HOME=/usr/local/java/jdk1.8.0_161
apollo_config_db_url=jdbc:mysql://localhost:1504/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password=16VHKlYTv7Wg
# meta server url
config_server_url=http://127.0.0.1:8280
admin_server_url=http://127.0.0.1:8290
eureka_service_url=$config_server_url/eureka/
## Adjust server port if necessary
SERVER_PORT=8280
## Adjust log dir if necessary
LOG_DIR=$APOLLO_HOME/logs
SERVICE_NAME=apollo-configservice
PATH_TO_JAR=$SERVICE_NAME".jar"
SERVER_URL="http://localhost:$SERVER_PORT"
# JAVA OPTS
BASE_JAVA_OPTS="-Denv=dev -Ddev_meta=$config_server_url"
CONFIG_JAVA_OPTS="$BASE_JAVA_OPTS -Dspring.profiles.active=github -Deureka.service.url=$eureka_service_url -Deureka.instance.homePageUrl=$config_server_url"
JAVA_OPTS="$CONFIG_JAVA_OPTS -Dspring.datasource.url=$apollo_config_db_url -Dspring.datasource.username=$apollo_config_db_username -Dspring.datasource.password=$apollo_config_db_password"
export JAVA_OPTS="$JAVA_OPTS -Dserver.port=$SERVER_PORT -Dlogging.file=$LOG_DIR/$SERVICE_NAME.log -Xloggc:$LOG_DIR/heap_trace.txt -XX:HeapDumpPath=$LOG_DIR/HeapDumpOnOutOfMemoryError/"
1.1.3 adminservice部署
将apollo-adminservice-0.10.2-github.zip解压到
~/apollo/dev/adminservice下
修改~/apollo/dev/adminservice/script/startup.sh, 配置数据库、几个meta地址
JAVA_HOME=/usr/local/java/jdk1.8.0_161
apollo_config_db_url=jdbc:mysql://localhost:1504/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password=16VHKlYTv7Wg
# meta server url
config_server_url=http://127.0.0.1:8280
admin_server_url=http://127.0.0.1:8290
eureka_service_url=$config_server_url/eureka/
## Adjust server port if necessary
SERVER_PORT=8290
## Adjust log dir if necessary
LOG_DIR=$APOLLO_HOME/logs
SERVICE_NAME=apollo-adminservice
PATH_TO_JAR=$SERVICE_NAME".jar"
SERVER_URL="http://localhost:$SERVER_PORT"
#JAVA OPTS
BASE_JAVA_OPTS="-Denv=dev -Ddev_meta=$config_server_url"
ADMIN_JAVA_OPTS="$BASE_JAVA_OPTS -Dspring.profiles.active=github -Deureka.service.url=$eureka_service_url -Deureka.instance.homePageUrl=$admin_server_url"
JAVA_OPTS="$ADMIN_JAVA_OPTS -Dspring.datasource.url=$apollo_config_db_url -Dspring.datasource.username=$apollo_config_db_username -Dspring.datasource.password=$apollo_config_db_password"
export JAVA_OPTS="$JAVA_OPTS -Dserver.port=$SERVER_PORT -Dlogging.file=$LOG_DIR/$SERVICE_NAME.log -Xloggc:$LOG_DIR/heap_trace.txt -XX:HeapDumpPath=$LOG_DIR/HeapDumpOnOutOfMemoryError/"
1.2 FAT环境
1.2.1 创建数据库
fat环境也没有portal, 同样只需要使用 apollo\scripts\sql\apolloconfigdb.sql,在mysql中创建数据库即可(如果要修改数据库名称,注意到sql文件中修改)
1.2.2 configservice部署
将apollo-configservice-0.10.2-github.zip解压到
~/apollo/dev/configservice下
修改~/apollo/dev/configservice/script/startup.sh, 配置数据库、几个meta地址
JAVA_HOME=/usr/local/java/jdk1.8.0_161
apollo_config_db_url=jdbc:mysql://localhost:1504/ApolloConfigDB2?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password=16VHKlYTv7Wg
# meta server url
config_server_url=http://127.0.0.1:8180
admin_server_url=http://127.0.0.1:8190
eureka_service_url=$config_server_url/eureka/
## Adjust server port if necessary
SERVER_PORT=8180
## Adjust log dir if necessary
LOG_DIR=$APOLLO_HOME/logs
SERVICE_NAME=apollo-configservice
PATH_TO_JAR=$SERVICE_NAME".jar"
SERVER_URL="http://localhost:$SERVER_PORT"
# JAVA OPTS
BASE_JAVA_OPTS="-Denv=dev -Ddev_meta=$config_server_url"
CONFIG_JAVA_OPTS="$BASE_JAVA_OPTS -Dspring.profiles.active=github -Deureka.service.url=$eureka_service_url -Deureka.instance.homePageUrl=$config_server_url"
JAVA_OPTS="$CONFIG_JAVA_OPTS -Dspring.datasource.url=$apollo_config_db_url -Dspring.datasource.username=$apollo_config_db_username -Dspring.datasource.password=$apollo_config_db_password"
export JAVA_OPTS="$JAVA_OPTS -Dserver.port=$SERVER_PORT -Dlogging.file=$LOG_DIR/$SERVICE_NAME.log -Xloggc:$LOG_DIR/heap_trace.txt -XX:HeapDumpPath=$LOG_DIR/HeapDumpOnOutOfMemoryError/"
1.2.3 adminservice部署
将apollo-adminservice-0.10.2-github.zip解压到
~/apollo/dev/adminservice下
修改~/apollo/dev/adminservice/script/startup.sh, 配置数据库、几个meta地址
JAVA_HOME=/usr/local/java/jdk1.8.0_161
apollo_config_db_url=jdbc:mysql://localhost:1504/ApolloConfigDB2?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password=16VHKlYTv7Wg
# meta server url
config_server_url=http://127.0.0.1:8180
admin_server_url=http://127.0.0.1:8190
eureka_service_url=$config_server_url/eureka/
## Adjust server port if necessary
SERVER_PORT=8190
## Adjust log dir if necessary
LOG_DIR=$APOLLO_HOME/logs
SERVICE_NAME=apollo-adminservice
PATH_TO_JAR=$SERVICE_NAME".jar"
SERVER_URL="http://localhost:$SERVER_PORT"
#JAVA OPTS
BASE_JAVA_OPTS="-Denv=dev -Ddev_meta=$config_server_url"
ADMIN_JAVA_OPTS="$BASE_JAVA_OPTS -Dspring.profiles.active=github -Deureka.service.url=$eureka_service_url -Deureka.instance.homePageUrl=$admin_server_url"
JAVA_OPTS="$ADMIN_JAVA_OPTS -Dspring.datasource.url=$apollo_config_db_url -Dspring.datasource.username=$apollo_config_db_username -Dspring.datasource.password=$apollo_config_db_password"
export JAVA_OPTS="$JAVA_OPTS -Dserver.port=$SERVER_PORT -Dlogging.file=$LOG_DIR/$SERVICE_NAME.log -Xloggc:$LOG_DIR/heap_trace.txt -XX:HeapDumpPath=$LOG_DIR/HeapDumpOnOutOfMemoryError/"
1.3 UAT环境
1.3.1 创建数据库
uat环境有portal, 需要分别使用 apollo\scripts\sql\apolloconfigdb.sql和apollo\scripts\sql\apolloportaldb.sql,在mysql中创建配置数据库和portal数据库 (如果要修改数据库名称,注意到sql文件中修改)
portal数据库ServerConfig表中apollo.portal.envs配置的环境为
DEV, FAT, UAT
1.3.2 configservice部署
将apollo-configservice-0.10.2-github.zip解压到
~/apollo/dev/configservice下
修改~/apollo/dev/configservice/script/startup.sh, 配置数据库、几个meta地址
JAVA_HOME=/usr/local/java/jdk1.8.0_161
apollo_config_db_url=jdbc:mysql://localhost:1504/ApolloConfigDB3?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password=16VHKlYTv7Wg
# meta server url
config_server_url=http://127.0.0.1:8080
admin_server_url=http://127.0.0.1:8090
eureka_service_url=$config_server_url/eureka/
## Adjust server port if necessary
SERVER_PORT=8080
## Adjust log dir if necessary
LOG_DIR=$APOLLO_HOME/logs
SERVICE_NAME=apollo-configservice
PATH_TO_JAR=$SERVICE_NAME".jar"
SERVER_URL="http://localhost:$SERVER_PORT"
# JAVA OPTS
BASE_JAVA_OPTS="-Denv=dev -Ddev_meta=$config_server_url"
CONFIG_JAVA_OPTS="$BASE_JAVA_OPTS -Dspring.profiles.active=github -Deureka.service.url=$eureka_service_url -Deureka.instance.homePageUrl=$config_server_url"
JAVA_OPTS="$CONFIG_JAVA_OPTS -Dspring.datasource.url=$apollo_config_db_url -Dspring.datasource.username=$apollo_config_db_username -Dspring.datasource.password=$apollo_config_db_password"
export JAVA_OPTS="$JAVA_OPTS -Dserver.port=$SERVER_PORT -Dlogging.file=$LOG_DIR/$SERVICE_NAME.log -Xloggc:$LOG_DIR/heap_trace.txt -XX:HeapDumpPath=$LOG_DIR/HeapDumpOnOutOfMemoryError/"
1.2.3 adminservice部署
将apollo-adminservice-0.10.2-github.zip解压到
~/apollo/dev/adminservice下
修改~/apollo/dev/adminservice/script/startup.sh, 配置数据库、几个meta地址
JAVA_HOME=/usr/local/java/jdk1.8.0_161
apollo_config_db_url=jdbc:mysql://localhost:1504/ApolloConfigDB3?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password=16VHKlYTv7Wg
# meta server url
config_server_url=http://127.0.0.1:8180
admin_server_url=http://127.0.0.1:8190
eureka_service_url=$config_server_url/eureka/
## Adjust server port if necessary
SERVER_PORT=8190
## Adjust log dir if necessary
LOG_DIR=$APOLLO_HOME/logs
SERVICE_NAME=apollo-adminservice
PATH_TO_JAR=$SERVICE_NAME".jar"
SERVER_URL="http://localhost:$SERVER_PORT"
#JAVA OPTS
BASE_JAVA_OPTS="-Denv=dev -Ddev_meta=$config_server_url"
ADMIN_JAVA_OPTS="$BASE_JAVA_OPTS -Dspring.profiles.active=github -Deureka.service.url=$eureka_service_url -Deureka.instance.homePageUrl=$admin_server_url"
JAVA_OPTS="$ADMIN_JAVA_OPTS -Dspring.datasource.url=$apollo_config_db_url -Dspring.datasource.username=$apollo_config_db_username -Dspring.datasource.password=$apollo_config_db_password"
export JAVA_OPTS="$JAVA_OPTS -Dserver.port=$SERVER_PORT -Dlogging.file=$LOG_DIR/$SERVICE_NAME.log -Xloggc:$LOG_DIR/heap_trace.txt -XX:HeapDumpPath=$LOG_DIR/HeapDumpOnOutOfMemoryError/"
1.3.4 portal部署
将apollo-portal-0.10.2-github.zip解压到
~/apollo/uat/portal
下
修改~/apollo/uat/portal
/script/startup.sh, 配置数据库、几个meta地址
JAVA_HOME=/usr/local/java/jdk1.8.0_161
# apollo portal db info
apollo_portal_db_url=jdbc:mysql://localhost:1504/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=root
apollo_portal_db_password=16VHKlTv7Wg
# meta server url
dev_config_server_url=http://127.0.0.1:8280
fat_config_server_url=http://127.0.0.1:8180
uat_config_server_url=http://127.0.0.1:8080
## Adjust server port if necessary
SERVER_PORT=8070
## Adjust log dir if necessary
LOG_DIR=$APOLLO_HOME/logs
SERVICE_NAME=apollo-portal
PATH_TO_JAR=$SERVICE_NAME".jar"
SERVER_URL="http://localhost:$SERVER_PORT"
BASE_JAVA_OPTS="
-Ddev_meta=$dev_config_server_url -Dfat_meta=$fat_config_server_url -Duat_meta=$uat_config_server_url"
PORTAL_JAVA_OPTS="$BASE_JAVA_OPTS -Dspring.profiles.active=github,auth"
JAVA_OPTS="$PORTAL_JAVA_OPTS -Dspring.datasource.url=$apollo_portal_db_url -Dspring.datasource.username=$apollo_portal_db_username -Dspring.datasource.password=$apollo_portal_db_password"
export JAVA_OPTS="$JAVA_OPTS -Dserver.port=$SERVER_PORT -Dlogging.file=$LOG_DIR/$SERVICE_NAME.log -Xloggc:$LOG_DIR/heap_trace.txt -XX:HeapDumpPath=$LOG_DIR/HeapDumpOnOutOfMemoryError/"
1.4 注意事项
1.4.1 portal数据库ServerConfig表中apollo.portal.envs配置所有支持的环境
DEV, FAT, UAT
1.4.2 portal启动参数设置需要管理的所有环境的meta地址,如:
# meta server url
dev_config_server_url=http://106.75.28.32:8080
fat_config_server_url=http://106.75.28.32:8180
uat_config_server_url=http://106.75.28.32:8280
-Ddev_meta=$dev_config_server_url -Dfat_meta=$fat_config_server_url -Duat_meta=$uat_config_server_url
1.4.3 每个环境的adminservice和configservice设置各自的meta地址及 homePageUrl,如
-Dfat_meta=$config_server_url -Deureka.instance.homePageUrl=$config_server_url
1.4.4 新加环境配置后,已经有的项目, 可以通过补缺环境操作来把缺失的环境项目补上
二、apollo客户端
1.设置环境变量
三种方法, 参看官方文档
https://github.com/ctripcorp/apollo/wiki/Java%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97#122-environment
2.每个客户端在apollo-env.properties中设置相应环境的meta地址,如
dev.meta=http\://a.test.net\:8280
fat.meta=http\://a.test.net\:8180
uat.meta=http\://a.test.net\:8080