Docker下Gogs设置Webhook推送Spug,踩坑记录与解决方案

记录在Docker部署下的Gogs,成功配置通过内网 Webhook 推送到 Spug 实现自动化部署。


一、背景

项目需求是:

  • 使用 Gogs 管理 Git 仓库;

  • 使用 Spug 进行持续部署;

  • 利用 Gogs 的 Webhook,在代码 push 后自动触发 Spug 接口部署。


二、环境说明

  • 系统:CentOS 7

  • Gogs 版本:0.14.0+dev

  • 运行方式:Docker

  • Gogs 映射端口:

    • 0.0.0.0:444 --> 3000/tcp(Gogs Web)

    • 0.0.0.0:445 --> 22/tcp(SSH)


三、遇到的问题及解决过程

1、端口冲突或权限不足(bind: permission denied)

Gogs 启动时报错:

bash 复制代码
[FATAL] Failed to start server: listen tcp 0.0.0.0:444: bind: permission denied

解决方法:

使用 Docker 启动时已经映射了 0.0.0.0:444 --> 3000,不需要再在容器中监听该端口。

  • 确保 Gogs 的 app.ini 中监听的是容器内部端口:
bash 复制代码
[server] HTTP_PORT = 3000 # 容器内监听3000,Docker映射为444
  • 重启容器后解决:
bash 复制代码
docker restart gogs

2、Webhook 提交失败,本地网络被禁止访问

使用 Webhook 向 Spug 发送部署请求:

http://xx.com/api/apis/deploy/3/branch/?name=master

Gogs 报错:

webhook 被解析到默认禁用的本地网络地址

问题原因:

Gogs 为了安全,默认禁止 Webhook 请求内网地址(如 192.168.**.local 等),以防 SSRF。

解决方法:

配置白名单 LOCAL_NETWORK_ALLOWLIST,编辑容器内配置文件 /data/gogs/conf/app.ini

bash 复制代码
# 替换为你实际运行 Spug 服务的 IP 或域名
# 192.168.20.111 是我部署 Spug 的服务器内网 IP;
[security] LOCAL_NETWORK_ALLOWLIST = 192.168.20.111

注意:配置后必须重启容器才能生效。

bash 复制代码
docker restart gogs

四、总结

这个过程踩了不少坑,关键点如下:

问题 解决方案
bind: permission denied 改回容器内监听3000端口,使用 Docker 映射
Webhook 不能访问内网地址 配置 [security] LOCAL_NETWORK_ALLOWLIST
相关推荐
Brandon汐3 分钟前
从0开始搭建一主两节点k8s集群对接Ceph集群
ceph·容器·kubernetes
Crazy CodeCrafter13 分钟前
房租年年涨,客流年年少,服装店还要开吗?
大数据·运维·微信·自动化·开源软件
淼淼爱喝水17 分钟前
Ansible 配置与环境搭建超全教程(自动化运维基础)
运维·自动化·ansible
杨浦老苏36 分钟前
音乐和有声读物播放器AudioDock
docker·群晖·多媒体·音乐·有声读物
yj_xqj44 分钟前
HAproxy负载均衡集群部署
运维·负载均衡
路由侠内网穿透1 小时前
本地部署开源工作空间工具 AFFiNE 并实现外部访问
运维·服务器·数据库·物联网·开源
zzzsde1 小时前
【Linux】Ext文件系统(1)
linux·运维·服务器
爱学习的小囧1 小时前
ESXi 8.0 无法选择分区方式 小白级详细解决办法
运维·服务器·网络·虚拟化·esxi8.0
F1FJJ1 小时前
什么是 Shield CLI?视频讲解:一条命令,可浏览器远程访问一切内部服务(RDP/VNC/SSH/数据库等)
运维·网络·数据库·网络协议·ssh