玩转 Gitea | 在 Linux 上安装预编译的 Gitea 程序,配置 systemd 管理服务
这是一篇介绍手动安装 Gitea 服务器的用户指南。与之前的容器安装方式相比,对系统资源的要求更低,因此也可以在低功耗的嵌入式 Linux 设备上配置安装。您可以使用 systemd 作为服务管理工具、自由地配置基本的系统工具链。同时,您也应该小心谨慎地配置每一项系统权限。
Gitea 官网提供的所有构建版本均包括 SQLite, MySQL 和 PostgreSQL 的支持。所有静态网站资源均已嵌入到一个可执行程序中,这一点和老版本有所不同。
选择架构
对于 Linux 系统,您可以选择适用于 64 位 Intel/AMD 平台的 linux-amd64
或是 32 位的 linux-386
。这里也有其他架构,包括 Arm64 平台的 linux-arm64
(例如 Raspberry PI 4)以及 32 位的 linux-arm-5
和 linux-arm-6
。
下载
确定好要下载的版本后,您可以从 下载页面 找到与您的平台对应的可执行程序。
# 使用 wget 下载
$ wget https://dl.gitea.io/gitea/1.17.3/gitea-1.17.3-linux-amd64
# 使用 curl 下载
$ curl -O https://dl.gitea.io/gitea/1.17.3/gitea-1.17.3-linux-amd64
验证 GPG 签名
Gitea 使用了 PGP 密钥对所有二进制文件进行签名,以确保文件没有被篡改。验证文件之前确保系统上已经安装了 gnupg
工具链,然后导入 Gitea 的 PGP 公钥,并下载对应的签名文件 .asc
。使用 GnuPG 命令行工具执行如下命令:
$ gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
$ gpg --verify gitea-1.17.3-linux-amd64.asc gitea-1.17.3-linux-amd64
正确校验签名时会显示:Good signature from "Teabot <teabot@gitea.io>" [ultimate]
gpg: Signature made Sat 15 Oct 2022 10:04:22 PM CST
gpg: using RSA key CC64B1DB67ABBEECAB24B6455FC346329753F4B0
gpg: Good signature from "Teabot <teabot@gitea.io>" [ultimate]
添加可执行权限
$ cp gitea-*-linux-amd64 /usr/local/bin/gitea
$ chmod +x /usr/local/bin/gitea
验证
$ gitea --version
Gitea version 1.17.3 built with GNU Make 4.1, go1.18.7 : bindata, sqlite, sqlite_unlock_notify
准备系统环境
Git >= 2.0
, OpenSSH, GnuPG
Gitea 依赖 git 命令行工具,请使用 git --version
检查服务器上是否安装了 Git >= 2.0
。OpenSSH 是可以选的服务,因为您还可以使用 Gitea 内置的 Go SSH 服务代替 OpenSSH。GnuPG 是可选装的 PGP 加密套件,在前面的验证 GPG 签名步骤中可以确认安装状态。
安装依赖
# Debian/Ubuntu
$ apt install git openssh-server gnupg
# RHEL/Fedora/CentOS
$ yum install git openssh-server gnupg
创建一个用户来运行 Gitea
出于安全性建议,Gitea 不支持以 root
账号运行程序。如果以 root 运行,会报告错误并停止程序。
创建系统用户与用户组 git
。设置家目录并禁用密码登录。
# Debian/Ubuntu
$ adduser \
--system \
--shell /bin/bash \
--gecos 'Git Version Control' \
--group \
--disabled-password \
--home /home/git \
git
# RHEL/Fedora/CentOS
$ adduser \
--system \
--shell /bin/bash \
--user-group \
--home-dir /home/git \
git
创建 Gitea 所需的目录结构
/var/lib/gitea
程序工作目录/etc/gitea
存放 app.ini 配置文件
$ mkdir -p /var/lib/gitea/{custom,data,log}
$ chown -R git:git /var/lib/gitea/
$ chmod -R 750 /var/lib/gitea/
$ mkdir /etc/gitea
$ chown root:git /etc/gitea
$ chmod 770 /etc/gitea
注意:
/etc/gitea
临时设置了用户的写入权限,以便 Web 安装程序可以写入配置文件。安装完毕后,建议将权限设置为只读。
chmod 750 /etc/gitea
chmod 640 /etc/gitea/app.ini
配置 systemd 管理 Gitea 服务
您可以使用 systemd 将 Gitea 设置作为服务运行。Debian/Ubuntu/RHEL/Fedora/CentOS 均使用 systemd,因此您可以参照以下的步骤进行配置。
获取模板
下载 gitea.service
模板,并复制到 /etc/systemd/system/gitea.service
curl -o /etc/systemd/system/gitea.service https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/systemd/gitea.service
配置服务
编辑 gitea.service
,根据您的需要,设置用户和用户组,服务依赖项目。
[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
###
# 这部分是数据库服务依赖,Gitea 服务的启动顺序取决于数据库是否完全启动
# 如要设置启动顺序位于 Postgresql 之后,请解除对呀部分的注释
###
#
#Wants=mysql.service
#After=mysql.service
#
#Wants=postgresql.service
#After=postgresql.service
[Service]
# 如果在服务处理大量文件时出现 HTTP 500 错误,可以通过设置 LimitNOFILE 取消这一限制
# LimitNOFILE=524288:524288
# 服务重启间隔时间
RestartSec=2s
Type=simple
# 用户组 git:git
User=git
Group=git
# Gitea 的工作目录
WorkingDirectory=/var/lib/gitea/
# 启动程序时执行的命令
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
# 服务停止时,是否重启
Restart=always
# 传递一些环境变量,包括用户组、家目录、工作目录
Environment=USER=git HOME=/var/lib/gitea GITEA_WORK_DIR=/var/lib/gitea
[Install]
WantedBy=multi-user.target
启动服务
安装 gitea.service 服务,并立即启动。
$ systemctl enable --now gitea
检查 gitea.service 服务:
$ systemctl status gitea.service
● gitea.service - Gitea (Git with a cup of tea)
Loaded: loaded (/etc/systemd/system/gitea.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2022-11-02 16:59:55 CST; 25s ago
Main PID: 899 (gitea)
Tasks: 9 (limit: 4658)
Memory: 142.9M
CPU: 1.310s
CGroup: /system.slice/gitea.service
└─899 /usr/local/bin/gitea web --config /etc/gitea/app.ini
当看到上述日志的时候可以认为实例已经启动了。下一步,使用 ip a
查找您服务器的IP地址,在浏览器中输入 http://<IP>:3000/
即可登陆 Gitea 实例进行初始化设置。
出现错误时如何查看日志?
使用 journalctl 可以检查 systemd 托管服务的程序日志。
$ journalctl -u gitea.service
配置 SSH
如果不使用 SSH,就可以跳过本节。
使用 Gitea 内置的 Go SSH 服务器
内置的 Go SSH 服务器启用方法:
- 打开配置文件 /etc/gitea/app.ini,找到
[server]
栏目,添加START_SSH_SERVER = true
- 重启 Gitea 服务加载配置
使用 OpenSSH
默认的 OpenSSH 安装可能会允许密码登录、root 登录。根据 Gitea 的 OpenSSH 配置模板,您还可以在自己的 OpenSSH 服务中可选地引入以下配置:
# SSH 服务端口和协议版本
Port 22
Protocol 2
# OpenSSH 服务器监听的IP地址,如果不需要IPv6,请注释掉 ListenAddress ::
AddressFamily any
ListenAddress 0.0.0.0
ListenAddress ::
# 默认支持的主机密钥
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key
AuthorizedKeysFile .ssh/authorized_keys
AuthorizedPrincipalsFile .ssh/authorized_principals
TrustedUserCAKeys /data/git/.ssh/gitea-trusted-user-ca-keys.pem
CASignatureAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com,ssh-ed25519,sk-ssh-ed25519@openssh.com,rsa-sha2-512,rsa-sha2-256,ssh-rsa
UseDNS no
AllowAgentForwarding no
AllowTcpForwarding no
PrintMotd no
PermitUserEnvironment yes
# 禁止 root 登录
PermitRootLogin no
ChallengeResponseAuthentication no
# 禁止密码和空密码登录。设置后仅使用 SSH 密钥登录
PasswordAuthentication no
PermitEmptyPasswords no
# 设置允许登录的账号白名单,添加 git 和你自己正在使用的账号
# 注意:这是一个相当危险的操作,如果你使用SSH远程连接服务器
# 填写错误会阻止你登录服务器。
#AllowUsers git
Banner none
#Subsystem sftp /usr/lib/ssh/sftp-server
# 仅允许环境变量 GIT_PROTOCOL
AcceptEnv GIT_PROTOCOL
寻求帮助?
如果您在使用或者开发过程中遇到问题,请到以下渠道咨询:
- 到 GitHub Issue 提问(因为项目维护人员来自世界各地,为保证沟通顺畅,请使用英文提问)
- 中文问题到 Gitea 论坛 提问
- 访问 Discord Gitea 聊天室(英文)
- 加入技术群 328432459 获得进一步的支持