-
Notifications
You must be signed in to change notification settings - Fork 46
部署服务端
由于配置中心本身就是用来管理各个环境中的配置,所以大部分公司只需部署两套,一是线下环境配置中心(管理所有开发、测试等环境的配置);二是线上环境配置中心(管理生产的配置)。
部署架构图:
服务端支持两种部署方式:
- 使用java命令部署
- 使用Docker镜像部署
服务端使用SpringBoot开发而成,因此不需要部署tomcat,直接使用java -jar命令启动jar包。 按照以下步骤操作:
- 下载最新版服务端jar包(configcenter-1.7.3.jar)
- 安装Java8或使用已有的Java8
- 安装数据库,可选择使用MySQL或者PostgreSQL作为服务端的数据库。
- MySQL操作方法:安装MySQL或使用已有的MySQL,创建数据库configcenter_online,并使用最新版初始化sql脚本(configcenter-1.7.3-MySQL-ddl.sql)进行初始化。
- PostgreSQL操作方法:安装PostgreSQL或使用已有的PostgreSQL,创建数据库configcenter_online,并使用最新版初始化sql脚本(configcenter-1.7.3-PostgreSQL-ddl.sql)进行初始化。
- 安装Redis或使用已有的Redis
- 在服务器中创建目录/var/apps/,并保证服务端对它拥有读写权限。
- 启动服务端
启动命令模版:
nohup java -Xms1024m -Xmx1024m -Dspring.profiles.active=online -Dconfigcenter.config.fetch-need-manager=false -Dspring.datasource.url=数据库url -Dspring.datasource.username=数据库用户名 -Dspring.datasource.password=数据库密码 -Dspring.redis.host=redis地址 -Dspring.redis.port=redis端口 -Dspring.redis.password=redis密码 -jar configcenter-1.7.3.jar &注意: 1、如果希望客户端获取配置时进行验权,则设置-Dconfigcenter.config.fetch-need-manager=true(为防止生产环境配置泄露风险,生产环境这个参数最好设置为true); 2、如果redis未设置密码,则不要加-Dspring.redis.password=redis密码,加了反而会报错; 3、可根据具体情况设置虚拟机内存,比如设置1GB"-Xms1024m -Xmx1024m";
如果启动出现command not found报错,可能是你的终端无法识别数据库url里面包含的特殊字符,只需将数据库url放到英文双引号里再重试就可以了
如果启动日志出现连接redis报错,则可能是redis在保护模式下不允许其他ip地址的机器访问,须对redis进行配置,参考。
比如我本地启动命令:
nohup java -Xms1024m -Xmx1024m -Dspring.profiles.active=online -Dconfigcenter.config.fetch-need-manager=false -Dspring.datasource.url="jdbc:mysql://127.0.0.1:3306/configcenter_online?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8" -Dspring.datasource.username=root -Dspring.datasource.password=12345678 -Dspring.redis.host=127.0.0.1 -Dspring.redis.port=6379 -Dspring.redis.password=123 -jar configcenter-1.7.3.jar &注意:数据库url中需加上serverTimezone=GMT%2B8,它表示使用中国北京时区,不加的话最终存储到数据库中的时间可能不正确。以上是最简版的启动命令脚本,真正部署时可自行进行丰富,比如指定gc文件参数等等。
- 查看启动日志:tail -100f /var/apps/configcenter/logs/configcenter.log
- 访问服务端:http://{IP}:6220
- 配置Nginx安全策略:如果通过-Dconfigcenter.config.fetch-need-manager=true 参数开启了客户端验权,则可以不用配置此策略(最好还是配上,网络隔离才是最安全的),否则生产环境必须配置此策略。当外网(包括配置管理员)尝试通过http请求访问服务端/config/*下的路径时,nginx应该进行拦截;而客户端通过内网访问/config/*下的路径时,nginx应该允许访问。因为/config/*下的路径是专门给客户端使用的,没有开启客户端验权的话是不会进行权限校验的,所以不能开放给外网使用。具体实现方式可以通过创建分别给内网和外网使用的两个域名,然后限制外网域名不能访问/config/*下的路径。
Docker用户可以便捷的使用镜像进行启动。 按照以下步骤操作:
- 安装Docker或使用已有的Docker
- 安装数据库,可选择使用MySQL或者PostgreSQL作为服务端的数据库。
- MySQL操作方法:安装MySQL或使用已有的MySQL,创建数据库configcenter_online,并使用最新版初始化sql脚本(configcenter-1.7.3-MySQL-ddl.sql)进行初始化。
- PostgreSQL操作方法:安装PostgreSQL或使用已有的PostgreSQL,创建数据库configcenter_online,并使用最新版初始化sql脚本(configcenter-1.7.3-PostgreSQL-ddl.sql)进行初始化。
- 安装Redis或使用已有的Redis
- 启动服务端
启动命令模版:
docker volume create configcenter
docker run --detach --rm -p 6220:6220 --mount source=configcenter,target=/var/apps --env JAVA_OPTS="-Xms1024m -Xmx1024m -Duser.timezone=GMT+08 -Dspring.profiles.active=online -Dconfigcenter.config.fetch-need-manager=false -Dspring.datasource.url=数据库url -Dspring.datasource.username=数据库用户名 -Dspring.datasource.password=数据库密码 -Dspring.redis.host=redis地址 -Dspring.redis.port=redis端口 -Dspring.redis.password=redis密码" zhongxunking/configcenter:1.7.3注意: 1、如果希望客户端获取配置时进行验权,则设置-Dconfigcenter.config.fetch-need-manager=true(为防止生产环境配置泄露风险,生产环境这个参数最好设置为true); 2、如果redis未设置密码,则不要加-Dspring.redis.password=redis密码,加了反而会报错; 3、可根据具体情况设置虚拟机内存,比如设置1GB"-Xms1024m -Xmx1024m";
如果启动日志出现连接redis报错,则可能是redis在保护模式下不允许其他ip地址的机器访问,须对redis进行配置,参考。
比如我本地启动命令:
docker volume create configcenter
docker run --detach --rm -p 6220:6220 --mount source=configcenter,target=/var/apps --env JAVA_OPTS="-Xms1024m -Xmx1024m -Duser.timezone=GMT+08 -Dspring.profiles.active=online -Dconfigcenter.config.fetch-need-manager=false -Dspring.datasource.url=jdbc:mysql://192.168.0.1:3306/configcenter_online?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 -Dspring.datasource.username=root -Dspring.datasource.password=12345678 -Dspring.redis.host=192.168.0.1 -Dspring.redis.port=6379 -Dspring.redis.password=123" zhongxunking/configcenter:1.7.3注意:数据库url中需加上serverTimezone=GMT%2B8,它表示使用中国北京时区,不加的话最终存储到数据库中的时间可能不正确。 以上是最简版的启动命令脚本,真正部署时可自行进行丰富,比如指定gc文件参数等等。
- 查看启动日志:1、执行命令“docker container ls”查看容器id;2、执行命令“docker exec -it 容器id bash”进入容器;3、执行命令“tail -100f /var/apps/configcenter/logs/configcenter.log”
- 访问服务端:http://{IP}:6220
- 配置Nginx安全策略:如果通过-Dconfigcenter.config.fetch-need-manager=true 参数开启了客户端验权,则可以不用配置此策略(最好还是配上,网络隔离才是最安全的),否则生产环境必须配置此策略。当外网(包括配置管理员)尝试通过http请求访问服务端/config/*下的路径时,nginx应该进行拦截;而客户端通过内网访问/config/*下的路径时,nginx应该允许访问。因为/config/*下的路径是专门给客户端使用的,没有开启客户端验权的话是不会进行权限校验的,所以不能开放给外网使用。具体实现方式可以通过创建分别给内网和外网使用的两个域名,然后限制外网域名不能访问/config/*下的路径。