本文重在 Gitea 的部署流程,介绍和具体使用方法请到:适合个人用的代码托管平台 – 技焉洲
指标 | 描述 |
---|---|
适用系统 | Debian 系发行版,包括 Ubuntu, Armbian,其他发行版稍改命令一般也可 |
走通流程时间 | 15 分钟 |
I might have made some mistakes, please let me know if I’ve gotten anything wrong!
官方文档:What is Gitea? | Gitea Documentation,挺详细的,本文就是参考它以及部署经验总结而成。
通观全局,Gitea 是一个单文件程序,它本身在 /usr/local/bin/gitea,在 /var/lib/gitea 下保存一些数据,/etc/gitea/app.ini 保存配置文件。
Gitea 环境变量: Environment variables | Gitea Documentation
从二进制安装
前置准备
Gitea 依赖 git 命令行工具,使用 git --version
确保 Git >= 2.0
,另外还需要 OpenSSH, GnuPG,可以用下面命令安装。
sudo apt update && sudo apt install curl git openssh-server gnupg
本文使用 SQLite 数据库,无须特别配置,个人用足够了,如果使用其他的数据库可以查看官方教程: Database Preparation | Gitea Documentation 。
下载与安装
下载地址: Gitea | gitea ,找到对应的下载地址,替换下面命令里的网址
curl -O https://dl.gitea.com/gitea/1.23.6/gitea-1.23.6-linux-amd64
把文件放到目录下
mv gitea-*-linux-amd64 gitea && chmod +x gitea && \
sudo mv gitea /usr/local/bin/
查看是否能运行
gitea --version
执行 gitea web
,在浏览器中输入 http://<IP>:3000/
即可登陆 Gitea 实例进行初始化设置,但先不要设置。
(可跳过)验证下载的 Gitea 二进制的 GPG 签名,以确保文件没有被篡改。
Gitea 使用了 PGP 密钥对所有二进制文件进行签名,验证文件之前确保系统上已经安装了 gnupg
工具链,然后导入 Gitea 的 PGP 公钥,并下载对应的签名文件 .asc
。
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]
准备环境
出于安全性,如果以 root 运行,Gitea 会报告错误并停止程序。创建系统用户 git
来运行 Gitea,设置家目录并禁用密码登录。
sudo adduser \
--system \
--shell /bin/bash \
--gecos 'Git Version Control' \
--group \
--disabled-password \
--home /home/git \
git
创建 Gitea 所需的目录结构
程序工作目录: /var/lib/gitea
sudo mkdir -p /var/lib/gitea/{custom,data,log} && \
sudo chown -R git:git /var/lib/gitea/ && sudo chmod -R 750 /var/lib/gitea/
存放 app.ini 配置文件的目录: /etc/gitea
sudo mkdir -p /etc/gitea && \
sudo chown root:git /etc/gitea && sudo chmod 770 /etc/gitea
注意:在上面 /etc/gitea
临时设置了用户的写入权限,以便 Web 安装程序可以写入配置文件。安装完毕后,建议将权限设置为只读。
sudo chmod 750 /etc/gitea && sudo chmod 640 /etc/gitea/app.ini
配置 Systemd 持久运行
可以拷贝示例代码 gitea.service 并根据需要修改,或者直接看文本的。
sudo vim /etc/systemd/system/gitea.service
[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
[Service]
RestartSec=2s
Type=simple
User=git
Group=git
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 服务,并立即启动。
sudo systemctl enable --now gitea
检查 gitea.service 服务:
sudo systemctl status gitea.service
方便读者使用
sudo systemctl start gitea.service
sudo systemctl stop gitea.service
使用 journalctl 检查程序日志。
sudo journalctl -u gitea.service
网页安装
访问网页。
数据库类型选 SQLite3,数据库文件路径输入 /var/lib/gitea/data/gitea.db ,其他默认或按需更改。
反代 HTTPS
使用 acme.sh 自动获取和更新证书: [[02acme.sh]] 使用 acme.sh 申请和自动更新证书的完整指南 – 技焉洲
记得修改域名
acme.sh --issue -d git.cufah.cloud --webroot /var/www/html
acme.sh --install-cert -d git.cufah.cloud \
--key-file /etc/ssl/private/git.cufah.cloud.key \
--fullchain-file /etc/ssl/certs/git.cufah.cloud.cer \
--reloadcmd "systemctl reload nginx"
sudo vim /etc/nginx/sites-available/git
自行更改域名和路径
server {
listen 80;
server_name git.cufah.cloud;
location /.well-known/acme-challenge/ {
root /var/www/html;
}
location / {
return 301 https://git.cufah.cloud$request_uri;
}
}
server {
listen 443 ssl;
server_name git.cufah.cloud;
ssl_certificate /etc/ssl/certs/git.cufah.cloud.cer;
ssl_certificate_key /etc/ssl/private/git.cufah.cloud.key;
location /.well-known/acme-challenge/ {
root /var/www/html;
}
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
sudo ln -s /etc/nginx/sites-available/git /etc/nginx/sites-enabled/git
检查配置
sudo nginx -t
重启生效
sudo systemctl reload nginx
更新
只需要关停旧服务,下载新版本的二进制文件,替换旧的 /usr/local/bin/gitea,再重启就可以。
不过建议先备份。另外替换前,把旧的重命名 mv /usr/local/bin/gitea /usr/local/bin/gitea.bak
备份
仅限 SQLite 数据库,下面迁移也是。
关停服务,打包整个目录 /var/lib/gitea/ 。
tar -z -cv -f gitea_bak.tar.gz /var/lib/gitea/ -p
还有配置文件 /etc/gitea/app.ini ,单独一个文件随便什么方法保存。
Gitea 目前有 dump 命令可以打包,但是恢复的时候,没有对应命令,只能手动恢复。如果机器的系统和架构不变,其实直接打包文件就可以,但如果有改变,特别是数据库就不能兼容,就比较麻烦。
迁移
在新机器上走完全流程到“网页安装”那里,然后关停服务
新的和旧的都关停
sudo systemctl stop gitea.service
在旧服务器执行命令(新服务器也行,但路径会有区别)
复制配置文件 /etc/gitea/app.ini
sudo rsync -avuzP -e "ssh -p 22" /etc/gitea/app.ini root@1.2.3.4:/etc/gitea/
复制程序运行目录 /var/lib/gitea/
sudo rsync -avuzP -e "ssh -p 22" /var/lib/gitea root@1.2.3.4:/var/lib/
确保目录的用户是 git
sudo chown -R git:git /var/lib/gitea
在新服务器启动服务
sudo systemctl start gitea.service
sleep 3
sudo systemctl status gitea.service
在旧服务器关闭开机自启
sudo systemctl disable gitea.service
原文链接: https://yanh.tech/2025/04/19/deployment-process-of-gitea
版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 技焉洲 (yanh.tech) 。
保持更新 ٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ 清晰恒益的实用技能,欢迎使用 RSS 订阅,如果能留言互动就更好了。
可在 Telegram 群组 https://t.me/vfly2 交流依文章步骤遇到的问题。