Gitea 服务器搭建:如何在公司服务器搭建 Gitea 环境实现代码仓库私有化托管

Gitea 服务器搭建:如何在公司服务器搭建 Gitea 环境实现代码仓库私有化托管

在当今软件开发高速迭代的时代,企业对「私有化代码仓库托管」的需求愈发迫切。通过在公司服务器部署 Gitea,不仅可以实现"Git 私有化托管"与"代码安全隔离",还能够结合 CI/CD 流水线快速交付,彻底摆脱公有云成本与权限风控的双重烦恼。本教程将手把手教您在 Ubuntu 20.04 环境下,完成从服务器准备、依赖安装到域名配置、SSL 加密、自动化运维的一整套 "Gitea 服务器搭建" 方案,确保您能够快速上手 "Gitea 安装教程" 并实现"企业级 Git 自托管"最佳实践。

本文详细介绍在公司服务器上从零开始部署 Gitea 服务的全流程。全程使用 Ubuntu 20.04 LTS 作为示例操作系统,其他 Linux 发行版亦可参照操作。

作者✍️

猫头虎微信号:Libin9iOak

公众号:猫头虎技术团队

万粉变现经纪人:CSDNWF



目录

  1. 前置准备
  2. 安装依赖
  3. [创建 Gitea 系统用户与目录](#创建 Gitea 系统用户与目录)
  4. [下载与安装 Gitea 二进制](#下载与安装 Gitea 二进制)
  5. 配置数据库
  6. [配置 Gitea 应用](#配置 Gitea 应用)
  7. [设置 systemd 服务](#设置 systemd 服务)
  8. [防火墙与域名、SSL 配置](#防火墙与域名、SSL 配置)
  9. 首次启动与初始化
  10. 安全加固与备份
  11. 常见问题与排查

前置准备

  • 一台干净的 Ubuntu 20.04 LTS 服务器,至少 2 GB 内存、20 GB 磁盘空间。
  • 拥有 sudo 权限的用户。
  • 已绑定并解析好域名(如 git.example.com)指向本机 IP。
  • 公司网络允许对 HTTP(80)和 HTTPS(443)端口访问。[1](#1)

安装依赖

  1. 更新系统包列表并安装基础工具:

    bash 复制代码
    sudo apt update
    sudo apt install -y git curl wget vim ufw
  2. 安装数据库:

    • 推荐使用 MariaDB(也可选择 MySQL、PostgreSQL)。
    bash 复制代码
    sudo apt install -y mariadb-server
    sudo systemctl enable --now mariadb
  3. 安装 certbot(用于后续 SSL):

    bash 复制代码
    sudo apt install -y certbot

创建 Gitea 系统用户与目录

为了安全隔离,建议单独为 Gitea 创建系统用户:

bash 复制代码
sudo adduser \
   --system \
   --shell /bin/bash \
   --gecos 'Gitea git user' \
   --group \
   --disabled-password \
   --home /home/git \
   git

创建存放 Git 仓库及配置的目录,并赋予权限:

bash 复制代码
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 二进制

  1. 切换至临时目录:

    bash 复制代码
    cd /tmp
  2. 拉取最新版 Gitea(参考 官方下载页面):

    bash 复制代码
    wget -O gitea https://dl.gitea.io/gitea/1.20.2/gitea-1.20.2-linux-amd64
  3. 安装至系统可执行路径:

    bash 复制代码
    sudo mv gitea /usr/local/bin/gitea
    sudo chmod +x /usr/local/bin/gitea
  4. 验证:

    bash 复制代码
    gitea --version

    若能正确输出版本号,则安装成功。


配置数据库

  1. 登录 MariaDB:

    bash 复制代码
    sudo mysql
  2. 创建数据库与专用用户:

    sql 复制代码
    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;
  3. 记录下数据库名称、用户名与密码,后续 Gitea 安装时需要使用。


配置 Gitea 应用

/etc/gitea/app.ini 中添加基础配置:

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

bash 复制代码
sudo chown root:git /etc/gitea/app.ini
sudo chmod 660 /etc/gitea/app.ini

设置 systemd 服务

创建 /etc/systemd/system/gitea.service

ini 复制代码
[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

使能并启动服务:

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl enable --now gitea
sudo systemctl status gitea

防火墙与域名、SSL 配置

  1. 开启 UFW 并允许常用端口:

    bash 复制代码
    sudo ufw allow OpenSSH
    sudo ufw allow 3000/tcp
    sudo ufw enable
  2. 使用 certbot 获取并自动续期免费 SSL:

    bash 复制代码
    sudo certbot certonly --standalone -d git.example.com
  3. 在 Nginx 或 Apache 中反向代理 Gitea,并配置 SSL。例如,Nginx 配置片段:

    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;
        }
    }

首次启动与初始化

  1. 在浏览器中访问 https://git.example.com

  2. 在安装向导中填写:

    • Database Settings:与前面创建的数据库信息一致。
    • Application General Settings :站点标题、管理员账号(如 admin )、邮箱、密码。
    • Server and SSH Settings:确保 SSH 模块开启,SSH 端口为 22。
  3. 点击"Install Gitea"完成初始化。


安全加固与备份

  1. 更换默认端口 :将 SSH 服务端口改为非 22 端口,修改 /etc/ssh/sshd_config 并重启。

  2. 开启 Fail2Ban:安装并配置防爆破:

    bash 复制代码
    sudo apt install -y fail2ban
  3. 定期备份

    • 数据库:

      bash 复制代码
      mysqldump -u gitea -p gitea > /backup/gitea-db-$(date +%F).sql
    • 仓库文件:

      bash 复制代码
      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,根据报错信息排查。

  1. 作者✍️ 猫头虎微信号:Libin9iOak; 公众号:猫头虎技术团队; 万粉变现经纪人:CSDNWF ↩︎
相关推荐
安科士andxe8 小时前
深入解析|安科士1.25G CWDM SFP光模块核心技术,破解中长距离传输痛点
服务器·网络·5g
mCell9 小时前
如何零成本搭建个人站点
前端·程序员·github
恋猫de小郭10 小时前
AI 在提高你工作效率的同时,也一直在增加你的疲惫和焦虑
前端·人工智能·ai编程
2601_9491465311 小时前
Shell语音通知接口使用指南:运维自动化中的语音告警集成方案
运维·自动化
儒雅的晴天11 小时前
大模型幻觉问题
运维·服务器
Gofarlic_OMS12 小时前
科学计算领域MATLAB许可证管理工具对比推荐
运维·开发语言·算法·matlab·自动化
通信大师12 小时前
深度解析PCC策略计费控制:核心网产品与应用价值
运维·服务器·网络·5g
dixiuapp12 小时前
智能工单系统如何选,实现自动化与预测性维护
运维·自动化
Elastic 中国社区官方博客12 小时前
如何防御你的 RAG 系统免受上下文投毒攻击
大数据·运维·人工智能·elasticsearch·搜索引擎·ai·全文检索
小锋学长生活大爆炸12 小时前
【教程】免Root在Termux上安装Docker
运维·docker·容器