gitea二进制部署最可控、依赖最少,适合生产环境:创建git用户→下载二进制→设权限→建目录→配systemd服务→填app.ini→访问http://ip:3000完成web初始化。

gitea 不是必须用 Docker 才能跑起来的“黑盒”,二进制方式最可控、依赖最少,适合生产环境长期维护。直接下载可执行文件 + systemd 托管,5 分钟内就能让 http://your-server:3000 正常访问,且后续升级、调试、日志排查都更透明。
为什么别急着用 docker run -d gitea/gitea
这个命令确实能“秒启”,但容易踩三个坑:
• 容器退出后配置全丢(没挂载 /data 或 app.ini);
• 端口冲突时提示模糊(比如 port already in use,但你可能忘了宿主机的 nginx 已占 3000);
• docker exec -it 进容器改配置后,重启容器又还原——因为没把 custom/conf/app.ini 映射出来。
真正省事的不是“一键运行”,而是“一次配对,永久生效”。二进制 + systemd 就是这么干的。
gitea web 启动失败常见报错和对应解法
运行 ./gitea web 报错,优先看这三类:
-
failed to open database: no such file or directory→ 没建/home/git/data目录,或app.ini里PATH指向了不存在路径 -
listen tcp :3000: bind: address already in use→ 先sudo ss -tulpn | grep :3000查谁在占端口,不是所有服务都叫gitea -
permission denied(在/home/git/custom下)→ 确保git用户对整个/home/git有读写权限,别只 chmod 了某一层
建议启动前先手动执行一次:sudo -u git -H /home/git/gitea web -c /home/git/custom/conf/app.ini -p 3000,带完整参数,错误信息更准。
systemd 服务文件里最关键的三处配置
别直接抄模板,这几项不调好,systemctl start gitea 会静默失败:
-
User=git和Group=git必须与创建用户一致,不能写成root(否则数据目录权限错乱) -
WorkingDirectory=/home/git必须存在且属主为git,否则gitea找不到默认custom和data -
Environment=HOME=/home/git缺失会导致gitea读不到~/.ssh,SSH 克隆仓库失败(报Permission denied (publickey))
验证服务是否真跑起来了:sudo systemctl status gitea 看 Active 状态,再 sudo journalctl -u gitea -n 20 -f 实时盯日志输出,比反复刷网页靠谱得多。
第一次访问 http://IP:3000 前必须确认的两件事
Web 初始化页面看似简单,但填错就等于重装:
- 数据库类型选
SQLite3的话,Path必须填绝对路径,例如/home/git/data/gitea.db,不能写相对路径或漏掉.db后缀 - 域名(
DOMAIN)别填localhost或127.0.0.1——哪怕你在本机测试,也得填服务器真实 IP 或已解析的域名,否则生成的 SSH URL(如git@localhost:xxx/yyy.git)克隆时根本连不上
填完点「立即安装」后,如果页面卡住或跳回首页,大概率是 app.ini 被自动生成但权限不对,立刻检查 /home/git/custom/conf/app.ini 是否属主为 git、权限为 644。
gitea 默认不自动备份数据库,也不轮转日志,上线第一天就得把 sqlite3 /home/git/data/gitea.db .dump 加进 cron,否则哪天磁盘爆了,连恢复点都没有。











