1. 规划
2. 步骤记录
配置nginx
在http{} 配置域内,通过include,引用各个系统自己的config文件
docker build -t registry-vpc.cn-xxxx.aliyuncs.com/registry-nameXXXX/duobang-nginx:0.2.2 .
docker push registry-vpc.cn-xxxx.aliyuncs.com/registry-nameXXXX/duobang-nginx:0.2.2
注意这里使用内网进行build与push,速度快了很多
配置各个系统的docker-compose.yml
需要将nginx与redis的网络在外侧创建出来:
docker network create -d overlay ingress-network
docker network create -d overlay redis-network
运行nginx与1个系统
-
运行系统:
docker stack deploy --with-registry-auth -c docker-compose.yml xxxStackName
因为多个节点,所以使用--with-registry-auth,否则其他节点不能下载镜像;
-
通过命令查看状态:
docker stack ls
docker stack ps xxxServiceName
-
通过日志查看具体情况:
docker service logs -f --tail 500 xxxServiceName
-
访问路由确保能经过nginx,并且服务能正常访问:
这个过程反复的看nginx日志,并修改nginx.config以及docker-compose.yml才可。
这里注意一下两种nginx的反馈:
- xxx拒绝了我们的连接请求:
nginx的问题,确认nginx.config配置
- 接口请求 502 Bad Gateway
服务的问题,确认服务的docker-compose.yml
运行其他系统
3. 踩坑记录
-
nginx运行不起来
access_log的位置以及配置不对
access_log main; main不对
listen listen 443 ssl
-
sight-server运行不起来
数据库的密码重置没改docker-compose.yml
数据库的密码重置没改sight-server中的配置文件,druid重新生成
-
服务启动正常,但没法访问前端
修正nginx.conf,发现需要将sight.conf中upstream的配置放到nginx.conf中,与http同等级
-
nginx不转发请求到前端
网络配置问题
-
挤掉了worker节点上的80端口
overlay网络负载均衡的特点,导致worker节点上出现问题
-
可以访问前端了,但访问不了后端
认证对比了nginx的配置,配置没问题
怀疑是后端的问题,从log中,发现了tomcat对host有_
的情况,不解析。本身用stack自动生成的service名字会带有"_",且也可以做DNS转发,只不过转发后tomcat由于标准升级缘故不解析。
搜索一顿之后,发现在docker-compose.yml中可以通过hostname属性为service指定hostname,然后在nginx.conf中通过hostname去做解析,而不通过service name
-
pms部署后,访问前端失败,后端服务接口可以访问
问题是前端nginx报502,尚未确定原因,韩锐重新发布前端之后,可以正常访问,怀疑是版本问题
-
pms中用户有权限,却报鉴权失败
从日志中发现,是docker-compose配置时,访问account的url出现笔误,导致鉴权失败
-
发现日事日毕中缺少数据
数据库移植日期是11-04,重新移植了数据库
4. 其他
-
配置了docker自启动systemctl enable docker
-
docker images | awk '{print $3}' | xargs docker rmi --force
-
docker ps -a | awk '{print $1}' | xargs docker rm
-
修改mysql的密码
SET PASSWORD FOR 'root'@'%' = PASSWORD('Password2');
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('Password2');
flush privileges;