# 自建企业级代码托管平台:Gitea 深度部署与配置指南

自建企业级代码托管平台:Gitea 深度部署与配置指南

引言

在当今的软件开发领域,代码托管平台已成为团队协作不可或缺的基础设施。虽然 GitHub、GitLab 等公有云服务提供了强大的功能,但出于数据安全、成本控制和定制化需求,越来越多的企业和团队选择自建代码托管平台。Gitea 作为一款轻量级、高性能的 Git 服务,凭借其简洁的设计和出色的性能,成为了自建代码托管平台的热门选择。

本文将深入探讨 Gitea 的部署、配置和优化,提供从零开始搭建企业级代码托管平台的完整解决方案。

一、Gitea 核心优势与架构解析

1.1 为什么选择 Gitea?

Gitea 是用 Go 语言编写的开源 Git 服务,具有以下显著优势:

  • 资源占用极低:单核 CPU、512MB 内存即可流畅运行
  • 部署简单:提供二进制包、Docker 镜像等多种部署方式
  • 功能完整:支持 Issues、Pull Requests、Webhooks、CI/CD 等企业级功能
  • 高度可定制:丰富的配置选项和扩展机制
  • 活跃的社区:持续的更新和维护,良好的文档支持

1.2 Gitea 架构概览

Gitea 采用模块化设计,主要包含以下组件:

  • Web 服务器(基于 Go 的 HTTP 服务)
  • Git HTTP/SSH 服务
  • 数据库层(支持 SQLite、MySQL、PostgreSQL)
  • 存储层(本地存储或对象存储)
  • 缓存层(支持 Redis、Memcached)

👋 二、环境准备与系统要求

2.1 硬件要求

  • 最低配置:1 核 CPU,512MB 内存,10GB 存储
  • 推荐配置:2 核 CPU,2GB 内存,50GB+ 存储(根据团队规模调整)
  • 生产环境建议:4 核 CPU,4GB 内存,SSD 存储

2.2 软件环境

本文以 Ubuntu 22.04 LTS 为例,其他 Linux 发行版可相应调整:

1
2
3
4
5
6
7
8
9
10
11
# 更新系统包
sudo apt update && sudo apt upgrade -y

# 安装基础依赖
sudo apt install -y curl wget git nginx supervisor

# 安装数据库(以 PostgreSQL 为例)
sudo apt install -y postgresql postgresql-contrib

# 安装 Redis(用于缓存和会话)
sudo apt install -y redis-server

💡 三、Gitea 部署实战

3.1 数据库配置

1
2
3
4
5
6
7
8
9
10
11
12
# 切换到 postgres 用户
sudo -i -u postgres

# 创建 Gitea 数据库用户
createuser --pwprompt gitea
# 输入密码:YourSecurePassword123

# 创建数据库
createdb -O gitea giteadb

# 退出 postgres 用户
exit

3.2 创建系统用户

1
2
3
4
5
6
7
8
9
# 创建 gitea 系统用户
sudo adduser \
--system \
--shell /bin/bash \
--gecos 'Git Version Control' \
--group \
--disabled-password \
--home /home/gitea \
gitea

3.3 下载并安装 Gitea

1
2
3
4
5
6
7
8
9
10
11
12
13
# 切换到 gitea 用户
sudo su - gitea

# 创建应用目录
mkdir -p /home/gitea/{gitea,custom,data,logs}

# 下载最新版 Gitea(请访问官网获取最新版本号)
cd /home/gitea
wget -O gitea https://dl.gitea.io/gitea/1.21.0/gitea-1.21.0-linux-amd64
chmod +x gitea

# 测试运行
./gitea --version

3.4 配置 systemd 服务

创建服务文件 /etc/systemd/system/gitea.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
After=postgresql.service
After=redis-server.service

[Service]
RestartSec=2s
Type=simple
User=gitea
Group=gitea
WorkingDirectory=/home/gitea
ExecStart=/home/gitea/gitea web --config /home/gitea/app.ini
Restart=always
Environment=USER=gitea HOME=/home/gitea

[Install]
WantedBy=multi-user.target

启用并启动服务:

1
2
3
sudo systemctl daemon-reload
sudo systemctl enable gitea
sudo systemctl start gitea

四、Gitea 详细配置

4.1 初始 Web 配置

访问 http://your-server-ip:3000 完成初始配置:

  1. 数据库设置

    • 数据库类型:PostgreSQL
    • 主机:localhost:5432
    • 数据库名:giteadb
    • 用户名:gitea
    • 密码:YourSecurePassword123
  2. 常规设置

    • 站点标题:公司代码托管平台
    • 仓库根目录:/home/gitea/data/gitea-repositories
    • LFS 根目录:/home/gitea/data/gitea-lfs
    • 运行用户:gitea
    • SSH 服务器域名:git.yourcompany.com
    • SSH 端口:22(或自定义端口)
  3. 管理员账户

    • 设置管理员账号和密码

4.2 配置文件详解

Gitea 的主要配置文件位于 /home/gitea/app.ini,以下为关键配置项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
APP_NAME = 公司代码托管平台
RUN_USER = gitea
RUN_MODE = prod

[server]
APP_DATA_PATH = /home/gitea/data
HTTP_PORT = 3000
ROOT_URL = https://git.yourcompany.com/
DISABLE_SSH = false
SSH_PORT = 22
SSH_LISTEN_PORT = 22
DOMAIN = git.yourcompany.com
SSH_DOMAIN = git.yourcompany.com
LFS_START_SERVER = true
LFS_CONTENT_PATH = /home/gitea/data/gitea-lfs

[database]
DB_TYPE = postgres
HOST = localhost:5432
NAME = giteadb
USER = gitea
PASSWD = YourSecurePassword123
SSL_MODE = disable

[repository]
ROOT = /home/gitea/data/gitea-repositories

[session]
PROVIDER = redis
PROVIDER_CONFIG = network=tcp,addr=127.0.0.1:6379,password=,db=0

[picture]
AVATAR_UPLOAD_PATH = /home/gitea/data/avatars

[attachment]
PATH = /home/gitea/data/attachments

[log]
ROOT_PATH = /home/gitea/logs
MODE = file
LEVEL = Info

[security]
INSTALL_LOCK = true
SECRET_KEY = your-secret-key-here
INTERNAL_TOKEN = your-internal-token-here

4.3 Nginx 反向代理配置

创建 Nginx 配置文件 /etc/nginx/sites-available/gitea

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
server {
listen 80;
server_name git.yourcompany.com;
return 301 https://$server_name$request_uri;
}

server {
listen 443 ssl http2;
server_name git.yourcompany.com;

# SSL 配置(使用 Let's Encrypt 证书)
ssl_certificate /etc/letsencrypt/live/git.yourcompany.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/git.yourcompany.com/privkey.pem;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
ssl_prefer_server_ciphers off;

# 安全头部
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

client_max_body_size 100M;

location / {
proxy_pass http://127.0.0.1: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;
proxy_set_header X-Forwarded-Proto $scheme;
}

# 静态文件缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
proxy_pass http://127.0.0.1:3000;
}
}

启用配置并重启 Nginx:

1
2
3
sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

五、高级功能配置

5.1 邮件通知配置

1
2
3
4
5
6
[mailer]
ENABLED = true
FROM = [email protected]
HOST = smtp.yourcompany.com:587
USER = [email protected]
PASSWD = your-smtp-password

5.2 集成 CI/CD(使用 Drone)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# .drone.yml 示例
kind: pipeline
type: docker
name: default

steps:
- name: test
image: golang:1.21
commands:
- go test ./...

- name: build
image: golang:1.21
commands:
- go build -o app .

- name: docker
image: plugins/docker
settings:
repo: yourcompany/app
tags: latest
username:
from_secret: docker_username
password:
from_secret: docker_password

5.3 备份策略

创建备份脚本 /home/gitea/backup.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash
BACKUP_DIR="/home/gitea/backups"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/gitea_backup_$DATE.zip"

# 创建备份目录
mkdir -p $BACKUP_DIR

# 停止 Gitea 服务
sudo systemctl stop gitea

# 执行备份
cd /home/gitea
./gitea dump \
--config app.ini \
--file $BACKUP_FILE \
--type zip

# 启动 Gitea 服务
sudo systemctl start gitea

# 保留最近 7 天的备份
find $BACKUP_DIR -name "gitea_backup_*.zip" -mtime +7 -delete

# 上传到远程存储(可选)
# rclone copy $BACKUP_FILE remote:gitea-backups/

设置定时任务:

1
2
# 每天凌晨 2 点执行备份
0 2 * * * /home/gitea/backup.sh

六、性能优化与监控

6.1 数据库优化

1
2
3
4
-- PostgreSQL 性能优化
ALTER DATABASE giteadb SET effective_cache_size = '4GB';
ALTER DATABASE giteadb SET shared_buffers = '1GB';
ALTER DATABASE giteadb SET work_mem = '16MB';

6.2 Gitea 性能调优

1
2
3
4
5
6
7
8
9
10
11
12
[queue]
TYPE = redis
CONN_STR = network=tcp,addr=127.0.0.1:6379,password=,db=0
LENGTH = 1000

[cache]
ADAPTER = redis
HOST = network=tcp,addr=127.0.0.1:6379,password=,db=1

[repository]
ENABLE_PUSH_CREATE_USER = true
ENABLE_PUSH_CREATE_ORG = true

6.3 监控配置

使用 Prometheus 监控 Gitea:

1
2
3
[metrics]
ENABLED = true
ENABLED_TOKEN = your-metrics-token

七、安全加固

7.1 SSH 安全配置

1
2
3
4
5
6
7
8
9
10
# 修改 SSH 端口
sudo nano /etc/ssh/sshd_config
# 修改 Port 22 为 Port 2222

# 禁用密码登录
PasswordAuthentication no
PubkeyAuthentication yes

# 重启 SSH 服务
sudo systemctl restart sshd

7.2 防火墙配置

1
2
3
4
5
6
7
# 配置 UFW 防火墙
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw enable

7.3 定期更新

1
2
3
4
5
6
7
8
9
# 创建更新脚本
#!/bin/bash
cd /home/gitea
wget -O gitea-new https://dl.gitea.io/gitea/latest/gitea-latest-linux-amd64
chmod +x gitea-new
sudo systemctl stop gitea
mv gitea gitea-old
mv gitea-new gitea
sudo systemctl start gitea

👋 八、故障排除

8.1 常见问题解决

  1. 服务无法启动

    1
    2
    3
    # 查看日志
    journalctl -u gitea -f
    sudo tail -f /home/gitea/log/gitea.log
  2. 数据库连接失败

    1
    2
    # 测试数据库连接
    sudo -u postgres psql -h localhost -U gitea -d giteadb
  3. 磁盘空间不足

    1
    2
    # 清理临时文件
    sudo find /home/gitea/data -name "*.tmp" -delete

✨ 结语

通过本文的详细指导,您已经成功搭建了一个功能完整、性能优异的企业级代码托管平台。Gitea 的轻量级特性使其特别适合中小型团队和资源有限的环境。随着团队规模的扩大,您可以根据需要进一步扩展架构,如添加负载均衡、分布式存储等。

自建代码托管平台不仅提供了数据自主权,还能根据团队特定需求进行深度定制。建议定期关注 Gitea 的版本更新,及时获取新功能和安全性修复,确保平台的稳定运行。

记住,良好的备份策略和监控体系是生产环境稳定运行的基石。祝您的团队在代码协作中取得更大的成功!

[up主专用,视频内嵌代码贴在这]