玩转 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-5linux-arm-6

下载

确定好要下载的版本后,您可以从 下载页面 找到与您的平台对应的可执行程序。

https://dl.gitea.io/gitea/

# 使用 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 服务器启用方法:

  1. 打开配置文件 /etc/gitea/app.ini,找到 [server] 栏目,添加 START_SSH_SERVER = true
  2. 重启 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 获得进一步的支持
posted @ 2022-11-03 17:25  Gitea  阅读(2663)  评论(0编辑  收藏  举报