上一节:饮冰三年-人工智能-Python-58-Apollo之05Python实例
一、准备工作
本次使用的是测试服务器具体信息如下:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.1 LTS"
版本要求:
a: Java
Apollo服务端:1.8+
Apollo客户端:1.7+
b: MySQL
版本要求:5.6.5+
注意:Apollo的表结构对timestamp
使用了多个default声明,所以需要5.6.5以上版本。
考虑后期维护追踪,这里将使用的软件包统一存储在百度云盘中,仅供参考
地址:https://pan.baidu.com/s/1gZf80TLHAQHDMIaX-Ht_AA 提取码为:6666
文件安装目录
文件名 |
作用 |
地址 |
jdk1.8.0_256 |
用于存放jdk文件内容 |
/usr/lib/jvm |
mysql | 用于存放mysql文件内容 |
/usr/local/mysql |
apollo | 用于存放apollo文件内容 | /usr/lib/apollo |
二、部署步骤
2.1 安装Java:
1:每个场景下使用的jdk版本不同,可以按照自己所需的版本要求,下载安装包。
2:把jdk包解压到安装的路径文件夹下(/usr/lib/jvm)
3:配置环境变量之JDK
vim /etc/profile
添加如下内容:JAVA_HOME根据实际目录来
source /etc/profile
5:检验Java是否安装成功
java -version
注意:如果启动服务的时候提示
Unable to find Java
sudo ln -s /usr/lib/jvm/jdk1.8.0_261/bin/java /sbin/java
2.2 安装mysql:
1:每个场景下使用的版本不同,可以按照自己所需的版本要求,下载安装包。
2:把安装包解压到安装的路径文件夹下(/usr/lib/mysql)
3:在/usr/local/mysql目录下创建data目录
sudo mkdir /usr/lib/mysql/data
4:添加mysql用户,并更改mysql目录下所有的目录及文件夹所属的用户组和用户,以及权限
sudo useradd mysql
sudo chown -R mysql:mysql /usr/lib/mysql
sudo chmod -R 755 /usr/lib/mysql
5:编译安装并初始化mysql,务必记住初始化输出日志末尾的密码(数据库管理员临时密码)
cd /usr/lib/mysql/bin
sudo ./mysqld --initialize --user=mysql --datadir=/usr/lib/mysql/data --basedir=/usr/lib/mysql
注意:如果安装过程中出现:./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
解决方法:sudo apt-get install libaio1
6:编辑配置文件my.cnf,添加配置如下
cd /etc/mysql
sudo ln -s /usr/lib/mysql/support-files/mysql.server /etc/init.d/mysql
sudo ln -s /usr/lib/mysql/bin/mysql /usr/bin/mysql
sudo service mysql restart
8:登录mysql,修改密码
mysql -u root -p
Enter password:注意这里的密码就是步骤5中的临时密码
mysql>set password for root@localhost = password('yourpass');
9:开发远程连接
连上数据库
use mysql
设置用户
update user set host='%' where user='root';
刷新
flush privileges;
连接上MySQL后,可以通过如下命令检查:
SHOW VARIABLES WHERE Variable_name = 'version';
2.3 安装Apollo:
分布式部署需要事先确定部署的环境以及部署方式。
- DEV 开发环境
- UAT 测试环境
- PRO 生产环境
Portal部署在生产环境的机房,通过它来直接管理DEV、UAT、PRO等环境的配置
Meta Server、Config Service和Admin Service在每个环境都单独部署,使用独立的数据库
2.3.1 创建数据库:
Apollo服务端共需要两个数据库:ApolloPortalDB
和ApolloConfigDB
,我们把数据库、表的创建和样例数据都分别准备了sql文件,只需要导入数据库即可。
需要注意的是ApolloPortalDB只需要在生产环境部署一个即可,而ApolloConfigDB需要在每个环境部署一套,如dev、uat和pro分别部署3套ApolloConfigDB。(初始化脚本在 一、准备工作 提供的资料中)
在数据库中运行以上脚本
2.3.1.1 验证:
select `Id`, `Key`, `Value`, `Comment` from `ApolloPortalDB`.`ServerConfig` limit 1;
select `Id`, `Key`, `Value`, `Comment` from `ApolloConfigDBDEV`.`ServerConfig` limit 1;
2.3.1.2 调整配置:
update `ApolloPortalDB`.`ServerConfig` set value ='dev,uat,pro' where `Key` = 'apollo.portal.envs'
2.3.2 部署Apollo服务端:
1:文件安装
创建文件夹,用于安装apollo
sudo mkdir /usr/lib/apollo
sudo mkdir /usr/lib/apollo/adminservice
sudo mkdir /usr/lib/apollo/configservice
sudo mkdir /usr/lib/apollo/portal
将准备资料中的文件分别放置到相应的文件夹下,并进行解压(unzip 命令解压)
2:文件配置
sudo vim /usr/lib/apollo/configservice/config/application-github.properties
注意spring.datasource.url:spring.datasource.url = jdbc:mysql://localhost:3306/ApolloConfigDBPRO?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
sudo vim /usr/lib/apollo/adminservice/config/application-github.properties
注意spring.datasource.url:spring.datasource.url = jdbc:mysql://localhost:3306/ApolloConfigDBPRO?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
sudo vim /usr/lib/apollo/portal/config/application-github.properties
注意spring.datasource.url:spring.datasource.url = jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
local.meta=http://localhost:8080 dev.meta=http://localhost:8080 fat.meta=http://localhost:8080 uat.meta=http://localhost:8080 lpt.meta=${lpt_meta} pro.meta=http://localhost:8080
3:启动
sudo /usr/lib/apollo/portal/scripts/startup.sh
sudo /usr/lib/apollo/adminservice/scripts/startup.sh
sudo /usr/lib/apollo/configservice/scripts/startup.sh
4:验证
2.3.3 部署UAT:
我们将uat环境部署到另一台的服务器上。
2.3.3.1.修改vim /usr/lib/apollo/portal/config/apollo-env.properties
2.3.3.2 安装Java
2.3.3.3 部署Apollo
sudo mkdir /usr/lib/apollo
sudo mkdir /usr/lib/apollo/adminservice
sudo mkdir /usr/lib/apollo/configservice
同样的调整配置
spring.datasource.url = jdbc:mysql://XX.X.X.X:3306/ApolloConfigDBUAT?characterEncoding=utf8&useSSL=false&serverTimezone=UTC spring.datasource.username = root spring.datasource.password = 123
注意:调用bash的时候出现curl command not found
解决办法:
apt-get install curl
2.3.3 部署其他环境:
按照同样的步骤我们部署其他的环境......至此,Apollo环境部署基本成功
三、配置项整理
主要思想:把程序启动时用到的环境变量,从Apollo中获取。整理相应的配置项主要来源(Docker中原有的环境变量:主+config.py 中用到的配置:辅)
注意:保密,
四、Apollo应用配置
将步骤三中的内容相应的配置到Apollo相应的各个项目中
4.1 调整部门信息
4.2 创建一个项目(cy_common)用于存放公共属性
4.2.1 创建项目,设置AppID和应用名称
4.2.2 添加命名空间(common_config),设置公共属性值,用于存储各个系统中公共的配置项,如:OA_HOST、ERP_HOST、MES_HOST
4.2.3 配置属性值,并发布
4.2.4 同样的步骤,添加配置命名空间(common_rabbit_config)
4.3 同样的步骤创建一个项目(ERP)用于存放ERP相关信息
4.3.1 创建项目,设置AppID和应用名称,与4.2.1 类似,不再赘述
4.3.2 添加命名空间,关联公共命名空间(common_config和common_rabbit_config),并发布
4.3.3 添加erp系统专属命名空间(erp_config)配置信息并发布
4.4 同样的步骤创建一个项目(OA、MES)用于存放相关信息
4.5 效果展示与测试
4.5.1 整体结果
整体分为三个环境(DEV、UAT、PRO);每个环境又包括多个命名空间(common_config、common_rabbit_config、erp_config....)
每个环境(DEV、UAT、PRO);对应命名空间相互独立,可单独发布,互不影响(common_config、common_rabbit_config、erp_config)