常见SEO云主机和云服务器区别一键上手:30分钟用Docker在本地搭建私有Git代码服务器(Gitea)
云服务器 自建服务器
想要一个轻量、私有、可自托管的 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 自动签发配置告诉我你的主机类型与是否需要公网访问,我直接给出可复制的配置。阿里云服务器删除
推荐阅读
- 云服务 租服务器创梦天地再次上市,曾发行《纪念碑谷》及《神庙逃亡》,腾讯是最大机构股东 2025-12-17 05:12:24
- 广东云媒体服务器多快好省天地超云全新服务器打造高效数据中心 2025-12-17 05:02:21
- 阿里轻云服务器用户强烈推荐的企业邮箱:高效办公首选 2025-12-17 04:52:15
- 阿里云服务器 带宽西北山洞里的阿里云计算 2025-12-17 04:42:12
- 云服务器问题阿里云被集成,助力数字政府新实践 2025-12-17 04:32:09

