文章目錄
1. 前言
Apollo(阿波羅) 是攜程框架部門研發的分佈式配置中心,能夠集中化管理應用不同環境、不同集羣的配置,配置修改後能夠實時推送到應用端,並且具備規範的權限、流程治理等特性,適用於微服務配置管理場景。
服務端基於Spring Boot和Spring Cloud開發,打包後可以直接運行,不需要額外安裝Tomcat等應用容器。
***本文使用docker 快速搭建 Apollo 服務端 版本爲1.7.0版本 目的是提供一個對Apollo的初步認識 ,避免踩坑,官方文檔對無基礎看着有點喫力了 ,如果需要詳細介紹文檔 移步官方 ***
2 單環境(Dev)搭建
2.1 架構簡介
首先,Apollo 有三個服務:
- config-service 提供配置的讀取、推送等功能,服務對象是Apollo客戶端
- admin-service 提供配置的修改、發佈等功能,服務對象是portal(管理界面)
- portal 提供運維人員/程序員 操作管理界面
其中 config 與 admin 是多實例的對應標題中的多環境 , 因此如果單環境只需要各部署一個config,admin,portal ,其中eureka 是在config 中的,因此需要提前啓動config ,並在配置項數據庫中提供eureka訪問地址
2.2 單環境搭建
需要提前安裝好 docker(最好換下國內源) ,最好關閉防火牆(一般部署在內網,默認安全)
我這裏的IP是 192.168.203.101 ,數據庫 192.168.203.101 3306 root root
2.2.1 環境準備
- 拉取鏡像
docker pull apolloconfig/apollo-configservice:1.7.0-SNAPSHOT
docker pull apolloconfig/apollo-adminservice:1.7.0-SNAPSHOT
docker pull apolloconfig/apollo-portal:1.7.0-SNAPSHOT
- 導入數據庫腳本
鏈接: https://pan.baidu.com/s/1wc7srmvwD7xZ9ZUa4h0S7Q 提取碼: rv7p
完成後在數據庫中把 ApolloConfigDB 中的ServerConfig 的 eureka.service.url
value 改成 http://192.168.203.101:8080/eureka/
對應下面的 config 的eureka地址
2.2.2 啓動
- 啓動
需要先啓動config,因爲eureka在config,需要它提供註冊服務 ,然後啓動admin 最後啓動portal
在啓動過程中可能出現eureka 註冊失敗,需要等eureka啓動後就不會了
config
docker run -p 8080:8080 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloConfigDB?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
-d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-cs apolloconfig/apollo-configservice:1.7.0-SNAPSHOT
admin
docker run -p 8090:8090 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloConfigDB?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
-d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-as apolloconfig/apollo-adminservice:1.7.0-SNAPSHOT
portal
docker run -p 8070:8070 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloPortalDB?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
-e APOLLO_PORTAL_ENVS=dev \
-e DEV_META=http://192.168.203.101:8080 \
-d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-web apolloconfig/apollo-portal:1.7.0-SNAPSHOT
也可以啓動一個看下日誌有沒有出錯
docker tail -f apollo-cs/apollo-as/apollo-web
- 最後驗證
輸入 http://192.168.203.101:8070/ 驗證 初始賬號密碼 : apollo/admin
2. 多環境(dev,prod) 部署
2.1 架構
前面講到 config 與 admin 是 多實例 ,我們一般應用部署多實例是爲了負載,多數都是單一數據源,而Apollo 使用多實例是爲了環境隔離,因此需要多個數據源 , 同時如果需要測試與生產環境操作隔離也可以部署多個portal 這樣也需要多個portaldb 數據庫 ,我們這裏使用dev,prod
兩個 然後前臺一個,具體分佈如下:
機器 | config-服務 | admin-服務 | portal-服務 | 數據庫 |
---|---|---|---|---|
192.168.203.101 | apollo-cs1 | apollo-as1 | 3306/3307 | |
192.168.203.102 | apollo-cs2 | apollo-as2 | apollo-web |
其中cs1 as1 連接 3306 ,cs2 as2 連接3307 , 同時我們需要在3306與3307的配置項中標明eureka 地址 逗號隔開 , 同時在portal 中 寫多個配置環境
如果是從單版本搭建複用,最好把config 重新建一下 , 不然兩個configdb 數據不一致會報錯
在1.7中 只支持以下環境
com.ctrip.framework.apollo.core.enums.Env
LOCAL, DEV, FWS, FAT, UAT, LPT, PRO, TOOLS, UNKNOWN;
2.2 開始
開始操作,在192.168.203.101-102 上面分別啓動apollo-cs1 , apollo-cs2
2.2.1 啓動前準備
當然 如果 docker 目錄未創建需要提前創建並且授權
授權語句:
chcon -Rt svirt_sandbox_file_t /yourdir
在3306 3307 數據庫中 ApolloConfigDB.ServerConfig
中的 key=eureka.service.url
修改對應的value
爲: http://192.168.203.101:8080/eureka/,http://192.168.203.102:8080/eureka/
2.2.2 啓動config
# 101 啓動
docker run -p 8080:8080 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloConfigDB?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
-d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-cs1 apolloconfig/apollo-configservice:1.7.0-SNAPSHOT
## 102 啓動
docker run -p 8080:8080 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3307/ApolloConfigDB?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
-d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-cs2 apolloconfig/apollo-configservice:1.7.0-SNAPSHOT
2.2.3 啓動admin
# 101 啓動
docker run -p 8090:8090 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloConfigDB?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
-d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-as1 apolloconfig/apollo-adminservice:1.7.0-SNAPSHOT
# 102 啓動
docker run -p 8090:8090 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3307/ApolloConfigDB?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
-d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-as2 apolloconfig/apollo-adminservice:1.7.0-SNAPSHOT
2.2.4 啓動portal
101 已經有兩個數據庫服務了 ,所以把前臺放在102 上面 , 這裏與單機改動的點是:
- APOLLO_PORTAL_ENVS 幾個環境就寫幾個
- DEV_META 分別指向不同環境的eureka 服務地址
- 這臺服務器web服務只有一個 所以我把端口映射到了80
docker run -p 80:8070 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloPortalDB?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
-e APOLLO_PORTAL_ENVS=dev,prod \
-e DEV_META=http://192.168.203.101:8080 \
-e PROD_META=http://192.168.203.102:8080 \
-d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-web apolloconfig/apollo-portal:1.7.0-SNAPSHOT
至此可以訪問 http://192.168.203.102/
然後登錄進去apollo/admin , 愉快的體驗吧