采用微服務開發框架開發項目時會涉及多個系統,如果要更改配置參數需要在多個系統間逐一更改,比較費時,而且容易遺漏,效率低下,次問題可以采用Apollo配置中心的方式解決,下面將介紹如何配置:
准備環境:本地環境win7/win10,docker所在服務器centos7
第一步
下載Apollo到本地並解壓到磁盤,URL:https://github.com/ctripcorp/apollo
(linux: wget https://github.com/ctripcorp/apollo/archive/master.zip)
第二步
編輯解壓后的docker-compose.yml文件,內容如下:
version: "3" ##版本信息
services:
apollo-configservice: ##容器服務名
container_name: apollo-configservice ##容器名
network_mode: "host" ##綁定主機網絡模式
build: apollo-configservice/src/main/docker/ ##Dockerfile路徑
image: apollo-configservice
ports:
- "8081:8080" ##映射主機端口,8080為Java常用端口,避免將來沖突此處采用8081,apollo-configservice默認端口為8080
volumes:
- "/tmp/logs/100003171:/opt/logs/100003171" ##將docker容器輸出的日志目錄綁定到主機的tmp文件夾下
environment:
- spring_datasource_url=jdbc:mysql://192.168.123.144:3306/ApolloConfigDB?characterEncoding=utf8 ##mysql連接字符串,該IP為mysql服務所在機器, 下面類同
- spring_datasource_username=root
- spring_datasource_password=xxx
apollo-adminservice:
container_name: apollo-adminservice
network_mode: "host"
build: apollo-adminservice/src/main/docker/
image: apollo-adminservice
ports:
- "8090:8090"
depends_on:
- apollo-configservice
volumes:
- "/tmp/logs/100003172:/opt/logs/100003172"
environment:
- spring_datasource_url=jdbc:mysql://192.168.123.144:3306/ApolloConfigDB?characterEncoding=utf8
- spring_datasource_username=root
- spring_datasource_password=xxx
apollo-portal:
container_name: apollo-portal
network_mode: "host"
build: apollo-portal/src/main/docker/
image: apollo-portal
ports:
- "8070:8070"
depends_on:
- apollo-adminservice
volumes:
- "/tmp/logs/100003173:/opt/logs/100003173"
environment:
- spring_datasource_url=jdbc:mysql://192.168.123.144:3306/ApolloPortalDB?characterEncoding=utf8
- spring_datasource_username=root
- spring_datasource_password=xxx
注意兩點:
1. 我這里將本機的8081,8090,8070分別映射到apollo三個組件的不同端口,各位可以根據需要進行修改
2. mysql連接字符串我這里采用了外網IP的方式,通過固定IP加端口指定,root/xxx為連接賬戶信息
第三步
下載apollo的三個組件(目前最新為1.4.0),Url: https://github.com/ctripcorp/apollo/releases
l apollo-configservice:提供配置獲取接口,提供配置更新推送接口,接口服務對象為Apollo客戶端
l apollo-adminservice:提供配置管理接口,提供配置修改、發布等接口,接口服務對象為Portal,以及Eureka
l apollo-portal:提供Web界面供用戶管理配置
查找對應apollo-master下對應組件名的文件夾,進入在第二步的docker-compose文件中,build節點指定的Dockfile路徑,將下載好的組件拷貝到該目錄,如下
編輯該文件夾內的Dockerfile文件,修改環境變量VERSION:
改前:
改后(簡化操作,我這里直接使用了下載組件去除名稱后的版本號):
參照該操作,依次將三個組件操作完畢
第四步
1. 安裝mysql5.7.19,下載地址:https://downloads.mysql.com/archives/community/
修改mysql配置參數(windows環境下my.ini文件,linux為my.cnf)
注:我這里為了簡化操作直接在本地windows環境上操作,安裝后沒有在安裝目錄下找到配置參數文件,所以需要手動創建(如忘記安裝目錄可以在doc窗口執行命令查看: mysql --help,Default options are read from the following files in the given order)
進入安裝目錄,新建my.ini,內容如下
[mysql]
# 設置mysql客戶端默認字符集
default-character-set=utf8
# 不限制IP,允許遠程訪問
bind-address = 0.0.0.0
[mysqld]
#設置3306端口
port = 3306
# 設置mysql的安裝目錄,自行修改
basedir=E:\Program Files (x86)\MySQL\MySQL Server 5.7
# 設置mysql數據庫的數據的存放目錄,自行修改
datadir=E:\Program Files (x86)\MySQL\MySQL Server 5.7\data
# 允許最大連接數
max_connections=200
# 服務端使用的字符集默認為8比特編碼的latin1字符集
character-set-server=utf8
# 創建新表時將使用的默認存儲引擎
default-storage-engine=INNODB
#開啟查詢緩存
explicit_defaults_for_timestamp=true
#跳過數據庫權限驗證,可選
skip-grant-tables
2. 安裝HeildiSQL,完成后打開並連接mysql數據庫,用戶root,密碼空,選中mysql庫執行下面的代碼
-- 修改root用戶密碼
update user set authentication_string = password('xxx'), password_expired = 'N', password_last_changed = now() where user = 'root';
-- 授權root用戶遠程登錄,%表示不限IP
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'xxx';
-- 刷新權限,一定要執行
flush privileges;
3. 重啟mysql服務
第五步
使用工具HeildiSQL登錄mysql,導入腳本對apollo數據庫進行初始化,腳本目錄:apollo-master\scripts\docker-quick-start\sql
導入完成后可以在數據庫列表看到下圖效果:
第六步
使用xftp工具將前面第一步、第二步、第三步准備好的apollo-master文件夾內所有文件都目標linux服務器,我這里采用centos7,上傳到了桌面
在該文件夾下右鍵鼠標,新建終端,運行下面的腳本(建議管理員權限)
docker-compose up -d
看到上圖內容時表示執行成功,然后使用下面的腳本查看容器狀態
docker ps -a
留意apollo開頭的容器狀態,看到up表示成功了,如果是exited之類需要進入前面在docker-compose.yml文件夾指定的日志目錄下查看異常信息,我的路徑是:
第七步
進入Apollo的后台管理頁面,賬戶apollo/admin
檢查Eureka
第八步
1. 修改apollo-portal容器的環境變量
進入容器: docker exec -it apollo-portal /bin/bash
編輯環境變量apollo-env.properties
保存完畢后,Ctrl+D退出當前容器
2. 修改數據庫ApolloConfigDB的serverconfig表中的eureka.service.url所在數據行對應的value列值
http://localhost:8081/eureka/ --端口見前面docker-compose.yml文件配置
3. 修改完成后,重啟docker中的apollo三個容器
其它部署問題見:官方的解決方案