go-zero微服务docker-compose部署完整版
一.前置条件
1. 安装go
2. git拉取代码
1. 创建文件夹go-weixin-obj
bin, pkg, src
2. 在src中执行
git clone xxx
3. 环境变量
export GOPATH='/xxx/go-weixin-obj/'
export CGO_ENABLED='0'
二.开始部署
1.docker-compose.yml
version: "3.0"
services:
userrpc:
hostname: userrpc
container_name: userrpc
image: go-user-rpc:v1
volumes:
- /usr/share/zoneinfo/Asia/Shanghai:/usr/share/zoneinfo/Asia/Shanghai
networks:
- mynet
userapi:
hostname: userapi
container_name: userapi
image: go-user-api:v1
volumes:
- /usr/share/zoneinfo/Asia/Shanghai:/usr/share/zoneinfo/Asia/Shanghai
depends_on:
- userrpc
networks:
- mynet
musicrpc:
hostname: musicrpc
container_name: musicrpc
image: go-music-rpc:v1
volumes:
- /usr/share/zoneinfo/Asia/Shanghai:/usr/share/zoneinfo/Asia/Shanghai
depends_on:
- userrpc
networks:
- mynet
musicapi:
hostname: musicapi
container_name: musicapi
image: go-music-api:v1
volumes:
- /usr/share/zoneinfo/Asia/Shanghai:/usr/share/zoneinfo/Asia/Shanghai
depends_on:
- musicrpc
networks:
- mynet
diaryrpc:
hostname: diaryrpc
container_name: diaryrpc
image: go-diary-rpc:v1
volumes:
- /usr/share/zoneinfo/Asia/Shanghai:/usr/share/zoneinfo/Asia/Shanghai
depends_on:
- userrpc
networks:
- mynet
diaryapi:
hostname: diaryapi
container_name: diaryapi
image: go-diary-api:v1
volumes:
- /usr/share/zoneinfo/Asia/Shanghai:/usr/share/zoneinfo/Asia/Shanghai
depends_on:
- diaryrpc
networks:
- mynet
wxnginx:
container_name: wxnginx
image: nginx:latest
ports:
- "443:443"
- "80:80"
volumes:
- ./nginx-conf/default.conf:/etc/nginx/conf.d/default.conf
- ./nginx-conf/ssl_key/:/ssl_key/
depends_on:
- diaryapi
networks:
- mynet
networks:
mynet:
driver: bridge
二.nginx/default.conf
server {
listen 443 ssl;
#listen [::]:443;
server_name weixin.chfwork.cloud;
ssl_certificate /ssl_key/weixin.chfwork.cloud_bundle.pem;
ssl_certificate_key /ssl_key/weixin.chfwork.cloud.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location ^~/user {
proxy_pass http://userapi:8887;
}
location ^~/music {
proxy_pass http://musicapi:8889;
}
location ^~/diary {
proxy_pass http://diaryapi:8890;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
server {
listen 80;
server_name weixin.chfwork.cloud;
rewrite ^(.*)$ https://weixin.chfwork.cloud permanent;
root /usr/share/nginx/html;
index index.html index.htm;
}
三.打包user-rpc-go二进制
go-weixin/app/usercenter/userrpc
go build -o UserRpcServer
四.再打包成docker 镜像
docker build -t go-user-rpc:v1 .
五.习惯api服务里的etc/xxx文件
UserRpc:
Endpoints:
- userrpc:8083
NonBlock: true
六.default.conf里的代理服务名(对应docker-compose.yml里的名字)
location ^~/user {
proxy_pass http://userapi:8887;
}
location ^~/music {
proxy_pass http://musicapi:8889;
}
location ^~/diary {
proxy_pass http://diaryapi:8890;
}[演示git项目地址](https://gitee.com/chen-haifeng1/go-weixin "演示git项目地址")
七. 运行docker-compose.yml
原理
- 通过docker-compose.yml里配置的network连接各个服务, 并给各个服务起名字
- go服务里etc/xxx.yaml修改成的docker对应里服务的名字
- nginx里default.conf修改成里的docker里对应服务名字
- go编译时配置环境变量 再通过dockerfile打包镜像