Apollo配置中心搭建和使用教程


前言

工作中使用的是apollo配置中心,平時學習也需要使用到,因此自己搭建一套,方便平時在家學習使用。搭建過程遇到了一些坑,也記錄下。

apollo搭建

我是使用的京東雲服務器搭建的單機環境,因此直接下載release包安裝方便。

先說下結論,創建單機環境不要看github上apollo的官方做法使用scripts/startup.sh啟動,我沒做成功,坑很多,想簡單,就按照我這樣操作。

step1:創建apollo數據庫

自己數據庫導入下面兩個地址的sql,這樣就分別創建了ApolloConfigDB、ApolloPortalDB

sql地址

https://github.com/nobodyiam/apollo-build-scripts/blob/master/sql/apolloportaldb.sql
https://github.com/nobodyiam/apollo-build-scripts/blob/master/sql/apolloconfigdb.sql

step2:安裝apollo

從https://github.com/ctripcorp/apollo/releases/tag/v1.7.1下載

apollo-adminservice-1.7.1-github.zip
apollo-configservice-1.7.1-github.zip
apollo-portal-1.7.1-github.zip

分別解壓到單獨的文件夾,進行如下操作

1:修改下面三個目錄內的文件,內容改為數據庫地址和用戶密碼
apollo-adminservice-1.7.1-github\config\application-github.properties
apollo-configservice-1.7.1-github\config\application-github.properties
apollo-portal-1.7.1-github\config\application-github.properties

2:自定義端口,三個服務端口分別如下
apollo-configservice 18080 注冊中心地址
apollo-adminservice 18090 
apollo-portal 18070 門戶登陸端口

apollo-configservice不以8080端口啟動的情況下,要修改ApolloConfigDB庫的ServerConfig表的eureka.service.url的value值為http://localhost:18080/eureka/,我是單機環境,因此是localhost,端口從數據庫默認的8080改為18080

我自己只是使用了dev環境,其他沒使用,因此我的G:\apollo-portal-1.7.1-github\config\apollo-env.properties內容如下
local.meta=http://localhost:18080
dev.meta=http://localhost:18080
#fat.meta=http://fill-in-fat-meta-server:8080
#uat.meta=http://fill-in-uat-meta-server:8080
lpt.meta=${lpt_meta}
#pro.meta=http://fill-in-pro-meta-server:8080


3.上傳並啟動
上傳下面三個文件夾到服務器/mydata/apollo-1.7.1目錄下
apollo-adminservice-1.7.1
apollo-configservice-1.7.1
apollo-portal-1.7.1
4.啟動
啟動順序configservice->adminservice->portal
nohup java -Dserver.port=18080 -Deureka.instance.ip-address={雲服務器公網ip} -Deureka.instance.homePageUrl=http://{雲服務器公網ip}:18080 -jar apollo-configservice-1.7.1.jar  &

nohup java -Dserver.port=18090 -Deureka.instance.ip-address={雲服務器公網ip} -Deureka.instance.homePageUrl=http://{雲服務器公網ip}:18090 -jar apollo-adminservice-1.7.1.jar &

nohup java -Dserver.port=18070 -jar apollo-portal-1.7.1.jar &

cd /mydata/apollo-1.7.1/apollo-configservice-1.7.1-github/
nohup java -Xmx256m -Xms256m -Xmn128m -Dserver.port=18080 -Deureka.instance.ip-address=114.67.85.120  -jar apollo-configservice-1.7.1.jar &

cd /mydata/apollo-1.7.1/apollo-adminservice-1.7.1-github/
nohup java -Xmx256m -Xms256m -Xmn128m -Dserver.port=18090 -Deureka.instance.ip-address=114.67.85.120 -jar apollo-adminservice-1.7.1.jar &

cd /mydata/apollo-1.7.1/apollo-portal-1.7.1-github/
nohup java -Xmx512m -Xms512m -Xmn256m -Dserver.port=18070 -jar apollo-portal-1.7.1.jar &

每個命令輸入后等2min再啟動下一個服務,因為有依賴關系。

當然加jvm參數啟動的命令參考如下(從startup.sh copy來的),不建議加一大堆這樣參數,畢竟自己使用
nohup java -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom -Dserver.port=18080 -Dlogging.file=/opt/logs/100003171/apollo-configservice.log -XX:HeapDumpPath=/opt/logs/100003171/HeapDumpOnOutOfMemoryError/ -XX:+UseParNewGC -Xloggc:/opt/logs/100003171/gc.log -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:+CMSClassUnloadingEnabled  -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=5M -Deureka.instance.ip-address={雲服務器公網ip} -Deureka.instance.homePageUrl=http://{雲服務器公網ip}:18080 -jar apollo-configservice-1.7.1.jar &

nohup java -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom -Dserver.port=18090 -Dlogging.file=/opt/logs/100003172/apollo-configservice.log -XX:HeapDumpPath=/opt/logs/100003172/HeapDumpOnOutOfMemoryError/ -XX:+UseParNewGC -Xloggc:/opt/logs/100003172/gc.log -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:+CMSClassUnloadingEnabled  -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=5M -Deureka.instance.ip-address={雲服務器公網ip} -Deureka.instance.homePageUrl=http://{雲服務器公網ip}:18090 -jar apollo-adminservice-1.7.1.jar &

nohup java -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom -Dserver.port=18070 -Dlogging.file=/opt/logs/100003173/apollo-configservice.log -XX:HeapDumpPath=/opt/logs/100003173/HeapDumpOnOutOfMemoryError/ -XX:+UseParNewGC -Xloggc:/opt/logs/100003173/gc.log -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:+CMSClassUnloadingEnabled  -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=5M -jar apollo-portal-1.7.1.jar &

step3:驗證

啟動configservice服務后,瀏覽器輸入http://雲服務器公網ip:18080/ 就可以看到信息

image-20201010000942415

step4:登錄apollo

啟動portal服務后,就可以登陸了,瀏覽器輸入http://雲服務器公網ip:18070/,用戶默認密碼是apollo/admin

image-20201010001240574

step5:使用apollo

項目使用apollo

pom.xml引入apollo-client

<dependency>
			<groupId>com.ctrip.framework.apollo</groupId>
			<artifactId>apollo-client</artifactId>
			<version>1.7.0</version>
		</dependency>

在springboot啟動類上加上@EnableApolloConfig即可開啟了apollo。

那么在啟動springboot時候,啟動類加入jvm參數啟動,這里的啟動參數通常都是必須加的,可以記錄下。啟動參數如下:

-Denv=dev -Dspring.profiles.active=dev -Dconsole.log=true -Dapollo.cluster=default -Dapp.id=mall-test -Ddev_meta=http://{雲服務器公網ip}:18080/

啟動參數解釋如下

和apollo相關的配置如下

-Ddev_meta=http://{雲服務器公網ip}:18080/ #連接apollo的地址

-Denv=dev #使用dev環境

-Dapp.id=mall-test #使用app.id是mall-test,和上面的圖對應,appid是apollo的一個唯一標識,不能重復。

-Dapollo.cluster=default #使用默認的集群,當然可以創建多個集群,我上面的圖就有個dev01集群,這個是不同環境使用不同配置很有用

-Dapollo.meta=http://{雲服務器公網ip}:18080/ #貌似新版

-Dspring.profiles.active=dev #使用dev配置文件,spring的配置

-Dconsole.log=true #spring的配置,打印日志到console

啟動使用apollo成功日志會是這樣

image-20201010002332688

同時在apollo上實例列表也可以驗證到,如果有連接到apollo成功,就會在這里顯示。

image-20201010002416473

這樣就可以把配置都放apollo,不需要寫本地了。

apollo的監聽器例子

import java.net.URI;
import java.util.List;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import com.ctrip.framework.apollo.model.ConfigChangeEvent;
import com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Data
@Component
public class StellarApolloConfig {
    
	@Value("${all.restart.switch}")
	private String allRestartSwitch = "off";
	
	@ApolloConfigChangeListener
	private void listenRestartChange(ConfigChangeEvent changeEvent) {
		if (changeEvent.isChanged("all.restart.switch")) {
			log.info("all.restart.switch變化");
			allRestartSwitch = changeEvent.getChange("all.restart.switch").getNewValue().trim();
			log.info("all.restart.switch變化,allRestartSwitch={}", allRestartSwitch);
		}
	}
	
}

搭建apollo過程中遇到的坑

剛開始是按照官方文檔來安裝的,但是啟動configservice服務的時候,就遇到了解決不了問題

按照官方文檔啟動configservice時候,執行的是apollo-configservice-1.7.1-github\scripts\startup.sh,由於我要讓注冊中心使用18080端口,也在startup.sh修改了,但是啟動就是報錯

啟動apollo-configservice-1.7.1時候apollo-1.7.1apollo-configservice-1.7.1-github.log文件報錯
start-stop-daemon: warning: this system is not able to track process names
longer than 15 characters, please use --exec instead of --name.
start-stop-daemon: user '197108' not found
使用系統是ubuntu1604,看了下啟動腳本apollo-configservice-1.7.1-github/scripts/startup.sh,里面jar啟動不是java -jar xx.jar方式啟動,而是xx.jar start方式啟動,我第一次遇到這樣啟動方式,也搞不明白

因此就使用了常規的java -jar方式啟動,就是文章開頭地方


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM