Skip to content

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
应用URLhttps://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中增加如下内容:

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. 即表示配置成功。