代码托管平台 Gitea 的安装步骤

本文重在 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 交流依文章步骤遇到的问题。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇