OpenWrt反向代理gogs
约 1013 字大约 3 分钟
2025-06-22
前言
之前在 R2S 上安装了 SVN 作为代码仓库,虽然它装起来简单,但是它管理起来不太方便。还是觉得装个 Git 仓库合适,刚好Gogs就很不错,安装也简单。不过再继续用 ip 访问显得不优雅,索性也用 Caddy 反代服务。
1. 安装 Gogs
Gogs 的安装很简单,一开始下载二进制包,解压后在 OpenWrt 上运行不起来,于是选择通过 Docker 安装:
docker volume create --name gogs-data
docker run --name=gogs -p 9522:22 -p 9530:3000 -v gogs-data:/data -e RUN_CROND=true -e BACKUP_INTERVAL=1d -e BACKUP_RETENTION=7d gogs/gogs
至此,Gogs 就安装好了,这里启用了定时(RUN_CROND)系统备份,备份频率(BACKUP_INTERVAL)为每 1 天,保留备份数(BACKUP_RETENTION)为 7 天,即 7 天前的备份会自动删除,备份文件存放(BACKUP_ARG_CONFIG)在~/gogs/backup
目录下,我们稍后来配置它。
2. 修改 uhttpd 端口
OpenWrt 使用 uhttpd 运行 http 服务,默认端口为 80,但 Caddy 的端口也是 80,所以这里先将 uhttpd 端口改为 8080,稍后再用 Caddy 反代过来。
// 其他代码已省略...
config uhttpd 'main'
list listen_http '0.0.0.0:8080'
list listen_http '[::]:8080'
#list listen_https '0.0.0.0:443'
#list listen_https '[::]:443'
// 其他代码已省略...
重启 uhttpd 服务service uhttpd restart
,如果没效果就直接重启 OpenWrt 系统,之后通过http://192.168.0.1:8080
能访问通就没错了。
3. 安装 Caddy
Caddy 支持通过 Dcoker 安装,不过 OpenWrt 支持运行 Caddy 的二进制包。通过 Caddy 的下载服务器选择Linux arm64
版本,因为我的 R2S CPU 架构是 aarch64,所以选择这个版本。
# 先创建目录(因为压缩包内没有目录,解压出来就平铺当前目录了)
mkdir caddy
tar -zxf caddy_2.10.0_linux_arm64.tar.gz -C caddy
# 复制过去就行了,默认有执行权限
cp caddy/caddy /usr/bin/
编写配置模板Caddyfile
(名称随意):
mc.lan {
tls internal
reverse_proxy 127.0.0.1:8080
}
gogs.mc.lan {
tls internal
reverse_proxy 127.0.0.1:9530
}
这里将mc.lan
域名反代到了127.0.0.1:8080
(OpenWrt),gogs.mc.lan
反代到了127.0.0.1:9530
(Gogs)。然后执行:
# 格式化配置文件
./usr/bin/caddy fmt --overwrite ~/Caddyfile
# 转换为 json 文件
./usr/bin/caddy adapt --config ~/Caddyfile > /etc/config/caddy
编写启动配置/etc/init.d/caddy
:
#!/bin/sh /etc/rc.common
START=99
USE_PROCD=1
LOGFILE="/var/log/caddy.log"
start_service() {
procd_open_instance
procd_set_param command /usr/bin/caddy run --config /etc/config/caddy
procd_set_param stdout "$LOGFILE"
procd_set_param stderr "$LOGFILE"
procd_set_param respawn
procd_close_instance
}
运行开机启动service caddy enable
,启动服务service caddy start
。至此,Caddy 就安装好了。
4. 配置 Gogs
访问https://gogs.mc.lan
,首次访问时 Caddy 会自动生成服务器证书,此时浏览器会提示不安全忽略即可。接着浏览器会自动重定向到 Gogs 的配置页面,参考Gogs安装的Settgins
一节做如下配置(只说需要改动的项,其他保持默认):
配置项 | 值 |
---|---|
数据库 | SQLite3 |
域名 | gogs.mc.lan |
SSH端口 | 9522 |
应用URL | https://gogs.mc.lan |
然后安装即可,第一个注册的用户自动成为管理员。
所有的配置可以在 Docker Vomule 下查看,由于我将/opt/docker
挂载为了 Docker 根目录,因此 Gogs 的配置文件在/opt/docker/volumes/gogs-data/_data/gogs/conf/app.ini
。可配置项参考app.ini。
5. 导出根证书
Caddy 自动生成的证书在/.local/share/caddy/pki/authorities/local/
目录下,也可以通过命令find / -type f -name "root.crt"
来查找。接着将root.crt
复制出来导入到其他设备中信任即可,可参考远程开发实践 - Caddy一节。之后再访问域名就没有不安全的提示了。
6. 配置 SSH 密钥
访问https://gogs.mc.lan/user/settings/ssh
,在SSH密钥
一栏中增加下面生成的公钥:
# 生成密钥并保存在一个特定的位置,如:~/.ssh/Gogs/mayee/id_ed25519
ssh-keygen -t ed25519 -C "devos"
# 将公钥配置在 gogs 中
cat ~/.ssh/Gogs/mayee/id_ed25519.pub
之后在~/.ssh/config
中增加如下内容:
# Gogs
Host gogs.mc.lan
User git
IdentityFile ~/.ssh/Gogs/mayee/id_ed25519
Port 9522
检查配置ssh -T git@gogs.mc.lan
看到 Hi there, You've successfully authenticated, but Gogs does not provide shell access. 即表示配置成功。
版权所有
版权归属:Mayee