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

ssh

  1. 在 Linux 或 Windows 生成公私钥
ssh-keygen -t ed25519 -C "your_email@example.com"

公钥在 ~/.ssh/id_ed25519.pub

  1. 确认 Gitea app.ini 的 SSH 配置有如下内容
[server]
SSH_CREATE_AUTHORIZED_KEYS_FILE = true
START_SSH_SERVER = false
SSH_DOMAIN = git.vfly2.com
SSH_PORT = 22
SSH_LISTEN_PORT = 22
  1. 添加 SSH 公钥到 Gitea

头像
→ Settings
→ SSH / GPG Keys
→ Add Key

  1. 在 Gitea 所在的服务端,查看是否正常添加公钥
cat /home/git/.ssh/authorized_keys

如果没有,可以强制生成

sudo -u git gitea admin regenerate keys --config /etc/gitea/app.ini

这里 authorized_keys 不是普通的一行一个公钥,而是类似这样的内容 command="/usr/local/bin/gitea serv key-1" ssh-ed25519 AAAA...

  1. 验证
ssh -T git@git.vfly2.com -p 2222 -i C:\\Users\\vfly2\\.ssh\\id_ed25519

应该返回

Hi there, vfly2! You've successfully authenticated with the key named mywin, but Gitea does not provide shell access.
If this is unexpected, please log in with password and setup Gitea under another user.

如果是进入了 shell 则说明 authorized_keys 的内容不对,需要强制重新生成

再尝试用 git ,下面是在 PowerShell 里的指令

$env:GIT_SSH_COMMAND='ssh -p 2222 -i C:\\Users\\vfly2\\.ssh\\id_ed25519'
git ls-remote ssh://git@git.vfly2.com:2222/vfly2/plantodo.git

原文链接: 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
小恐龙
花!
上一篇
下一篇