使用 Caddy 容器和 Cgit 展示 Git 仓库

前置教程

使用 Caddy 和容器轻松搭建你的私有 Git 服务器 (Git Over HTTPS)

简介

经过之前的教程,我们已经有了一个可以访问的 Git 服务器,现在我们想要通过 Web 页面展示这个 Git 服务器中的仓库列表。

最终效果

实操步骤

1. 更新容器镜像

首先,我们需要在自定义的 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/caddy

2. 配置 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
   }
  }
 }
}

3. 配置 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-repos

4. 检查目录结构

完成以上配置后,你的项目目录结构应该如下所示:

/my-caddy-git-server
├── Caddyfile
├── compose.yml
├── cgitrc
├── custom-containerfile/
│   └── Containerfile
├── git-repos/
│   └── (Git 仓库将存放在这里)
└── caddy_data/
    └── (Caddy 的证书和状态将存放在这里)

5. 更新 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:/cgitrc

6. 启动并访问

一切就绪后,启动服务:

podman-compose up -d

启动成功后,访问 https://git.your-domain.com 即可看到 cgit 生成的 git 仓库列表页面。

0%