Gitea 升级与日常维护指南(备份 + 一键升级脚本)
前言
Gitea 搭好了、代码也推上去了,但很多新手都会忽略一个关键问题:维护。
Gitea 团队每个月都会发布新版本,修复安全漏洞、加新功能、修 bug。如果你一直不升级,可能会遇到这些问题:
- 安全漏洞被利用(Git 仓库泄露)
- 有些功能用不了(新版本改了一些接口)
- 想装新插件,但版本太老不支持
别担心,维护 Gitea 没有你想象的那么复杂。这篇文章会教你 升级 + 日常维护 的全流程,全是实战经验。
一、升级前最重要的事:备份
不管你怎么升级,第一步永远是备份。
Gitea 的数据分两部分:
| 数据类型 | 存在哪里 | 怎么备份 |
|---|---|---|
| 配置文件 | /etc/gitea/app.ini 或 /opt/gitea/custom/conf/app.ini | 直接复制 |
| 仓库数据 | /home/git/gitea-repositories/ 或你自己设的路径 | 压缩打包 |
| 数据库 | SQLite 文件或 MySQL 数据库 | 导出 SQL |
SQLite 备份(最简单)
如果你装 Gitea 时选了 SQLite,备份就一个文件:
# 找到你的数据库文件(通常在 Gitea 数据目录下)
find / -name "gitea.db" 2>/dev/null
# 假设路径是 /var/lib/gitea/data/gitea.db,复制它就行
cp /var/lib/gitea/data/gitea.db /tmp/gitea-backup.dbMySQL 备份(如果你用 MySQL)
mysqldump -u root -p gitea > /tmp/gitea-backup.sql一键全量备份脚本
把下面这段保存成 backup-gitea.sh:
#!/bin/bash
# Gitea 一键备份脚本
BACKUP_DIR="/backup/gitea"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
echo "📦 开始备份 Gitea..."
# 1. 备份配置文件
cp /etc/gitea/app.ini $BACKUP_DIR/app.ini.$DATE
# 2. 备份仓库数据
tar -czf $BACKUP_DIR/repos.$DATE.tar.gz /home/git/gitea-repositories/
# 3. 备份数据库(SQLite 版本)
cp /var/lib/gitea/data/gitea.db $BACKUP_DIR/gitea.db.$DATE
echo "✅ 备份完成:$BACKUP_DIR"
ls -lh $BACKUP_DIR/设置每周自动备份:
crontab -e
# 添加下面这行,每周日凌晨 3 点自动备份
0 3 * * 0 /root/backup-gitea.sh二、升级 Gitea
Gitea 的升级非常简单——本质上就是替换一个二进制文件。
方法一:手动升级(理解原理)
先停服务,下载新版本,替换文件,重启服务:
# 1. 停止 Gitea
systemctl stop gitea
# 2. 备份当前版本(万一新版本有问题可以回退)
cp /usr/local/bin/gitea /tmp/gitea-old
# 3. 下载最新版本
wget -O /usr/local/bin/gitea https://dl.gitea.com/gitea/1.22/gitea-1.22-linux-amd64
# 4. 设置可执行权限
chmod +x /usr/local/bin/gitea
# 5. 启动 Gitea
systemctl start gitea
# 6. 验证版本
gitea -v就这么几步。但每次都要查版本号、手打命令,有点麻烦。所以我写了一个自动化脚本。
方法二:一键升级脚本(推荐)
我写了一个升级脚本,全自动检测最新版本、下载、替换、启动一条龙:
#!/bin/bash
# Gitea 一键升级脚本
# 自动检测最新版本并升级
set -e
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }脚本做了哪些事情?
来逐个看一下核心部分:
1. 检测当前版本:
get_current_version() {
gitea -v | grep -o 'gitea version [0-9.]*' | grep -o '[0-9.]*'
}Gitea 自带的 -v 参数会输出版本号,脚本从中提取数字部分。
2. 获取最新版本:
get_latest_version() {
latest_version=$(curl -s https://api.github.com/repos/go-gitea/gitea/releases/latest \
| grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/' | sed 's/^v//')
# 如果 GitHub API 连不上,备选方案
if [ -z "$latest_version" ]; then
latest_version=$(curl -s https://dl.gitea.com/gitea/ \
| grep -oE 'gitea-[0-9]+\.[0-9]+\.[0-9]+-linux-amd64' | head -1 | sed 's/gitea-//' | sed 's/-linux-amd64//')
fi
echo "$latest_version"
}先去 GitHub API 查最新版本号,如果网络问题查不到,就去 Gitea 官方下载站列表里找最新版本。双重保险。
3. 版本比较,自动判断是否需要升级:
version_compare() {
higher_version=$(printf '%s\n' "$1" "$2" | sort -V | tail -n1)
# 判断哪个更新
}利用 Linux 的 sort -V(版本号排序)来比较,比自己写正则靠谱多了。
4. 智能检测架构:
get_architecture() {
arch=$(uname -m)
case "$arch" in
x86_64|amd64) echo "amd64" ;;
aarch64|arm64) echo "arm64" ;;
# ...
esac
}不管是 x86 服务器还是 ARM 开发板(树莓派、Oracle ARM),脚本自动检测下载对应版本。
5. 升级核心流程:
# 停止服务 → 备份 → 下载 → 替换 → 启动
systemctl stop gitea # 停服务
cp /usr/local/bin/gitea /tmp/gitea_backup_$(date +%s) # 备份旧版
wget -O gitea $download_url # 下载新版
install -m 0755 gitea /usr/local/bin/gitea # 安装
systemctl start gitea # 启动服务如果下载失败,脚本会自动恢复备份,不会让你的 Gitea 变砖。
使用方法
# 给执行权限
chmod +x gitea-upgrade.sh
# 以 root 运行
sudo ./gitea-upgrade.sh输出类似这样:
[INFO] 当前版本: 1.22.0
[INFO] 最新版本: 1.25.0
[INFO] 发现新版本,开始升级...
[INFO] 检测到系统: linux-amd64
[INFO] 下载URL: https://dl.gitea.com/gitea/1.25.0/gitea-1.25.0-linux-amd64
[INFO] 下载成功
[INFO] 安装成功
[INFO] Gitea服务启动成功
[INFO] 升级完成,当前版本: 1.25.0还可以加参数:
sudo ./gitea-upgrade.sh -v # 只看当前版本
sudo ./gitea-upgrade.sh -f # 强制重新升级(版本相同也重装)三、日常维护
除了升级,日常还要关注这几个方面。
1. 查看服务状态
systemctl status gitea
# 应该显示 active (running)2. 查看日志
# 查看 Gitea 日志
journalctl -u gitea -n 50 --no-pager
# 实时查看日志(按 Ctrl+C 退出)
journalctl -u gitea -f如果看到 error 或 panic 关键词,说明有问题需要处理。
3. 检查磁盘空间
# Git 仓库占空间会越来越大,定期检查
df -h
# 查看 Gitea 数据目录大小
du -sh /home/git/gitea-repositories/建议保持 剩余空间 20% 以上,否则 Git 操作可能失败。
4. 检查端口是否正常
# Gitea 默认端口是 3000
ss -tlnp | grep 3000
# 或者检查 Nginx 是否在监听
ss -tlnp | grep 80
# 如果配了 HTTPS
ss -tlnp | grep 4435. 健康检查脚本
把下面这段加到你的定时任务里,每天自动检查:
#!/bin/bash
# Gitea 健康检查
# 检查进程
if ! pgrep gitea > /dev/null; then
echo "[$(date)] Gitea 进程挂了,正在重启..." >> /var/log/gitea-health.log
systemctl restart gitea
fi
# 检查 HTTP 响应
if ! curl -s -o /dev/null -w "%{http_code}" http://localhost:3000 | grep -q 200; then
echo "[$(date)] Gitea HTTP 无响应" >> /var/log/gitea-health.log
fi
# 检查磁盘空间
usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$usage" -gt 85 ]; then
echo "[$(date)] 磁盘使用率 ${usage}%,请清理" >> /var/log/gitea-health.log
fi四、常见问题
Q:升级后 Gitea 打不开了怎么办?
别慌,恢复备份:
# 如果脚本自动备份了
cp /tmp/gitea_backup_*/gitea_backup /usr/local/bin/gitea
systemctl restart gitea
# 或者把之前备份的旧版二进制文件复制回去Q:升级后代码仓库会丢吗?
不会。 Gitea 的仓库数据存在 /home/git/gitea-repositories/ 目录下,升级只是替换二进制文件,不影响仓库数据。但是不怕一万就怕万一,升级前还是建议备份。
Q:多久升级一次?
建议 每个月检查一次。Gitea 平均每 1-2 个月发一个版本。
可以设置定时任务每月检查:
# 每月 1 号凌晨 2 点检查更新
0 2 1 * * /root/gitea-upgrade.sh >> /var/log/gitea-upgrade.log 2>&1Q:版本跨度太大能直接升级吗?
可以,Gitea 的升级兼容性做得很好。不过如果你是从很老的版本(比如 1.15 以下)跳到最新版,建议先看看版本发布说明(Release Notes),确认有没有破坏性变更。
写在最后
Gitea 的维护其实很简单,总结下来就是三件事:
- 定期备份(每周自动一次)
- 按月升级(用脚本一键搞定)
- 日常巡检(看看日志和磁盘)
做完这三件事,你的 Gitea 就能稳定运行好几年。仓库里的代码是你最宝贵的资产,花 5 分钟做一下备份,比出问题再想对策靠谱得多。
下一篇文章会讲 Gitea Actions 自动化 CI/CD,可以期待一下!
版权声明:本文为原创文章,版权归 放飞的流星 所有,转载请联系博主获得授权。
本文地址:https://ay.lc/h/Gitea.html
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。