社长,一个爱学习,爱分享的程序猿,始终相信,付出总会有回报的。知识改变命运,学习成就未来。爱拼才会赢!
程序猿学社的GitHub,已整理成相关技术专刊,欢迎Star:。
https://github.com/ITfqyd/cxyxs
要求:有一定的apollo基础
环境:window作为搭建环境,linux类似
在项目开发中,我们常用的四个环境,开发(dev 实际上就是本地环境 使用人群开发),集成环境(sit 使用人群测试人员),仿真(uat 测试环境,接入真实的数据,进行模拟仿真,使用人群测试人员),生产(pro 用户真实使用的环境,也可称之为线上环境,使用人群真实的用户),这四者是我们开发必不可少的四个环境,实际上,像一些小的公司,会只有两个环境,就是开发环境+生产环境,这样很不好,没有对应的测试,就直接发生产,很容易造成一些大的事故,最主要的是,用户体验不好,开发一个软件产品,不管你的产品再怎么牛逼,用户体验不好,使用的人群也不会多。
一般企业常见部署方案:Apollo-adminservice+apollo-configservice,这两个服务,分别在pro,sit,uat,dev各搭建一套,apollo-portal搭建一套就行。
https://github.com/nobodyiam/apollo-build-scripts
导入configdb和protaldb这两个文件夹下面的脚本到mysql服务器。
多复制一个pro环境config配置,用来保存pro环境的config配置。
默认是dev环境的apolloconfigdb的如下端口改为8080,pro改为8082
在单节点已部署的前提上,把apolloconfigdb.sql复制一遍,把数据库名改一下。一个环境需要一个config对应的db,我这里两个环境,所以这里3个文件,protal不管多少个环境,只需要一个,这里为了模拟多环境效果,我们就搭建dev和pro两个环境。正常环境是多台机器,一台机器一个config+admin服务,这里我们通过本地来模拟。
服务名 | Dev环境 | Pro环境 |
apollo-configservice | 8080 | 8082 |
apollo-adminservice | 8090 | 8091 |
apollo-portal | 8070 |
因我在一台机器上模拟的多环境部署,所以端口不能冲突,需要改一下pro数据库的配置
https://github.com/ctripcorp/apollo/tree/master
启动build.bat会对项目进行项目构建
如下三个文件夹下项目的target下会多一个zip压缩文件
创建一个文件夹/java/apollo 用来系统管理多个环境
创建对应的目录结构,并解压zip,形成如下结构
dev环境配置修改
#### D:\java\apollo\dev\adminservice\apollo-adminservice-1.6.0-SNAPSHOT-github\config\app.properties
appId=100003171
#### D:\java\apollo\dev\adminservice\apollo-adminservice-1.6.0-SNAPSHOT-github\config\application-github.properties
spring.datasource.url = jdbc:mysql://XXXXXX:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = xxxx
spring.datasource.password = xxxx
#### D:\java\apollo\dev\adminservice\apollo-adminservice-1.6.0-SNAPSHOT-github\scripts\startup.sh
LOG_DIR=/java/apollo/adminservice-dev ###修改日志打印目录
SERVER_PORT=8090 ###端口
#### D:\java\apollo\dev\configservice\apollo-configservice-1.6.0-SNAPSHOT-github\config\app.properties
appId=100003172
#### D:\java\apollo\dev\configservice\apollo-configservice-1.6.0-SNAPSHOT-github\config\application-github.properties
spring.datasource.url = jdbc:mysql://XXXXXX:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = xxxx
spring.datasource.password = xxxx
#### D:\java\apollo\dev\configservice\apollo-configservice-1.6.0-SNAPSHOT-github\scripts\startup.sh
LOG_DIR=/java/apollo/configservice-dev ###修改日志打印目录
SERVER_PORT=8080 ###端口
pro环境
#### D:\java\apollo\pro\adminservice\apollo-adminservice-1.6.0-SNAPSHOT-github\config\app.properties
appId=100003173
#### D:\java\apollo\pro\adminservice\apollo-adminservice-1.6.0-SNAPSHOT-github\config\application-github.properties
spring.datasource.url = jdbc:mysql://XXXXXX:3306/ApolloConfigproDB?characterEncoding=utf8
spring.datasource.username = xxxx
spring.datasource.password = xxxx
#### D:\java\apollo\pro\adminservice\apollo-adminservice-1.6.0-SNAPSHOT-github\scripts\startup.sh
LOG_DIR=/java/apollo/adminservice-pro ###修改日志打印目录
SERVER_PORT=8091 ###端口
#### D:\java\apollo\pro\configservice\apollo-configservice-1.6.0-SNAPSHOT-github\config\app.properties
appId=100003174
#### D:\java\apollo\pro\configservice\apollo-configservice-1.6.0-SNAPSHOT-github\config\application-github.properties
spring.datasource.url = jdbc:mysql://XXXXXX:3306/ApolloConfigproDB?characterEncoding=utf8
spring.datasource.username = xxxx
spring.datasource.password = xxxx
#### D:\java\apollo\pro\configservice\apollo-configservice-1.6.0-SNAPSHOT-github\scripts\startup.sh
LOG_DIR=/java/apollo/configservice-pro ###修改日志打印目录
SERVER_PORT=8082 ###端口
注意:数据库多了一个pro
portal配置:
#### D:\java\apollo\portal\apollo-portal-1.6.0-SNAPSHOT-github\config\app.properties
appId=100003173
#### D:\java\apollo\portal\apollo-portal-1.6.0-SNAPSHOT-github\config\apollo-env.properties
local.meta=http://localhost:8080
dev.meta=http://localhost:8080
fat.meta=http://someIp:8080
uat.meta=http://anotherIp:8080
lpt.meta=${lpt_meta}
pro.meta=http://localhost:8082
#### D:\java\apollo\portal\apollo-portal-1.6.0-SNAPSHOT-github\config\application-github.properties
spring.datasource.url = jdbc:mysql://XXXXXX:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = xxxx
spring.datasource.password = xxxx
#### D:\java\apollo\portal\apollo-portal-1.6.0-SNAPSHOT-github\scripts\startup.sh
LOG_DIR=/java/apollo/portalLog ###修改日志打印目录
SERVER_PORT=8070 ###端口
注意:因为连的阿里云数据库,所以数据库连接是xxx,具体以自己的为准。
startup.sh
#!/bin/bash
PATH=D:/java/apollo
echo "启动Dev开发环境apollo服务..."
D:/java/apollo/dev/adminservice/apollo-adminservice-1.6.0-SNAPSHOT-github/scripts/startup.sh
D:/java/apollo/dev/configservice/apollo-configservice-1.6.0-SNAPSHOT-github/scripts/startup.sh
echo "启动Pro生产环境apollo服务..."
D:/java/apollo/pro/adminservice/apollo-adminservice-1.6.0-SNAPSHOT-github/scripts/startup.sh
D:/java/apollo/pro/configservice/apollo-configservice-1.6.0-SNAPSHOT-github/scripts/startup.sh
echo "启动apollo的protal服务..."
D:/java/apollo/portal/apollo-portal-1.6.0-SNAPSHOT-github/scripts/startup.sh
stop.sh
#!/bin/bash
PATH=D:/java/apollo/
echo "启动Dev开发环境apollo服务..."
D:/java/apollo/dev/adminservice/apollo-adminservice-1.6.0-SNAPSHOT-github/scripts/shutdown.sh
D:/java/apollo/dev/configservice/apollo-configservice-1.6.0-SNAPSHOT-github/scripts/shutdown.sh
echo "启动Pro生产环境apollo服务..."
D:/java/apollo/pro/adminservice/apollo-adminservice-1.6.0-SNAPSHOT-github/scripts/shutdown.sh
D:/java/apollo/pro/configservice/apollo-configservice-1.6.0-SNAPSHOT-github/scripts/shutdown.sh
echo "启动apollo的protal服务..."
D:/java/apollo/portal/apollo-portal-1.6.0-SNAPSHOT-github/scripts/shutdown.sh
注意:这两个脚本无法运行,为了方便,我每次都是通过这里copy详细的路径,一个个启动的,希望有人能帮忙补充一下。把window启动shell脚本的方式补全,嘻嘻。
输入apollo.portal.envs,设置值为dev,pro,点击保存
记得重启哦,不然配置不生效。
点击某个项目进入,会有环境缺失的报错。
点击补缺环境,多了一个pro环境,其他几个类型,都是类似的操作。
集群没有办法补全,只能手动创建勒,创建一个shtest到pro环境
同步配置:
注意:公有关联也只能自己手动关联。
既然,说到多环境部署,博友们都好奇,多环境如何使用,以及怎么使用的,下来,我来说道说道。
com.ctrip.framework.apollo
apollo-client
1.1.1
server:
port: 1111
app:
id : apollo-test
apollo:
meta: http://127.0.0.1:8080,http://127.0.0.1:8082
bootstrap:
###启用apollo配置开关
enabled: true
# apollo 使用配置的命名空间,多个以逗号分隔
namespaces: application,springMQ,TEST3.commom
eureka:
client:
register-with-eureka: false
fetch-registry: false
注意:meta配置两个eurake的值,8080和8082. 8080是dev环境,8082是pro环境
package com.fqyd.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Description:
* Author: wude
* Date: 2019/11/26 11:34
* Modified By:
*/
@RestController
public class TestController {
@Value("${jdbc.username}")
private String jdbcUsername;
@Value("${FILE_NAME}")
private String helloUsername;
@Value("${server.zookeeper}")
private String zk;
@GetMapping("/hello")
public String helloApollo(){
return "hello "+jdbcUsername;
}
/**
* 测试namespacen调用
* @return
*/
@GetMapping("/testNamespace")
public String testNamespace(){
return "测试testNamespace读取:"+helloUsername;
}
/**
* 测试调用公有配置
* @return
*/
@GetMapping("/testPublic")
public String testPublic(){
return "testPublic读取:"+zk;
}
}
package com.fqyd;
import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@EnableApolloConfig //启用apollo配置
@SpringBootApplication
public class ApolloTestApplication {
public static void main(String[] args) {
SpringApplication.run(ApolloTestApplication.class, args);
}
}
idea开发
-Dapollo.meta=http://localhost:8082
dev配置
pro配置:
程序猿学社的GitHub,欢迎Star:
https://github.com/ITfqyd/cxyxs
觉得有用,可以点赞,关注,评论,留言四连发。