RHEL 系列系统用 Podman 部署 Gitea 并搭建本地 Git 镜像

适用系统:RHEL / CentOS / 麒麟 / Rocky / AlmaLinux 等一切 RPM 系发行版
目标:在一台内网服务器上,用 Podman 以非特权方式跑起 Gitea,并将其作为离线/隔离环境下的 Git 代码镜像与版本仓库,实现仓库数据的可迁移、可搬运。


一、为什么这样搭

  • Podman 而非 Docker:RPM 系系统可免 root(允许 rootless 容器),命令与 Docker 兼容,systemd 原生托管容器。
  • Gitea 单容器极轻:一个 gitea/gitea 镜像即可包含 Web、Git 协议与数据库(默认 SQLite),适合中小团队。
  • 离线 Git 镜像:把 Gitea 当作内网代码仓储中心,通过 Podman 数据卷的 export/import 实现仓库在离线环境间的整体搬运,同时支持自行架设代理去公共源拉取项目做镜像。

二、前期准备:让 Podman 走代理拉取镜像(可选)

离线环境通常没有官方镜像,需要让 podman pull 走代理。务必改成用户级配置,不要写在 /etc/profile.d/ 里导出 HTTP_PROXY 环境变量——那会污染整个系统的环境变量,影响 Podman 之外的所有进程。

只需在用户主目录的 ~/.config/containers/ 下写一份 containers.conf,代理仅在容器Podman引擎层生效,全局用户环境不受影响:

mkdir -p ~/.config/containers/
cat << EOF >> ~/.config/containers/containers.conf
[engine]
env = [
   "HTTP_PROXY=http://127.0.0.1:1080",
   "HTTPS_PROXY=http://127.0.0.1:1080",
   "NO_PROXY=localhost,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"
]

[containers]
http_proxy = false
EOF

说明:

  • 内网段(10/8、172.16/12、192.168/16)和 localhost 走直连,避免近处流量也绕代理。
  • http_proxy = false 阻止 Podman 自动把宿主机代理转发进容器,代理只用于引擎层拉镜像。

三、核心:用 Podman 部署 Gitea

最简单的单容器部署(SQLite 版,开箱即用):

podman run -d 
  --name git 
  -v gitea:/data 
  -p 3000:3000 
  --restart=always 
  gitea/gitea

参数说明:

  • -v gitea:/data:把数据挂到命名卷 gitea,所有仓库、数据库、配置都在这,方便备份与迁移。
  • -p 3000:3000:宿主机 3000 端口映射容器 3000,浏览器访问 http://<服务器IP>:3000 即进入 Gitea。
  • --restart=always:容器异常退出自动重启。

四、关键:让 Gitea 能去拉公网仓库(离线镜像的关键前置)

Gitea 若要镜像 GitHub/Gitee 等外部仓库,需要让容器内也能走代理。用 podman update 为运行中的容器动态设置代理:

podman update --env "HTTPS_PROXY=http://192.168.100.100:1081" git
podman update --env "HTTP_PROXY=http://192.168.100.100:1081" git
podman update --env "NO_PROXY=localhost,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16" git

需要撤销时:

podman update --unsetenv HTTPS_PROXY git
podman update --unsetenv HTTP_PROXY git

查看当前代理环境变量:

podman inspect git --format {{.Config.Env}}

六、离线 Git 镜像:数据卷导出/导入,整体搬运仓库

这是”离线部署”的核心:内网(无外网)机器 A 上建好仓库存量后,通过数据卷一键打包成 tar,拷贝到离线机器 B 上导入,即可在新环境零配置还原完整仓库数据。

6.1 在源机器导出

# 查看某个容器的数据卷
podman inspect git --format {{.Mounts}}

# 把数据卷导出为 tar 包
podman volume export -o git.tar gitea

说明:gitea 是卷名(见部署时 -v gitea:/data),导出的 git.tar 即整个 /data 的内容,包含所有 git 仓库、配置与数据库。

5.2 在目标离线机器导入

# 先建同名卷
podman volume create gitea

# 导入 tar 到该卷
podman volume import gitea git.tar

随后按”核心部署”命令重新 podman run 一个同名 git 容器挂载该卷即可,仓库数据完全还原——这就完成了离线环境间的 Git 镜像搬运。


七、开机自启:容器随宿主机启动

  • 对普通用户(rootless),开启常驻让容器在用户未登录时也能跑:
loginctl enable-linger <用户名>

# 用户级自启
systemctl --user enable podman-restart
  • 对全局/root 部署,直接用系统级服务:
sudo systemctl enable podman-restart

配合部署时的 --restart=always,即可实现容器崩溃自拉起、开机自启。


八、完整落地清单速览

环节一句话要点
安装 PodmanRPM 系自带/仓库安装,命令兼容 Docker
拉镜像本地有镜像直接用;无则配代理 pull gitea/gitea
起容器podman run -v gitea:/data -p 3000:3000 gitea/gitea
自定义网络podman network create spring 隔离 + 跨容器互访
外部仓库镜像podman update --env "HTTP(S)_PROXY=..." git
离线搬运podman volume export → 拷贝 → volume import
自启动enable-linger + systemctl --user enable podman-restart

收尾检查:

podman ps                                   # 确认 git 容器 Running
podman inspect git --format {{.Mounts}}     # 确认数据卷挂载正常
curl http://<服务器IP>:3000                  # 访问 Gitea Web 界面

八、常见坑

  1. 端口被占用:改 -p 左宿主机端口(如 3001:3000)。
  2. 拉镜像慢/失败:先配好 6 去二里的代理,注意 NO_PROXY 别漏内网段。
  3. 卷导入后数据不出现:确认卷名与部署时 -v 指定的卷名一致(gitea)。
  4. 掉电后卷丢失:数据卷是持久化的,但建议定期 podman volume export 备份到异机。
  5. 权限问题:rootless 确保持卷目录归属与运行时 UID 兼容。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理。