2025-09-16
Git
00
请注意,本文编写于 169 天前,最后修改于 169 天前,其中某些信息可能已经过时。

目录

总体思路
第一部分:准备离线安装包(在线机器上操作)
1. 下载 Gitea
2. 下载 act_runner
3. 下载 Docker 离线安装包(可选但强烈推荐)
4. 收集其他依赖
5. 打包所有文件
第二部分:在离线服务器上部署
1. 解压安装包并安装基础依赖
2. 安装 Docker
3. 安装和配置 Gitea
4. 安装和配置 act_runner
5. 验证
故障排除

总体思路

  1. 准备阶段(在一台有互联网连接的机器上)
    • 下载所有必需的软件包和依赖项。
    • 将它们传输到目标离线服务器。
  2. 部署阶段(在目标离线服务器上)
    • 安装基础依赖(如 Git)。
    • 安装 Gitea。
    • 安装和配置 act_runner(Gitea Actions 的 runner)。
    • 将两者连接起来。

第一部分:准备离线安装包(在线机器上操作)

1. 下载 Gitea

访问 Gitea 的官方下载页面:https://dl.gitea.com/gitea/

选择适合目标服务器架构的版本。最常见的是 Linux amd64。下载二进制文件。例如,选择版本 1.21.0

bash
# 创建一个目录来存放所有离线文件 mkdir gitea-offline cd gitea-offline # 下载 Gitea 二进制文件 wget -O gitea https://dl.gitea.com/gitea/1.21.0/gitea-1.21.0-linux-amd64 chmod +x gitea

注意:请将 1.21.0 替换为当时最新的稳定版本。

2. 下载 act_runner

act_runner 的发布版本在 Gitea 的官方仓库:https://dl.gitea.com/act_runner/

同样选择 Linux amd64 版本:

bash
# 下载 act_runner 二进制文件 wget -O act_runner https://dl.gitea.com/act_runner/act_runner-linux-amd64 chmod +x act_runner

3. 下载 Docker 离线安装包(可选但强烈推荐)

Gitea Actions 依赖于 act_runner,而 act_runner 需要 Docker 来运行工作流容器。 前往 Docker 官方文档获取离线安装包:https://docs.docker.com/engine/install/binaries/

或者直接下载静态二进制包(例如,从 https://download.docker.com/linux/static/stable/ 选择版本):

bash
# 示例:下载 Docker 20.10.24 for x86_64 wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.24.tgz

4. 收集其他依赖

  • Git:确保目标服务器上已经安装了 Git。如果无法通过内部源安装,也需要下载对应的 Git RPM/Deb 包。
  • 数据库:Gitea 支持 SQLite, PostgreSQL, MySQL。SQLite 最简单,无需额外安装。如果使用其他数据库,也需要准备对应的离线安装包。

5. 打包所有文件

将所有这些文件打包成一个压缩包,方便传输。

bash
# 回到上级目录 cd .. tar -czvf gitea-offline-pack.tar.gz gitea-offline/

gitea-offline-pack.tar.gz 文件通过U盘、内部网络或其他方式复制到目标离线服务器上。


第二部分:在离线服务器上部署

1. 解压安装包并安装基础依赖

bash
# 将安装包复制到服务器后,解压 tar -xzvf gitea-offline-pack.tar.gz cd gitea-offline # 安装 Git (如果尚未安装) # 对于 CentOS/RHEL/Fedora,你需要提前下载好rpm包并使用rpm命令安装 # sudo rpm -ivh git-*.rpm # 对于 Debian/Ubuntu,使用dpkg安装提前下载的deb包 # sudo dpkg -i git-*.deb

2. 安装 Docker

bash
# 解压 Docker 二进制包 tar -xzvf docker-20.10.24.tgz # 将二进制文件复制到系统的可执行路径 sudo cp docker/* /usr/bin/ # 创建 docker 用户组(如果不存在) sudo groupadd docker # 将当前用户添加到 docker 组(例如用户 ‘git’) sudo usermod -aG docker $USER # 或者指定用户 sudo usermod -aG docker git # 配置 Docker 守护进程(使用 systemd) # 首先,创建 systemd 服务文件 sudo tee /etc/systemd/system/docker.service > /dev/null <<'EOF' [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity TimeoutStartSec=0 Delegate=yes KillMode=process Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target EOF # 重新加载 systemd 配置 sudo systemctl daemon-reload # 启动 Docker 并设置开机自启 sudo systemctl enable docker --now # 验证 Docker 是否安装成功 docker --version

3. 安装和配置 Gitea

bash
# 创建一个系统用户来运行 Gitea(例如 ‘git’) sudo adduser \ --system \ --shell /bin/bash \ --comment 'Git Version Control' \ --home /home/git \ --group \ --disabled-password \ git # 创建必要的目录结构 sudo mkdir -p /var/lib/gitea/{custom,data,log} sudo chown -R git:git /var/lib/gitea sudo chmod -R 750 /var/lib/gitea # 将 gitea 二进制文件复制到全局可执行路径 sudo cp gitea /usr/local/bin sudo chown git:git /usr/local/bin/gitea sudo chmod +x /usr/local/bin/gitea # 为 Gitea 创建 systemd 服务 sudo tee /etc/systemd/system/gitea.service > /dev/null <<'EOF' [Unit] Description=Gitea (Git with a cup of tea) After=syslog.target After=network.target After=docker.service [Service] RestartSec=2s Type=simple User=git Group=git WorkingDirectory=/var/lib/gitea/ ExecStart=/usr/local/bin/gitea web --work-path /var/lib/gitea Restart=always Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea [Install] WantedBy=multi-user.target EOF # 重新加载 systemd 并启动 Gitea sudo systemctl daemon-reload sudo systemctl enable gitea --now # 检查 Gitea 状态,确保它正在运行 sudo systemctl status gitea

至此就可以通过浏览器访问服务器的 IP 地址和端口(默认 http://<server-ip>:3000)来完成 Gitea 的初始网页配置。 重要:在配置页面中,将 SSH 服务器域名Gitea 基本 URL 设置为离线环境中其他客户端可以访问的地址。

4. 安装和配置 act_runner

bash
# 将 act_runner 二进制文件复制到全局路径 sudo cp act_runner /usr/local/bin/ sudo chmod +x /usr/local/bin/act_runner # 为 act_runner 创建工作目录 sudo mkdir -p /var/lib/act_runner sudo chown -R git:git /var/lib/act_runner # 切换到 git 用户 sudo su - git # 在 Gitea 实例中创建 Runner Token # 1. 以管理员身份登录 Gitea Web 界面。 # 2. 进入 “站点管理” -> “Actions” -> “Runners”。 # 3. 点击 “创建新的 Runner”,选择 “Runner 类型”(例如:组织级)。 # 4. 复制生成的令牌(一个长长的字符串)。它看起来像 `MR6MZ6V4DQQBVCUVTGN6T3RRN4HS6`。 # 注册 runner (在离线服务器的命令行中运行) # 将 <your-gitea-url> 替换为你的内网 Gitea 地址,<your-runner-token> 替换为上一步复制的令牌 cd /var/lib/act_runner act_runner register --instance <your-gitea-url> --token <your-runner-token> --no-interactive # 注册过程中会询问一些配置,使用默认值即可(直接回车)。由于是离线环境,`--no-interactive` 参数有助于避免需要输入无法访问的默认值(如 docker.io)。 # 为 act_runner 创建 systemd 服务文件 (以 root 用户操作) exit # 退出 git 用户,回到 root sudo tee /etc/systemd/system/act_runner.service > /dev/null <<'EOF' [Unit] Description=Gitea Act Runner After=network.target docker.service gitea.service Requires=docker.service [Service] Type=simple User=git Group=git WorkingDirectory=/var/lib/act_runner ExecStart=/usr/local/bin/act_runner daemon Restart=always Environment=HOME=/home/git [Install] WantedBy=multi-user.target EOF # 重新加载 systemd 并启动 act_runner sudo systemctl daemon-reload sudo systemctl enable act_runner --now # 检查 act_runner 状态 sudo systemctl status act_runner

5. 验证

  1. 在 Gitea Web 界面:回到 “站点管理” -> “Actions” -> “Runners”。应该能看到一个新注册的 runner,状态应该是 “空闲”“在线”
  2. 创建一个测试仓库并启用 Actions:在仓库中创建一个简单的 .gitea/workflows/demo.yaml 工作流文件,推送代码后,应该能看到 Actions 被触发并且由你的离线 runner 执行。

故障排除

  • Runner 状态为“离线”:检查 act_runner 的日志 journalctl -u act_runner -f。常见问题是网络无法连接到 Gitea 服务器地址,或者令牌无效。
  • Docker 权限问题:确保 git 用户属于 docker 组,并重新登录该用户(或重启服务)以使组更改生效。
  • 工作流执行失败:检查 act_runner 日志。如果工作流需要基础镜像(如 node:20-alpine),需要在内网搭建一个私有 Docker 镜像仓库,并提前将所需镜像推送进去,或者在离线环境中手动 docker load 这些镜像。

本文作者:sea-whales

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!