【Docker】Compose 安装 gogs 并设置 nginx 反向代理
编辑
168
2022-11-01
前言
步骤
Gogs
gogs.yaml
version: "3.5"
services:
gogs:
image: gogs/gogs
container_name: gogs
restart: always
environment:
- TZ=Asia/Shanghai
networks:
- nginx
- mysql
ports:
- "10022:22"
- "10880:3000"
volumes:
- /home/gogs:/data
networks:
nginx:
external: true
mysql:
external: true
这里我打算用 mysql 作为数据库,网络部分要通过 nginx 实现反向代理(用了 nginx 的话 ports 其实是可以不写的,但是为了能通过
docker ps -a
一眼查看各个容器是干啥的,容器内部哪个端口提供服务,我一般选择把容器的服务端口映射到宿主机,但是宿主机的端口不对外开发)gogs 的目录结构
/home/gogs |-- git | |-- gogs-repositories |-- ssh | |-- # ssh public/private keys for Gogs |-- gogs |-- conf |-- data |-- log
但是不要尝试手动去构建这个目录,只构建到
/home/gogs
,手动构建整个目录树安装 gogs 的时候会导致权限错误
Nginx
nginx.yaml
version: "3.5"
services:
nginx:
image: nginx
container_name: nginx
ports:
- "443:443"
- "80:80"
- "22:22"
restart: always
volumes:
- /home/nginx/ssl:/etc/nginx/ssl
- /home/nginx/conf:/etc/nginx/conf.d
- /home/nginx/nginx_header.conf:/etc/nginx/nginx.conf
environment:
- TZ=Asia/Shanghai
networks:
- nginx
networks:
nginx:
name: nginx
nginx_header.conf
stream {
server{
listen 22;
proxy_pass gogs:22;
}
}
nginx.conf
# gogs
server {
listen 80;
server_name git.xxxx.com;
rewrite ^(.*) https://git.xxxx.com$1 permanent;
}
server {
listen 443 ssl;
server_name git.xxxx.com;
ssl_certificate /etc/nginx/ssl/xxxx.xxx.com.pem;
ssl_certificate_key /etc/nginx/ssl/xxxx.xxxx.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://gogs:3000;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
这里需要注意的是
22 端口的转发,在 nginx 的配置中,是在「stream」中,跟「http」是平级的
我的 nginx 是运行在 docker 中的,gogs 的 默认 ssh 端口是 22,nginx 也是要监听 22 端口的,然后将 22 端口的流量转发到 gogs 容器内的 22 端口,如果宿主机的 ssh 端口也是 22 端口, nginx 是运行不起来的。有两种解决方案
修改 ssh 的 默认端口
# 配置文件路径 /etc/ssh/sshd_config # 找到 22 端口的部分,如果被注释了,就解开注释,在下面新建一行 Port 22 Port 22870 # 重启服务 systemctl restart sshd # 使用 22870 端口登录,(不要忘记将 22870 从主机安全组里面放出来)注释掉 22 的部分 Port 22870 # 然后再次重启服务 systemctl restart sshd
修改 gogs 的默认 ssh 端口,这个修改要去 gogs 的配置文件中修改,在安装面板界面 修改是没用的,具体步骤见:app.ini
补充
Permission denied, please try agiain.
如果通过 ssh 拉/推/克隆 一直提示这个错误,说明你的 22 端口没有成功映射,要么是 nginx 代理规则没写对,要么是 22 端口没开放。
- 0
- 0
-
赞助
微信 -
分享