Forgejo
Forgejo 是由非营利组织 Codeberg 管理的 Gitea 的一个 硬分叉,它是一个用 Go 编写的轻量级代码托管解决方案,并根据 GPLv3+ 许可证发布。
安装
安装 forgejo 或 forgejo-gitAUR 软件包。
Forgejo 需要使用数据库后端,支持以下数据库:
配置
用户配置文件位于 /etc/forgejo/app.ini。
有关更多配置示例,请参阅 Forgejo 文档。
如果您是从 Gitea 迁移,请参阅 Forgejo 的 迁移指南。
PostgreSQL
在 TCP 或 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
用法
启动/启用 forgejo.service,Web 界面应监听在 https://:3000。
首次运行 Forgejo 时,应重定向到 https://: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
配置 SSH
默认情况下,Forgejo 将以 forgejo 用户身份运行;此帐户也将用于 ssh 存储库访问。默认情况下,此用户已过期,您可能会遇到身份验证错误:“您的帐户已过期;请联系您的系统管理员”。
使用 chage 删除过期条件,例如:
# chage -E -1 forgejo
要使 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,您可能希望通过将 DISABLE_HTTP_GIT 设置为 true 来禁用 HTTP 支持。
绑定到受限端口
如果您使用内置的 SSH 服务器并希望 Forgejo 将其绑定到端口 22,或者如果您希望 Forgejo Web 服务器直接绑定到端口 80/443(在没有代理的设置中),您需要添加一个 systemd drop-in 配置单元覆盖。
/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 的外观高度可定制,使用 Go 模板。首先,创建 /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 单元文件将所有内容标记为只读。
要启用这些自定义路径,请创建一个 drop-in 配置单元片段,并将您的服务器主目录作为新的 ReadWriteDirectories 指令。
/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