为了方便部署和维护微服务项目,还是得上集群部署方案,决定采用Docker的swarm,为什么不是k8s,因为部署骑来又是个新的工具,之前就一直用的docker,自带了类k8s的工具,索性就直接使用swarm了,但是用起来也是问题多多,以下是踩坑记录:
# 环境和变量(按自己情况确定
module_name="asdapp-front"
build_env="prod"
cname="${module_name}"
ctag="latest"
img_name=$cname:$ctag
repo_addr="192.168.0.16:5000"
# 服务首次部署
docker stack deploy -c docker-swarm.yml myxm
# 服务更新(强制使用镜像更新
docker service update --force --image $repo_addr/$img_name myxm_${module_name}
# nginx容器部署和代理后端接口
server {listen 21140;index index.html index.htm;location /prod-api/ {proxy_pass http://asdapp-backend:21141/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}location /profile/ {proxy_pass http://asdapp-backend:21141/profile/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}location / {alias /usr/share/nginx/html/;try_files $uri $uri/ /index.html;}
}
# nginx代理后端接口还需要定时更新dns解析,swarm下的后端服务更新后会是新的ip
resolver 127.0.0.11 valid=30s;
# 微服务容器首选网卡网段,解决swarm多网卡情况下nacos上注册的ip网段是ingress的问题
environment:"spring.cloud.inetutils.preferred-networks": "10.13.0,10.12.0"