Forgejo

来自 ArchWiki

ForgejoGitea 的一个 硬分叉,由非营利组织 Codeberg 管理,是用 Go 编写并在 MIT 许可证下发布的轻量级代码托管解决方案。

安装

安装 forgejoforgejo-gitAUR 软件包。

Forgejo 需要使用数据库后端,以下是支持的数据库:

配置

用户配置文件位于 /etc/forgejo/app.ini

有关更多配置示例,请参阅 Forgejo 文档

如果您要从 Gitea 迁移,请参阅 Forgejo 的 迁移指南

PostgreSQL

安装配置 PostgreSQL

在 TCP 或 UNIX 套接字之间选择,并跳转到相应的章节。

注意: 当 Forgejo 和 PostgreSQL 在同一台机器上时,您应该使用 Unix 套接字,因为它更快且更安全。

使用 TCP 套接字

postgres 用户身份连接到服务器时创建新用户(系统将提示您输入新用户的密码)

[postgres]$ createuser -P forgejo

创建 Forgejo 数据库,所有者为 forgejo 用户

[postgres]$ createdb -O forgejo forgejo

PostgreSQL#配置 PostgreSQL 以允许远程主机访问

验证是否工作正常

$ psql --host=ip_address --dbname=forgejo --username=forgejo --password

通过首次运行安装程序或更新 app.ini 来配置 Forgejo

/etc/forgejo/app.ini
DB_TYPE             = postgres
HOST                = hostadress:port
NAME                = forgejo
USER                = forgejo
; Use PASSWD = `your password` for quoting if you use special characters in the password.
PASSWD              = password

使用 Unix 套接字

postgres 用户身份连接到服务器时创建新用户

[postgres]$ createuser forgejo

创建 Forgejo 数据库,所有者为 forgejo 用户

[postgres]$ createdb -O forgejo forgejo

通过将以下行添加到 /var/lib/postgres/data/pg_hba.conf 来设置 Unix 套接字

/var/lib/postgres/data/pg_hba.conf
local    forgejo           forgejo           peer

重启 postgresql.service

验证是否工作正常

[forgejo]$ psql --dbname=forgejo --username=forgejo

通过首次运行安装程序或更新 app.ini 来配置 Forgejo

/etc/forgejo/app.ini
DB_TYPE             = postgres
HOST                = /run/postgresql/
NAME                = forgejo
USER                = forgejo
PASSWD              =

MariaDB/MySQL

注意: 可以通过使用 /var/run/mysqld/mysqld.sock 作为监听地址来启用 MySQL 套接字支持。

以下是设置 MariaDB 的示例,设置您想要的密码

$ mysql -u root -p
mysql> CREATE DATABASE `forgejo` DEFAULT CHARACTER SET `utf8mb4` COLLATE `utf8mb4_unicode_ci`;
mysql> CREATE USER `forgejo`@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON `forgejo`.* TO `forgejo`@`localhost`;
mysql> FLUSH PRIVILEGES;
mysql> \q

尝试使用新用户连接到新数据库

$ mysql -u forgejo -p -D forgejo

通过首次运行安装程序或更新 app.ini 来配置 MariaDB

/etc/forgejo/app.ini
DB_TYPE  = mysql
HOST     = 127.0.0.1:3306 ; or /var/run/mysqld/mysqld.sock
NAME     = forgejo
USER     = forgejo
PASSWD   = password

SQLite

SQLite 本身不需要特定的配置。

通过首次运行安装程序或更新 app.ini 来配置 SQLite

/etc/forgejo/app.ini
DB_TYPE = sqlite3
PATH= /var/lib/forgejo/data/forgejo.db

MSSQL

本文或本节已过时。

原因: 自 v8.0 起不再支持 (在 Talk:Forgejo 中讨论)

必须使用 排序规则 _CS_AS (区分大小写,区分重音) 创建数据库

例如

TSQL
CREATE DATABASE forgejo
COLLATE SQL_Latin1_General_CP1_CS_AS;

通过首次运行安装程序或更新 app.ini 来配置 MSSQL

/etc/forgejo/app.ini
DB_TYPE  = mssql
HOST     = 10.0.0.2:1433 ;Update IP Address
NAME     = forgejo
USER     = forgejo
PASSWD   = password

使用

启动/启用 forgejo.service,Web 界面应监听 https://127.0.0.1:3000

首次运行 Forgejo 时,它应重定向到 https://127.0.0.1:3000/install

注意
  • 您可能需要配置反向代理以进行远程访问,例如 nginx
  • 如果您希望 Forgejo 监听所有接口,请在 /etc/forgejo/app.ini 中设置 HTTP_ADDR = 0.0.0.0

技巧与诀窍

本地 Shell 客户端 (forgejo)

Forgejo 打包了一个本地 shell 管理工具。二进制文件位于 /bin/forgejo

更多信息可以在 https://forgejo.org/docs/latest/admin/command-line/ 找到

启用 SSH 支持

确保 SSH 已正确配置并正在运行。

设置你的域名

您可能想要设置 SSH_DOMAIN,例如

/etc/forgejo/app.ini
SSH_DOMAIN                 = git.domain.tld
注意: 如果您将 PROTOCOL 设置为 http+unix,那么您需要取消设置 LOCAL_ROOT_URL 或将其设置为 http://unix/。请参阅此 评论

配置 SSH

默认情况下,Forgejo 将以用户 forgejo 身份运行;此帐户也将用于 ssh 仓库访问。为了使 ssh 访问工作,您必须启用 PAM。或者,您可能需要解锁服务帐户。

/etc/ssh/sshd_config
...
UsePAM yes
...

如果您在您的 SSH 配置 中使用 AllowUsers,请将 AllowUsers forgejo 添加到其中,例如

/etc/ssh/sshd_config
...
AllowUsers archie forgejo
...

重启 sshd.service 如果您使用它(如果您使用 sshd.socket,则无需执行任何操作)。

禁用 HTTP 协议

默认情况下,通过 HTTP 协议与仓库交互的功能已启用。如果您使用 SSH,您可能想要禁用 HTTP 支持,方法是将 DISABLE_HTTP_GIT 设置为 true

绑定到受限端口

如果您使用内置 SSH 服务器并希望 Forgejo 将其绑定到端口 22,或者如果您希望将 Forgejo Web 服务器直接绑定到端口 80/443(即在没有代理的设置中),您将需要添加一个 drop-in systemd 单元覆盖

/etc/systemd/system/forgejo.service.d/override.conf
[Service]
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
PrivateUsers=false

启用深色主题

ui 部分中,您可以将 DEFAULT_THEME 设置为 forgejo-dark,以使 Web 界面使用深色背景。

自定义 Forgejo 的外观

有关更多详细信息,请参阅 Forgejo 文档[1]

注意: Forgejo 官方不支持自定义界面,因为它可能会导致界面损坏。有关更多详细信息,请参阅 https://forgejo.org/docs/latest/admin/customization/#a-word-of-warning-here-be-dragons

可以使用 Go 模板高度自定义 Forgejo 的外观。首先,创建 /var/lib/forgejo/custom 目录。可以通过编辑 /var/lib/forgejo/custom/templates 中的文件来覆盖模板。默认模板可以在 Forgejo 源代码templates 目录中找到。例如,要自定义主页,请将源代码中的 templates/home.tmpl 复制到 /var/lib/forgejo/custom/templates/home.tmpl 并根据需要编辑模板。

此外,可以通过创建以下文件来更改徽标和网站图标:/var/lib/forgejo/custom/public/img/logo.svg/var/lib/forgejo/custom/public/img/favicon.svg

在对这些文件进行任何更改后,需要重启 Forgejo。

配置反向代理

有关更多信息和示例,请参阅 Forgejo 文档网站上的反向代理部分 [2]

nginx

以下是使用 nginx 作为 Forgejo 基于 Unix 套接字的反向代理的示例(您需要 提供 SSL 证书

/etc/nginx/servers-available/forgejo.conf
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;
    server_name git.domain.tld;

    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;

    location / {
        client_max_body_size 512M;
        proxy_pass http://unix:/run/forgejo/forgejo.socket;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

更新 app.ini[server][session] 部分

/etc/forgejo/app.ini
[server]
PROTOCOL                   = http+unix
DOMAIN                     = git.domain.tld
ROOT_URL                   = https://git.domain.tld
HTTP_ADDR                  = /run/forgejo/forgejo.socket
LOCAL_ROOT_URL             =

[session]
COOKIE_SECURE              = true 
注意: 您无需在 /etc/forgejo/app.ini 中激活任何 SSL 证书选项。

Apache HTTP Server

以下是使用 Apache HTTP Server 作为 Forgejo 基于 Unix 套接字的反向代理的示例。要将 domain.tld 转发到 Forgejo 服务器,请使用

/etc/httpd/conf/httpd.conf
ProxyPreserveHost On
ProxyRequests off
AllowEncodedSlashes NoDecode
Proxypass / unix:/run/forgejo/forgejo.socket|http://domain.tld nocanon
ProxypassReverse / unix:/run/forgejo/forgejo.socket|http://domain.tld nocanon

其中 domain.tld 应替换为您的域名(此条目仅作为标头传递给代理,并且对于此设置似乎无关紧要)。

/etc/forgejo/app.ini
[server]
PROTOCOL                   = http+unix
DOMAIN                     = domain.tld
ROOT_URL                   = https://domain.tld
HTTP_ADDR                  = /run/forgejo/forgejo.socket
LOCAL_ROOT_URL             =

要将子路径(例如 domain.tld/git)转发到 Forgejo 服务器,请使用

/etc/httpd/conf/httpd.conf
<Proxy *>
  Order allow,deny
  Allow from all
</Proxy>
AllowEncodedSlashes NoDecode
Proxypass /git unix:/run/forgejo/forgejo.socket|http://domain.tld nocanon
ProxypassReverse /git unix:/run/forgejo/forgejo.socket|http://domain.tld nocanon
/etc/forgejo/app.ini
[server]
PROTOCOL                   = http+unix
DOMAIN                     = domain.tld
ROOT_URL                   = https://git.domain.tld
HTTP_ADDR                  = /run/forgejo/forgejo.socket
LOCAL_ROOT_URL             =

自定义数据目录设置

目前,您不能使用自定义路径(例如 /srv/forgejo)作为服务器主目录,因为随附的 forgejo.service 单元文件将所有内容标记为只读。

要启用这些自定义路径,请使用您的服务器主目录作为新的 ReadWriteDirectories 指令创建一个 drop-in snippet

/etc/systemd/system/forgejo.service.d/data-directory.conf
[Service]
ReadWriteDirectories=/srv/forgejo

然后执行 daemon-reload重启 forgejo.service 以使更改生效。

故障排除

服务启动失败并显示权限被拒绝

如果您手动创建 forgejo 用户并使用常用的主文件夹 /home/forgejo,则 forgejo 服务将无法启动并输出类似以下的错误: 

Sep 04 04:44:32 systemd[1]: forgejo.service: Failed with result 'exit-code'.
Sep 04 04:44:32 systemd[1]: forgejo.service: Main process exited, code=exited, status=200/CHDIR
Sep 04 04:44:32 (forgejo)[30727]: forgejo.service: Failed at step CHDIR spawning /usr/bin/forgejo: Permission denied
Sep 04 04:44:32 (forgejo)[30727]: forgejo.service: Changing to the requested working directory failed: Permission denied

该服务需要用户的主文件夹为主要的 forgejo 文件夹,默认值为 /var/lib/forgejo,一个修复方法是

$ usermod -d /var/lib/forgejo forgejo

参见