从二进制文件安装 Forgejo

安装 Forgejo 和 Git,创建 git 用户 [1]

说明

本指南以 git.example.com 和 x.y.z 为示例。请根据实际情况替换为你的域名和所用的 Forgejo 版本。

首先按照 Forgejo 下载页面的说明,下载适合 CPU 架构的 Forgejo 二进制文件,并验证 GPG 签名。 [2]

接着将下载的 Forgejo 二进制文件复制到 /usr/local/bin/,重命名为 forgejo,并赋予可执行权限:

sudo cp forgejo-x.y.z-linux-amd64 /usr/local/bin/forgejo
sudo chmod 755 /usr/local/bin/forgejo

确保系统已安装 git 和 git-lfs。在 Debian GNU/Linux 上可以使用:

sudo apt install git git-lfs

在系统中创建 git 用户。Forgejo 将以该用户身份运行。默认通过 SSH 访问 git 时,该用户也是 URL 的一部分。例如 git clone git@git.example.com:YourOrg/YourRepo.git 中,@ 前面的 git 就是现在要创建的用户。在 Debian、Ubuntu 及其衍生发行版上,执行:

sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' \
  --group --disabled-password --home /home/git git

对于不基于 Debian/Ubuntu 的 Linux 发行版,可改用以下命令;它至少应适用于 Fedora、CentOS 等 Red Hat 衍生发行版:

sudo groupadd --system git
sudo useradd --system --shell /bin/bash --comment 'Git Version Control' \
   --gid git --home-dir /home/git --create-home git

创建 Forgejo 使用的目录 [3]

现在创建 Forgejo 所需的目录,并适当设置访问权限:

sudo mkdir /var/lib/forgejo
sudo chown git:git /var/lib/forgejo && sudo chmod 750 /var/lib/forgejo

Forgejo 将在这个目录中存储数据,包括 Git 仓库。

sudo mkdir /etc/forgejo
sudo chown root:git /etc/forgejo && sudo chmod 770 /etc/forgejo

这个目录用于存储 Forgejo 的配置文件 app.ini。初始安装时 Forgejo 需要有写入权限,但安装后可以改成对 Forgejo 只读,因为此后它不应再修改该文件。

可选:设置数据库 [4]

如果使用 sqlite 作为 Forgejo 数据库,这里不需要进行任何操作。

如果需要更强大的数据库,可以使用 MySQL/MariaDB 或 PostgreSQL。sqlite 看来足以支持至少 10 名用户,也可能适用于更多用户。

设置说明请参阅 Forgejo 的“数据库准备”指南。 [5]

为 Forgejo 安装 systemd 服务 [6]

Forgejo 提供 systemd 服务脚本。请将其下载到正确位置: [7]

sudo wget -O /etc/systemd/system/forgejo.service https://codeberg.org/forgejo/forgejo/raw/branch/forgejo/contrib/systemd/forgejo.service

如果使用的不是 sqlite,而是 MySQL、MariaDB 或 PostgreSQL,则需要编辑 /etc/systemd/system/forgejo.service,取消对应 Wants= 和 After= 行的注释。否则应可以直接使用。

添加或修改 systemd 服务文件后,需要重新加载 systemd。

sudo systemctl daemon-reload

现在启用并启动 Forgejo 服务,以继续安装:

sudo systemctl enable forgejo.service
sudo systemctl start forgejo.service

通过网页配置 Forgejo [8]

在本地浏览器中打开 http://localhost:3000/,访问 Forgejo 网页界面。必要时将 localhost 替换为服务器的本地 IP 地址。

如果无法访问:

  • 先查看下面第一条命令的输出,确认 forgejo 服务是否成功启动。如果显示错误,但下方日志不够完整、无法判断原因,可运行下面第二条命令,输出 Forgejo 记录的最近 100 行日志。
    sudo systemctl status forgejo.service
    sudo journalctl -n 100 --unit forgejo.service

你应当看到 Forgejo 的“Initial Configuration”(初始配置)页面。大多数设置应容易理解,以下是一些提示:

  • 选择正确的数据库:SQLite3;如果在前面的“设置数据库”步骤中配置了其他数据库,就选择该数据库并填写相应选项。
  • Server Domain 应为 git.example.com,或你实际使用的域名;Forgejo Base URL 应为 http://git.example.com:3000,假设你没有把 HTTP_PORT 从 3000 改为其他值。
  • 查看 Server and Third-Party Service Settings,检查与你有关的服务器和第三方服务设置。
  • 可以考虑立即通过 Administrator Account Settings 创建管理员账户;如果禁用了自主注册,这一点尤其有用。
  • 大多数设置之后都可以在 /etc/forgejo/app.ini 中修改,不必过于担心。

完成配置后,点击 Install Forgejo。几秒后,如果已创建管理员账户,你会进入仪表盘;否则会看到登录/注册页面,可以创建账户后进入仪表盘。

到这里进展顺利,但还没有完全结束:仍需手动调整 app.ini 中的一些配置。

进一步配置 Forgejo 的 app.ini [9]

停止 forgejo 服务:

sudo systemctl stop forgejo.service

顺便把 /etc/forgejo/ 和 app.ini 设置为对 git 用户只读。Forgejo 在初始配置完成后不会再写入这些内容:

sudo chmod 750 /etc/forgejo && sudo chmod 640 /etc/forgejo/app.ini

现在以 root 身份编辑 /etc/forgejo/app.ini。

说明

“配置速查表”和包含所有选项及说明的“app.ini 示例”可能会有所帮助。 [10] [11]

如果要处理许多大文件,建议进行以下修改:

  • Forgejo 支持通过网页界面向 Git 仓库上传文件。默认每个文件不超过 3MB,一次最多 5 个文件。要提高上限,在 [repository] 部分下添加 [repository.upload] 部分,设置 FILE_MAX_SIZE = 4095(4095MB,约 4GB)和 MAX_FILES = 20。配置大致如下:

    ...
    [repository]
    ROOT = /var/lib/forgejo/data/forgejo-repositories
    
    [repository.upload]
    ;; max size for files to the repo via web interface, in MB,
    ;; defaults to 3 (this sets a limit of about 4GB)
    FILE_MAX_SIZE = 4095
    ;; by default 5 files can be uploaded at once, increase to 20
    MAX_FILES = 20
    
    [server]
    ...

    议题和拉取请求的附件也有类似限制,使用 [attachment] 部分中的 MAX_SIZE(默认 4MB)和 MAX_FILES(默认 5)设置。 [12]

  • 默认情况下,LFS 数据上传在 20 分钟后过期。对于大文件、慢速连接或缓慢的 LFS 存储,这可能太短。git-lfs 似乎会自动重新开始上传,导致过程可能一直无法结束,并消耗大量流量。如果要通过 LFS 上传大文件,可以在 [server] 部分添加 LFS_HTTP_AUTH_EXPIRY = 180m,把限制提高到 180 分钟。

  • 同样,各种 git 操作也有超时时间,可能太短。可以在 [server] 部分下面添加 [git.timeout] 部分,提高这些 git 操作的超时时间:

    ;; Git Operation timeout in seconds
    ;; increase the timeouts, so importing big repos (and presumably
    ;; pushing large files?) hopefully won't fail anymore
    [git.timeout]
    DEFAULT = 3600 ; Git operations default timeout seconds
    MIGRATE = 6000 ; Migrate external repositories timeout seconds
    MIRROR  = 3000 ; Mirror external repositories timeout seconds
    CLONE   = 3000 ; Git clone from internal repositories timeout seconds
    PULL    = 3000 ; Git pull from internal repositories timeout seconds
    GC      = 600  ; Git repository GC timeout seconds

    示例值为了说明而提高到原来的 10 倍。未必需要提高所有超时时间,尤其未必需要提高这么多。请根据实际性能要求评估并调整。

  • LFS 文件默认存储在文件系统的 /var/lib/forgejo/data/lfs 中。可以修改 [lfs] 部分中的 PATH = …,改存到其他位置,也可以配置 Forgejo 把文件存储到兼容 S3 的对象存储中。

  • 如果要使用系统级 sendmail,可以如下修改 [mailer] 部分来启用邮件发送:

    [mailer]
    ;; send mail with systemwide "sendmail"
    ENABLED = true
    PROTOCOL = sendmail
    FROM = "Forgejo Git" <noreply@yourdomain.com>
  • Forgejo 默认监听端口 3000,可以使用 HTTP_PORT 改为 80,如下所示: [13]

    [server]
    HTTP_PORT = 80

编辑完 app.ini 后,保存文件并重新启动 Forgejo 服务:

sudo systemctl start forgejo.service

可以点击 Forgejo 页面右上角的用户按钮“Profile and Settings”,依次进入 Site Administration 和 Configuration,然后在 Mailer Configuration 下输入你的邮件地址,点击 Send Testing Email,测试邮件发送。

使用 Forgejo 的一般提示 [14]

有时你可能希望或需要使用 Forgejo 命令行界面。请记住: [15]

  • 需要以 git 用户身份运行,例如:
    $ sudo -u git forgejo command --argument
  • 需要指定 Forgejo 工作路径:使用命令行选项 –work-path /var/lib/forgejo 或 -w /var/lib/forgejo,或者在调用 forgejo 前设置 FORGEJO_WORK_DIR 环境变量:
    $ export FORGEJO_WORK_DIR=/var/lib/forgejo
  • 需要使用 –config /etc/forgejo/app.ini 或 -c /etc/forgejo/app.ini 指定配置文件 app.ini 的路径。

综合起来,命令可能如下:

$ sudo -u git forgejo -w /var/lib/forgejo -c /etc/forgejo/app.ini admin user list

为方便使用,可以创建 /usr/local/bin/forgejo.sh,内容如下:

#!/bin/sh
sudo -u git forgejo -w /var/lib/forgejo -c /etc/forgejo/app.ini "$@"

并赋予可执行权限:

sudo chmod 755  /usr/local/bin/forgejo.sh

现在,如果使用默认安装在 /var/lib/forgejo 中的系统级 Forgejo,可以在命令行使用下面的命令,代替前面较长的命令:

$ forgejo.sh admin user list

随时可以在 forgejo 及其子命令后添加 -h 或 –help,输出可用选项和子命令等使用说明。例如,查看命令行管理用户的可用子命令:

$ forgejo admin user -h
本页内容采用以下许可:CC-BY-SA-4.0 许可。本页改编自 “How to set up a Linux server to host git with LFS behind a VPN”,作者为 “How to set up a Linux server to host git with LFS behind a VPN” by Daniel Gibson.

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容