《springcloud学习》 十八 apollo多环境配置文件管理实现(开发+测试+验收+生产)

前言

社长,一个爱学习,爱分享的程序猿,始终相信,付出总会有回报的。知识改变命运,学习成就未来。爱拼才会赢!
程序猿学社的GitHub,已整理成相关技术专刊,欢迎Star:
https://github.com/ITfqyd/cxyxs

要求:有一定的apollo基础

环境:window作为搭建环境,linux类似

1.背景

             在项目开发中,我们常用的四个环境,开发(dev  实际上就是本地环境  使用人群开发),集成环境(sit 使用人群测试人员),仿真(uat  测试环境,接入真实的数据,进行模拟仿真,使用人群测试人员),生产(pro  用户真实使用的环境,也可称之为线上环境,使用人群真实的用户),这四者是我们开发必不可少的四个环境,实际上,像一些小的公司,会只有两个环境,就是开发环境+生产环境,这样很不好,没有对应的测试,就直接发生产,很容易造成一些大的事故,最主要的是,用户体验不好,开发一个软件产品,不管你的产品再怎么牛逼,用户体验不好,使用的人群也不会多。

             一般企业常见部署方案:Apollo-adminservice+apollo-configservice,这两个服务,分别在pro,sit,uat,dev各搭建一套,apollo-portal搭建一套就行。

2.预准备

2.1数据库准备

https://github.com/nobodyiam/apollo-build-scripts

导入configdb和protaldb这两个文件夹下面的脚本到mysql服务器。

多复制一个pro环境config配置,用来保存pro环境的config配置。 

默认是dev环境的apolloconfigdb的如下端口改为8080,pro改为8082

2.2 端口分配,及修改配置

在单节点已部署的前提上,把apolloconfigdb.sql复制一遍,把数据库名改一下。一个环境需要一个config对应的db,我这里两个环境,所以这里3个文件,protal不管多少个环境,只需要一个,这里为了模拟多环境效果,我们就搭建dev和pro两个环境。正常环境是多台机器,一台机器一个config+admin服务,这里我们通过本地来模拟。

服务名Dev环境Pro环境
apollo-configservice80808082
apollo-adminservice80908091
apollo-portal8070

    因我在一台机器上模拟的多环境部署,所以端口不能冲突,需要改一下pro数据库的配置

 

2.2.1  项目构建

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脚本的方式补全,嘻嘻。

2.2.2 页面设置

输入apollo.portal.envs,设置值为dev,pro,点击保存

记得重启哦,不然配置不生效。

点击某个项目进入,会有环境缺失的报错。

 

点击补缺环境,多了一个pro环境,其他几个类型,都是类似的操作。

 点击补缺命名空间

集群没有办法补全,只能手动创建勒,创建一个shtest到pro环境

同步配置:

注意:公有关联也只能自己手动关联。 

3.彩蛋有惊喜哦

                 既然,说到多环境部署,博友们都好奇,多环境如何使用,以及怎么使用的,下来,我来说道说道。

        3.1pom.xml

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

3.2 application.yml

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环境

3.3 controller类

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;
  }
}

3.4启动类

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);
    }

}

3.5 环境配置

idea开发

-Dapollo.meta=http://localhost:8082

dev配置

pro配置:

 

 

后记

程序猿学社的GitHub,欢迎Star:
https://github.com/ITfqyd/cxyxs
觉得有用,可以点赞,关注,评论,留言四连发。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值