环境
window10
虚拟机:VMware Pro 12 centos7 、ubuntu16.04
CRT: 8
mysql:5.6
准备工作
虚拟机要准备好,我准备了两个centos7
和一个ubuntu 16.04
window10 中装好MySQL
;
下载两个SQL
:
执行上面SQL
,创建好表;
apolloportaldb
库的验证语句:
select `Id`, `Key`, `Value`, `Comment` from `ApolloPortalDB`.`ServerConfig` limit 1;
ApolloConfigDB
库的验证语句:
select `Id`, `Key`, `Value`, `Comment` from `ApolloConfigDB`.`ServerConfig` limit 1;
我的设备环境
一台centos7
虚拟机:地址:192.168.116.133(部署dev
环境的apolloconfig
和apolloadmin
)
一台ubuntu
虚拟机:地址:192.168.116.134(部署apolloportaldb
)
window10
宿主机:地址:192.168.1.104 (装MySQL
数据库)
下载安装包
也可以源码构建,但是目前我并不要二次改造,所以就直接下载安装包了
apollo-adminservice-1.5.1-github.zipapollo-configservice-1.5.1-github.zipapollo-portal-1.5.1-github.zip
最新版的地址:https://github.com/ctripcorp/apollo/releases
修改配置
下载了上面三个压缩包后,全部都解压;
修改apollo-configservice的配置
找到apollo-configservice-x.x.x-github/config/application-github.properties
文件:
spring.datasource.url = jdbc:mysql://192.168.1.104:3306/ApolloConfigDB?useSSL=false&characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = root
因为我虚拟机上没有装
mysql
,所以我这里不能写localhost:3306,而是写window10主机的IP地址
修改apollo-adminservice的配置
找到apollo-adminservice-x.x.x-github/config/application-github.properties
文件:
spring.datasource.url = jdbc:mysql://192.168.1.104:3306/ApolloConfigDB?useSSL=false&characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = root
修改apollo-portal的配置
找到将apollo-portal-x.x.x-github/config/apollo-env.properties
文件:
目前我就部署dev环境
local.meta=http://localhost:8080
dev.meta=http://192.168.116.133:8080
# 假设还要部署fat环境
#fat.meta=http://192.168.116.135:8080
找到将apollo-portal-x.x.x-github/config/application-github.properties
文件:
spring.datasource.url = jdbc:mysql://192.168.1.104:3306/ApolloConfigDB?useSSL=false&characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = root
修改MySQL数据库中数据
apolloconfigdb
找到serverconfig表中key
:eureka.service.url
,写eureka
的地址;
又因为eureka
和config
目前的实现是和config
是一个进程,所以只需要写config
服务所在服务器的地址。
apolloportaldb
找到serverconfig表中key
:apollo.portal.envs
的数据
我这里只部署了dev,所以不用改,如果部署了dev
、fat
和uat
等,那么就要以逗号分割接着后面写;
开启MySQL远程连接
随便打开一个查询,执行如下SQL
:
# GRANT ALL PRIVILEGES ON *.* TO '账号'@'%' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';
%代表所有主机,也可以具体到你的主机ip地址
window防火墙添加入站规则
因为虚拟机要远程访问window的数据库,得开放端口3306
。
虚拟机开放8080和8090端口
因为apollopartaldb
需要去连接apolloconfig
,
所以apolloconfig
所在的服务器,需要开放8080
和8090
端口
具体怎么开后门,根据自己的环境百度吧~
部署
再次打包成压缩包
window
直接使用压缩软件进行压缩。
上传到虚拟机
可以使用rz
命令进行上传。
再使用unzip
进行解压
先启动apollo-configservice
我的路径:
/home/yutao/programefile/apollo/apollo-configservice-1.5.1-github/scripts
修改执行权:
sudo chmod 755 ./startup.sh
sudo chmod 755 ./shutdown.sh
然后执行:
[yutao@localhost scripts]$ ./startup.sh
提示
启动日志里面会报错误:
com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: 拒绝连接 (Connection refused)
at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187)
at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123)
at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27)
at com.sun.jersey.api.client.Client.handle(Client.java:652)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682)
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570)
at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.register(AbstractJerseyEurekaHttpClient.java:56)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59)
at com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient.execute(MetricsCollectingEurekaHttpClient.java:73)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59)
at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.executeOnNewServer(RedirectingEurekaHttpClient.java:118)
at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.execute(RedirectingEurekaHttpClient.java:79)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59)
at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:120)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59)
at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56)
at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:829)
at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:121)
at com.netflix.discovery.InstanceInfoReplicator$1.run(InstanceInfoReplicator.java:101)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.ConnectException: 拒绝连接 (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:606)
at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:121)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445)
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173)
... 30 common frames omitted
2020-01-12 23:20:52.709 WARN 12525 --- [DiscoveryClient-InstanceInfoReplicator-0] c.n.d.s.t.d.RetryableEurekaHttpClient : Request execution failed with message: java.net.ConnectException: 拒绝连接 (Connection refused)
2020-01-12 23:20:52.709 WARN 12525 --- [DiscoveryClient-InstanceInfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_APOLLO-CONFIGSERVICE/localhost:apollo-configservice:8080 - registration failed Cannot execute request on any known server
刚启动报这个错是正常的,因为config service
要向eureka
注册,但是eureka
还没启动好(因为eureka
和config service
是同一个进程),过一会儿就OK了。
启动apollo-adminservice
和上面类似的步骤;
先修改执行权,再执行./startup.sh
来启动。
启动apollo-portal
和上面类似的步骤;