Gitea 服务器搭建:如何在公司服务器搭建 Gitea 环境实现代码仓库私有化托管
在当今软件开发高速迭代的时代,企业对「私有化代码仓库托管」的需求愈发迫切。通过在公司服务器部署 Gitea,不仅可以实现“Git 私有化托管”与“代码安全隔离”,还能够结合 CI/CD 流水线快速交付,彻底摆脱公有云成本与权限风控的双重烦恼。本教程将手把手教您在 Ubuntu 20.04 环境下,完成从服务器准备、依赖安装到域名配置、SSL 加密、自动化运维的一整套 “Gitea 服务器搭建” 方案,确保您能够快速上手 “Gitea 安装教程” 并实现“企业级 Git 自托管”最佳实践。
本文详细介绍在公司服务器上从零开始部署 Gitea 服务的全流程。全程使用 Ubuntu 20.04 LTS 作为示例操作系统,其他 Linux 发行版亦可参照操作。
作者✍️
猫头虎微信号:Libin9iOak
公众号:猫头虎技术团队
万粉变现经纪人:CSDNWF
目录
- 前置准备
- 安装依赖
- 创建 Gitea 系统用户与目录
- 下载与安装 Gitea 二进制
- 配置数据库
- 配置 Gitea 应用
- 设置 systemd 服务
- 防火墙与域名、SSL 配置
- 首次启动与初始化
- 安全加固与备份
- 常见问题与排查
前置准备
- 一台干净的 Ubuntu 20.04 LTS 服务器,至少 2 GB 内存、20 GB 磁盘空间。
- 拥有
sudo
权限的用户。 - 已绑定并解析好域名(如
git.example.com
)指向本机 IP。 - 公司网络允许对 HTTP(80)和 HTTPS(443)端口访问。1
安装依赖
-
更新系统包列表并安装基础工具:
sudo apt update sudo apt install -y git curl wget vim ufw
-
安装数据库:
- 推荐使用 MariaDB(也可选择 MySQL、PostgreSQL)。
sudo apt install -y mariadb-server sudo systemctl enable --now mariadb
-
安装 certbot(用于后续 SSL):
sudo apt install -y certbot
创建 Gitea 系统用户与目录
为了安全隔离,建议单独为 Gitea 创建系统用户:
sudo adduser \
--system \
--shell /bin/bash \
--gecos 'Gitea git user' \
--group \
--disabled-password \
--home /home/git \
git
创建存放 Git 仓库及配置的目录,并赋予权限:
sudo mkdir -p /var/lib/gitea/{custom,data,log}
sudo chown -R git:git /var/lib/gitea
sudo chmod -R 750 /var/lib/gitea
sudo mkdir /etc/gitea
sudo chown root:git /etc/gitea
sudo chmod 770 /etc/gitea
下载与安装 Gitea 二进制
-
切换至临时目录:
cd /tmp
-
拉取最新版 Gitea(参考 官方下载页面):
wget -O gitea https://dl.gitea.io/gitea/1.20.2/gitea-1.20.2-linux-amd64
-
安装至系统可执行路径:
sudo mv gitea /usr/local/bin/gitea sudo chmod +x /usr/local/bin/gitea
-
验证:
gitea --version
若能正确输出版本号,则安装成功。
配置数据库
-
登录 MariaDB:
sudo mysql
-
创建数据库与专用用户:
CREATE DATABASE gitea CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER 'gitea'@'localhost' IDENTIFIED BY '你的安全密码'; GRANT ALL PRIVILEGES ON gitea.* TO 'gitea'@'localhost'; FLUSH PRIVILEGES; EXIT;
-
记录下数据库名称、用户名与密码,后续 Gitea 安装时需要使用。
配置 Gitea 应用
在 /etc/gitea/app.ini
中添加基础配置:
[database]
DB_TYPE = mysql
HOST = 127.0.0.1:3306
NAME = gitea
USER = gitea
PASSWD = 你的安全密码
SSL_MODE = disable
[server]
DOMAIN = git.example.com
HTTP_PORT = 3000
ROOT_URL = https://git.example.com/
DISABLE_SSH = false
SSH_PORT = 22
LFS_START_SERVER = true
LFS_CONTENT_PATH = /var/lib/gitea/data/lfs
[security]
INSTALL_LOCK = true
SECRET_KEY = 一个随机长密钥,使用 `openssl rand -hex 16` 生成
[log]
MODE = file
LEVEL = Info
ROOT_PATH = /var/lib/gitea/log
确保文件属主为 root:git
并且权限为 660
:
sudo chown root:git /etc/gitea/app.ini
sudo chmod 660 /etc/gitea/app.ini
设置 systemd 服务
创建 /etc/systemd/system/gitea.service
:
[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
After=mariadb.service
[Service]
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
[Install]
WantedBy=multi-user.target
使能并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable --now gitea
sudo systemctl status gitea
防火墙与域名、SSL 配置
-
开启 UFW 并允许常用端口:
sudo ufw allow OpenSSH sudo ufw allow 3000/tcp sudo ufw enable
-
使用 certbot 获取并自动续期免费 SSL:
sudo certbot certonly --standalone -d git.example.com
-
在 Nginx 或 Apache 中反向代理 Gitea,并配置 SSL。例如,Nginx 配置片段:
server { listen 80; server_name git.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name git.example.com; ssl_certificate /etc/letsencrypt/live/git.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/git.example.com/privkey.pem; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; } }
首次启动与初始化
-
在浏览器中访问
https://git.example.com
。 -
在安装向导中填写:
- Database Settings:与前面创建的数据库信息一致。
- Application General Settings:站点标题、管理员账号(如
admin
)、邮箱、密码。 - Server and SSH Settings:确保 SSH 模块开启,SSH 端口为 22。
-
点击“Install Gitea”完成初始化。
安全加固与备份
-
更换默认端口:将 SSH 服务端口改为非 22 端口,修改
/etc/ssh/sshd_config
并重启。 -
开启 Fail2Ban:安装并配置防爆破:
sudo apt install -y fail2ban
-
定期备份:
-
数据库:
mysqldump -u gitea -p gitea > /backup/gitea-db-$(date +%F).sql
-
仓库文件:
tar czvf /backup/gitea-repos-$(date +%F).tar.gz /var/lib/gitea/data
-
考虑使用
cron
自动化。
-
常见问题与排查
-
Gitea 无法启动?
- 查看日志:
sudo journalctl -u gitea -f
- 检查
app.ini
配置文件格式与权限。
- 查看日志:
-
SSH 克隆报错
Permission denied
?- 确认服务器 SSH 配置允许 git 用户登录。
- 检查
git
用户家目录.ssh/authorized_keys
是否存在并正确。
-
SSL 证书续期失败?
- 手动执行:
sudo certbot renew --dry-run
,根据报错信息排查。
- 手动执行:
作者✍️ 猫头虎微信号:Libin9iOak; 公众号:猫头虎技术团队; 万粉变现经纪人:CSDNWF ↩︎