当前位置:首页 >> 主机教程
简介 云服务器 自建服务器 想要一个轻量、私有、可自托管的 Git 代码托管服务(类似 GitHub,但在自己可控的网络中)?本篇教你用 Gitea + Docker Compose 在 30 分钟内完成搭建、创建用户与仓库、启用 SSH 推送与备份策略。适合个人、家庭实验室或小型团队。 适用对象程序员、DevOps 或喜欢自托管的读者有一台

云服务器 自建服务器

想要一个轻量、私有、可自托管的 Git 代码托管服务(类似 GitHub,但在自己可控的网络中)?本篇教你用 Gitea + Docker Compose 在 30 分钟内完成搭建、创建用户与仓库、启用 SSH 推送与备份策略。适合个人、家庭实验室或小型团队。

适用对象

程序员、DevOps 或喜欢自托管的读者有一台常开主机(Linux 服务器、树莓派、或 Windows 11 + WSL2)希望独立控制代码、私有化托管或做团队协作

核心优点(几句卖点)

轻量:Gitea 资源占用低,树莓派可跑易部署:Docker + Compose 一键启动功能齐全:仓库管理、Issue、PR、代码审查、Web UI、LDAP/SMTP 可扩展完全可控:私有网络、数据自备份

环境准备(5 分钟)

一台能运行 Docker 的主机(Linux / WSL2 / 树莓派)已安装 Docker 与 docker-compose(若无,请先安装)有 2GB 以上可用内存推荐,80MB+ 空闲磁盘(随仓库增长)

一步步部署(Docker Compose,推荐)

在主机上创建目录并进入:

mkdir -p ~/gitea/{data,config,logs}

cd ~/gitea

创建 docker-compose.yml(复制粘贴即可):

version: "3.8"

services:

db:

image: mysql:8.0

container_name: gitea_mysql

restart: unless-stopped

environment:

MYSQL_ROOT_PASSWORD: gitea_root_pw 请替换为强密码

MYSQL_DATABASE: gitea

MYSQL_USER: gitea

MYSQL_PASSWORD: gitea_pw 请替换为强密码

volumes:

- ./data/mysql:/var/lib/mysql

阿里云服务器根目录

networks:

- gitea_net

gitea:

image: gitea/gitea:latest

container_name: gitea

depends_on:

- db

restart: unless-stopped

environment:

USER_UID: 1000

USER_GID: 1000

DB_TYPE: mysql

DB_HOST: db:3306

DB_NAME: gitea

DB_USER: gitea

DB_PASSWD: gitea_pw

volumes:

- ./data/gitea:/data

- ./logs:/var/log/gitea

ports:

- "3000:3000" Web 界面

- "2222:22" SSH(映射到宿主机 2222)

云服务器 ddos

networks:

- gitea_net

networks:

gitea_net:

driver: bridge

提示:把 gitea_root_pw 和 gitea_pw 替换为你自己的强密码;若在生产或公网使用,建议把 3000 反代到域名并启用 HTTPS(可使用 Traefik 或 Nginx + Certbot)。

启动服务:

docker-compose up -d

访问安装向导在浏览器打开:http://<主机内网IP>:3000首次会进入 Gitea 的安装页面,按提示填写数据库(MySQL)、管理员账号等:Database Type: MySQLHost: db:3306User: giteaPassword: 你在 Compose 中设置的 gitea_pwDatabase Name: gitea

完成后点击安装。

配置 SSH 推送(本地测试)

默认容器将 SSH 服务映射到宿主机的 2222 端口(上面 Compose 配置)。在本地机器上把仓库的 SSH 地址格式改为:

ssh://git@<主机IP>:2222/用户名/仓库名.git

若要通过 SSH 推送,请在客户端生成 SSH key(若还没有):

ssh-keygen -t ed25519 -C "your_email@example.com"

然后在 Gitea Web 界面登录 → Settings → SSH / GPG Keys → 添加公钥(~/.ssh/id_ed25519.pub 内容)。

测试连接(示例端口 2222):

ssh -p 2222 git@<主机IP>

首次连接会提示 "PTY allocation request failed" 或提示没有 shell,这属于正常(Gitea 的 SSH 框架)。

克隆仓库举例:

git clone ssh://git@<主机IP>:2222/youruser/yourrepo.git

备份策略(简单可复现)

把 ./data/gitea 与 ./data/mysql 目录按计划备份到外部存储(NAS、外接硬盘或云盘)。

示例每晚备份脚本(crontab):

/usr/local/bin/gitea-backup.sh

!/bin/bash

DATE=$(date +%F)

BACKUP_DIR="/backups/gitea/$DATE"

mkdir -p "$BACKUP_DIR"

停止服务(可选:也可在线备份)

docker-compose -f /home/youruser/gitea/docker-compose.yml down

tar czf "$BACKUP_DIR/gitea_data.tar.gz" -C /home/youruser/gitea data

tar czf "$BACKUP_DIR/mysql_data.tar.gz" -C /home/youruser/gitea data/mysql

docker-compose -f /home/youruser/gitea/docker-compose.yml up -d

可再上传到远程存储或删除旧备份

将脚本加入 crontab(每日 03:00):

0 3 * * * /usr/local/bin/gitea-backup.sh

进阶建议(提升可用性与安全)

启用 HTTPS:把 Web 服务反代到域名并使用 Let’s Encrypt 获取证书(推荐使用 Nginx 或 Traefik)。限制公网访问:如果不用公网访问,只在内网端口开放,或通过 VPN 访问。强制双因素认证(2FA):启用可提高安全性(Gitea 支持 TOTP)。LDAP/SSO 集成:团队用户较多时考虑集成公司认证。监控与日志:把 logs 目录挂到宿主机并结合 Prometheus/ELK 做日志/指标收集(视需要)。

常见问题与排查小贴士

容器无法启动:docker-compose logs gitea / docker-compose logs db 查看错误信息(常见为数据库密码错误或端口占用)。SSH 连接失败:确认宿主机防火墙已放行 2222 端口:sudo ufw allow 2222/tcp;并确认映射端口正确。页面报 500 或数据库错误:检查 MySQL 容器是否已完全就绪,若未就绪手动重试安装或等待 MySQL 初始化完成后再访问安装向导。仓库权限问题:检查仓库所属用户、组织与访问权限设置。

小技巧(增加文章吸引力)

含实操截图(安装向导、创建仓库、SSH Key 页面)能显著提升阅读体验与停留时间。给出「一键恢复」步骤,减少读者部署恐惧。提供常用 Git Hook 或 CI 示例(如简单的 pre-receive 钩子)可吸引开发者读者。

结语(呼吁行动)

通过本文步骤,你可以在 30 分钟内把私有 Git 服务器搭起来,保护自己的代码并实现私有协作。

如果你愿意,我可以把 docker-compose.yml 调整为:

适配树莓派(ARM 镜像)或加入 Nginx 反代 + Let’s Encrypt 自动签发配置告诉我你的主机类型与是否需要公网访问,我直接给出可复制的配置。

阿里云服务器删除