使用 Caddy 容器和 Cgit 展示 Git 仓库
目录
前置教程
用 Caddy 和容器搭建 Git over HTTPS 服务器
简介
经过之前的教程,我们已经有了一个可以访问的 Git 服务器,现在我们想要通过 Web 页面展示这个 Git 服务器中的仓库列表。

实操步骤
I. 更新容器镜像
首先,我们需要在自定义的 Caddy 镜像中添加 cgit 和相关依赖。
重新编辑 custom-containerfile/Containerfile:
FROM docker.io/library/caddy:2-builder AS builder
RUN xcaddy build \
--with github.com/aksdb/caddy-cgi/v2
FROM docker.io/library/caddy:latest
RUN apk update && apk add --no-cache git git-daemon cgit python3 py3-pygments py3-markdown py3-docutils groff
COPY --from=builder /usr/bin/caddy /usr/bin/caddyII. 配置 Caddyfile
接下来,修改 Caddyfile 以处理 Git 的 HTTP 协议,并配置 cgit 的 CGI 服务。
git.your-domain.com {
@git {
header User-Agent git/*
}
route {
# 启用基础认证保护整个服务
basic_auth {
# 使用 `caddy hash-password` 命令生成你的密码哈希
# 将 "your_username" 替换为你的用户名
# 将 "$2a$14$..." 替换为生成的哈希密码
your_username $2a$14$ABC...
}
handle /cgit.* {
root * /usr/share/webapps/cgit
file_server
}
handle /favicon.ico {
root * /usr/share/webapps/cgit
file_server
}
handle @git {
cgi * /usr/libexec/git-core/git-http-backend {
env GIT_PROJECT_ROOT=/git-repos GIT_HTTP_EXPORT_ALL=1
}
}
handle {
cgi * /usr/share/webapps/cgit/cgit.cgi {
env CGIT_CONFIG=/cgitrc
}
}
}
}III. 配置 cgit
创建一个 cgitrc 文件来配置 cgit 的外观和行为。这个文件定义了仓库的根目录、页面标题、Logo、CSS 样式等。
# https://man.archlinux.org/man/cgitrc.5
root-title=Your Git Repositories
root-desc=A collection of personal and experimental projects
css=/cgit.css
logo=/cgit.png
favicon=/favicon.ico
enable-index-owner=1
enable-http-clone=1
enable-index-links=1
enable-blame=1
enable-commit-graph=1
enable-log-filecount=1
enable-log-linecount=1
branch-sort=age
max-stats=quarter
snapshots=tar.gz zip
readme=:README.md
source-filter=/usr/lib/cgit/filters/syntax-highlighting.py
about-filter=/usr/lib/cgit/filters/about-formatting.sh
# scan-path 必须在文件的最后,不然前面设置的参数都会无效
scan-path=/git-reposIV. 检查目录结构
完成以上配置后,你的项目目录结构应该如下所示:
/my-caddy-git-server
├── Caddyfile
├── compose.yml
├── cgitrc
├── custom-containerfile/
│ └── Containerfile
├── git-repos/
│ └── (Git 仓库将存放在这里)
└── caddy_data/
└── (Caddy 的证书和状态将存放在这里)V. 更新 Compose 文件
为了让 cgit 能够读取到配置,我们需要修改 compose.yml 文件,将 cgitrc 文件挂载到容器中。
name: git-server
services:
git-server:
# 指定使用我们自定义的 Containerfile 进行构建
build: ./custom-containerfile
restart: unless-stopped
ports:
# 映射 HTTPS 和 HTTP 端口
- "443:443"
- "80:80"
volumes:
# 挂载 Caddyfile
- ./Caddyfile:/etc/caddy/Caddyfile
# 挂载存放 Git 仓库的目录
- ./git-repos:/git-repos
# 挂载 Caddy 数据卷,用于持久化 TLS 证书
- ./caddy_data:/data
# 挂载 cgitrc
- ./cgitrc:/cgitrcVI. 启动并访问
一切就绪后,启动服务:
podman-compose up -d启动成功后,访问 https://git.your-domain.com 即可看到 cgit 生成的 git 仓库列表页面。