24 KiB
下面给出一套 在 CentOS 上使用 Docker 快速部署 Git 服务器 的完整思路与实操步骤。 你可以任选下面两种方案:
| 方案 | 适合场景 | 资源占用 | 主要功能 |
|---|---|---|---|
| Gitea(轻量) | 个人/小团队、需要 Web UI(代码浏览、Issue、PR) | < 1 GB RAM | 开箱即用的 Git 服务,界面友好,支持 LDAP/OAuth |
| GitLab CE(完整) | 大团队、需要 CI/CD、Wiki、容器 Registry 等完整功能 | 至少 4 GB RAM(推荐 8 GB+) | 功能最全,但资源消耗大 |
| 仅 SSH 裸仓库 | 只想通过 git clone ssh://... 访问、无 Web UI |
基本无额外资源 | 手动管理权限、最轻量 |
下面重点演示 Gitea(Docker Compose)+ Nginx 反向代理 + Let’s Encrypt HTTPS 的完整链路,兼顾易用性和安全。若你想直接跑 GitLab,请跳到章节 “2️⃣ 用 Docker 运行 GitLab CE”。
1️⃣ 前期准备(CentOS 7/8)
# 1. 安装 Docker(如果还没装)
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker && sudo systemctl enable docker
# 2. 安装 Docker Compose(推荐 v2.x,最新版请自行替换)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version # 看到版本号即成功
# 3. 防火墙 & SELinux(如果开启的话)
sudo firewall-cmd --permanent --add-service=http --add-service=https
sudo firewall-cmd --permanent --add-port=3000/tcp # Gitea Web
sudo firewall-cmd --permanent --add-port=2222/tcp # Gitea SSH(容器内部 22 映射到 2222)
sudo firewall-cmd --reload
# SELinux(可选,若遇到卷挂载权限问题请先设为 permissive)
sudo setenforce 0 # 测试阶段可直接关闭,生产环境请使用 chcon / semanage
提示:如果机器内存 < 1 GB,请选 仅 SSH 裸仓库(后文的方案三),否则 Gitea 也能跑,但建议先把系统 Swap 开启:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
2️⃣ 使用 Docker Compose 部署 Gitea
2.1 创建项目目录
sudo mkdir -p /data/gitea && cd /data/gitea
sudo chown -R $(id -u):$(id -g) /data/gitea # 让当前用户可写
2.2 编写 docker-compose.yml
说明:我们使用 PostgreSQL 作为 Gitea 的数据库(比 SQLite 更稳、适合长期运行)。如果只想单节点、磁盘空间有限,可以改用 SQLite(去掉
db服务并把DB_TYPE改成sqlite3),但建议使用 PostgreSQL。
# /data/gitea/docker-compose.yml
version: "3.8"
services:
gitea:
image: gitea/gitea:1.21 # 使用最新的 LTS 版
container_name: gitea
restart: always
environment:
- USER_UID=1000
- USER_GID=1000
# 下面三行是让 Gitea 知道它被放在什么端口(如果以后改 Nginx 反代,可保持不变)
- HTTP_PORT=3000
- SSH_PORT=2222
- DOMAIN=git.example.com
- ROOT_URL=https://git.example.com/
# 数据库配置
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=db:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=mqFUjbWzf7utWA
ports:
- "3000:3000"
- "2222:22"
volumes:
- ./gitea-data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
depends_on:
- db
networks:
- gitea-net
db:
image: postgres:15-alpine
restart: always
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=mqFUjbWzf7utWA
- POSTGRES_DB=gitea
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- gitea-net
networks:
gitea-net:
driver: bridge
volumes:
gitea-data:
postgres-data:
⚠️ 关键点
USER_UID/USER_GID必须与宿主机上运行 Docker 进程的用户对应(通常是1000),否则 Gitea 生成的仓库文件权限会报错。DOMAIN、ROOT_URL换成你自己的域名,后面 Nginx 反代时需要匹配。SSH_PORT=2222表示容器内部 SSH 监听在 22,而我们在ports里把它映射到宿主机的 2222(避免冲突本机 22 端口)。- 密码 一定要改成强密码,最好使用
openssl rand -base64 32生成随机字符串。
2.3 启动并检查
cd /data/gitea
docker-compose up -d # 后台启动
docker-compose logs -f gitea # 查看日志,出现 “HTTP Listen: :3000” 表示成功
第一次访问:打开浏览器,访问
http://<服务器IP>:3000,会看到 Gitea 的 安装向导(设置管理员账号、数据库、域名等),完成后即进入主页。
2.4 (可选)配置 Systemd 监控 Docker Compose
sudo tee /etc/systemd/system/gitea.service <<EOF
[Unit]
Description=Gitea Docker Compose
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/data/gitea
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
ExecReload=/usr/local/bin/docker-compose restart
User=${USER}
Group=${GROUP}
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable gitea.service
sudo systemctl start gitea.service
3️⃣ 配置 Nginx 反向代理 + HTTPS(Let’s Encrypt)
前置条件:已拥有域名
git.example.com,并在 DNS 处把git.example.comA 记录指向服务器 IP。
3.1 安装 Nginx 与 Certbot
sudo yum install -y epel-release
sudo yum install -y nginx certbot python3-certbot-nginx
3.2 创建 Nginx 配置
sudo tee /etc/nginx/conf.d/gitea.conf <<EOF
server {
listen 80;
server_name git.example.com;
# 重定向到 HTTPS
return 301 https://\$host\$request_uri;
}
server {
listen 443 ssl http2;
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;
# 安全头部
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
# 日志
access_log /var/log/nginx/gitea.access.log;
error_log /var/log/nginx/gitea.error.log;
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;
# WebSocket 支持(Gitea 的实时通知)
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection "upgrade";
}
}
EOF
3.3 启动 Nginx 并获取证书
sudo systemctl enable nginx && sudo systemctl start nginx
# 初次自动生成证书(Let’s Encrypt 会检查 80 端口是否可达)
sudo certbot --nginx -d git.example.com --agree-tos -m admin@example.com --non-interactive
证书自动续期:Certbot 已自带定时任务,可通过
systemctl status certbot renew.timer检查;亦可手动测试:sudo certbot renew --dry-run。
3.4 防火墙放行 80/443
sudo firewall-cmd --permanent --add-service=http --add-service=https
sudo firewall-cmd --reload
3.5 验证 HTTPS
在浏览器打开 https://git.example.com,应该能看到 Gitea 的登录页面,且浏览器地址栏显示绿色锁标。
4️⃣ 基本运维 & 安全加固
| 项目 | 操作建议 |
|---|---|
| 管理员账号 | 首次安装后立刻在 Gitea UI 创建管理员(不要使用默认的 root 或弱密码)。 |
| 强制 HTTPS | Gitea 配置 DISABLE_HTTP_GIT 为 true,确保 git clone 只能走 ssh:// 或 https://。 |
| SSH 密钥 | 所有开发者在 Gitea 个人设置里上传公钥,克隆时使用 git clone ssh://git@git.example.com:2222/<user>/<repo>.git。 |
| 邮件通知 | 在 gitea-data/gitea/conf/app.ini(或在 docker-compose.yml 中 GITEA__mailer__ 环境变量)配置 SMTP,使密码重置、PR/Issue 事件能收到邮件。 |
| 备份 | 定期把 gitea-data(仓库、数据库)tar.gz 备份到另一台机器。示例: tar czf /backup/gitea-$(date +%F).tar.gz -C /data/gitea gitea-data postgres-data |
| 升级 Gitea | docker-compose pull |
| 日志查看 | docker-compose logs -f --tail=200 |
| 资源限制 | 若机器内存紧张,可在 docker-compose.yml 中为服务添加 mem_limit、cpus 参数。 |
| 防火墙 | 只保留 22(宿主机 SSH) 2222(Gitea SSH) 80/443(Nginx) 端口,其他默认关闭。 |
5️⃣ 若想使用 GitLab CE(Docker)
注意:GitLab 官方镜像非常大(≥ 2 GB),首次启动需要 4‑8 GB RAM 才能正常运行。下面给出 最小化 配置示例,若机器资源不足请跳过此节。
5.1 docker-compose.yml(GitLab CE)
version: "3.8"
services:
gitlab:
image: gitlab/gitlab-ce:latest
hostname: git.example.com
restart: always
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://git.example.com'
nginx['enable'] = true
nginx['ssl_certificate'] = '/etc/gitlab/ssl/fullchain.pem'
nginx['ssl_certificate_key'] = '/etc/gitlab/ssl/privkey.pem'
# 最小资源限制(建议在实际部署时把下面两行删除,以使用默认资源)
unicorn['worker_processes'] = 2
sidekiq['concurrency'] = 2
ports:
- "22:22"
- "80:80"
- "443:443"
volumes:
- gitlab-config:/etc/gitlab
- gitlab-log:/var/log/gitlab
- gitlab-data:/var/opt/gitlab
shm_size: '256m' # 防止 GitLab 因为 /dev/shm 太小而崩溃
启动:
docker-compose up -d首次登录:访问https://git.example.com,系统会自动生成root初始密码(可在gitlab-config/gitlab-secrets.json里查看或自行重置)。
资源限制:GitLab 官方建议至少 4 GB RAM。若机器只有 2 GB,请改用 GitLab EE 官方轻量版(
gitlab/gitlab-ee:latest)或直接选 Gitea。
6️⃣ 仅用 SSH + 裸仓库(最轻量的“Git 服务器”)
如果不需要 Web UI,只想团队成员通过 ssh 拉取/推送代码,可直接在宿主机上创建裸仓库:
# 1. 创建 git 用户(可选)
sudo useradd -m -s /bin/bash git
sudo mkdir -p /home/git/repos
sudo chown -R git:git /home/git/repos
# 2. 创建裸仓库
sudo -u git git init --bare /home/git/repos/myproject.git
# 3. 配置 SSH(可选,使用密钥登录)
# 将成员的公钥添加到 /home/git/.ssh/authorized_keys
sudo mkdir -p /home/git/.ssh
sudo tee /home/git/.ssh/authorized_keys <<EOF
ssh-rsa AAAA....(成员的公钥)
EOF
sudo chmod 600 /home/git/.ssh/authorized_keys
sudo chown -R git:git /home/git/.ssh
# 4. 防火墙放行 22 端口(默认已开)
# 5. 客户端克隆
git clone git@your-server:/home/git/repos/myproject.git
优点:几乎不占用额外资源,适合对 安全 有严格控制、且不需要 Issue、PR 等功能的团队。 缺点:权限管理只能靠 SSH 密钥,缺乏可视化。
7️⃣ 小结
| 方案 | 适用人群 | 关键端口 | 资源需求 | Web UI |
|---|---|---|---|---|
| Gitea (Docker) | 想快速拥有完整 Git 服务(仓库浏览、Issue、PR、CI) | 3000/2222 → Nginx 80/443 | 1 GB RAM+(推荐 2 GB) | ✅ |
| GitLab CE (Docker) | 需要完整 DevOps 平台(CI/CD、容器 Registry、Wiki) | 22/80/443 | ≥ 4 GB RAM | ✅ |
| SSH + 裸仓库 | 极简团队、只做代码托管、无需 UI | 22 | 基本无 | ❌ |
推荐:如果是中小团队、机器配置一般(≤ 4 GB RAM),Gitea 是最佳平衡点;如果团队规模较大且需要 CI/CD、容器 Registry 等完整生态,GitLab CE 是不二之选;只想快速在内部共享代码且不想跑额外进程,SSH + 裸仓库 已足够。
祝你部署顺利 🚀!如果在实际操作中遇到 端口冲突、权限报错 或 证书问题,欢迎把错误日志贴出来,我可以帮你进一步排查。祝玩得开心 🎉.
git启动了,Nginx我也配置了,但是用浏览器访问时,页面显示:
400 Bad Request: malformed Host header
这个错误怎么解决
解决 Gitea 400 Bad Request: malformed Host header
这个错误通常是因为 Host 请求头 没有正确传递给 Gitea。修改 Nginx 配置即可:
解决方案
编辑 Nginx 配置文件:
sudo vim /etc/nginx/conf.d/gitea.conf
找到 proxy_set_header Host 那行,改成这样:
location / {
proxy_pass http://127.0.0.1:3000;
# 关键修改:用 $http_host 而不是 $host
proxy_set_header Host $http_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;
}
或者,如果你使用的是域名访问,也可以试试:
proxy_set_header Host git.example.com;
然后重载 Nginx
sudo nginx -t # 检查配置语法
sudo systemctl reload nginx
如果还不行,检查 Gitea 的 ROOT_URL
确保 docker-compose.yml 中的域名配置正确:
environment:
- ROOT_URL=https://git.example.com/ # 这里要和实际访问的域名一致
- DOMAIN=git.example.com
修改后重启 Gitea:
cd /data/gitea
docker-compose down
docker-compose up -d
常见原因总结
| 原因 | 解决方法 |
|---|---|
| Host header 丢失或错误 | proxy_set_header Host $http_host; |
| ROOT_URL 与实际访问域名不匹配 | 保持一致 |
| 使用了内网 IP 访问 | 改用域名或修改 ROOT_URL 为 IP 地址 |
重启后刷新浏览器缓存(Ctrl+Shift+R)再试试。
我已经进入了页面,页面中有个以用户名运行,默认是git,说明为:
输入 Gitea 运行的操作系统用户名。请注意,此用户必须具有对仓库根路径的访问权限。
git目录是/data/gitea,
仓库根目录是/data/git/repositories
我当前是用root创建启动的服务,我若想添加git这样的用户,应该怎么操作?
创建 git 用户并配置权限
步骤 1:创建 git 用户和用户组
# 创建 git 用户(如果不存在)
sudo useradd -m -s /bin/bash git
# 或者如果已经存在,确保其主目录正确
sudo mkdir -p /home/git
sudo chown -R git:git /home/git
步骤 2:创建仓库目录并授权
# 创建仓库根目录
sudo mkdir -p /data/git/repositories
# 授权给 git 用户
sudo chown -R git:git /data/git/repositories
# 同时确保 Gitea 数据目录也属于 git 用户(可选,因为数据目录在容器内映射)
sudo chown -R git:git /data/gitea/gitea-data
步骤 3:查看 git 用户的 UID 和 GID
id git
输出类似:
uid=1000(git) gid=1000(git) groups=1000(git)
记录下 uid 和 gid(通常是 1000)。
步骤 4:更新 docker-compose.yml
编辑 /data/gitea/docker-compose.yml:
environment:
- USER_UID=1000 # 改成 git 的 uid
- USER_GID=1000 # 改成 git 的 gid
- ROOT_URL=https://git.example.com/
- DOMAIN=git.example.com
步骤 5:重启 Gitea 服务
cd /data/gitea
docker-compose down
docker-compose up -d
验证权限
# 检查目录权限
ls -la /data/git/
输出应该类似:
drwxr-xr-x git git /data/git/repositories
填写 Gitea 安装向导
完成上述步骤后,在 Gitea 安装页面填写:
| 字段 | 值 |
|---|---|
| 域名 | git.example.com |
| 仓库根路径 | /data/git/repositories |
| 以用户名运行 | git |
然后继续完成安装即可。
现在进入了首次登录界面,我应该注册,还是登录,登录用户名、密码是什么?
Gitea 首次登录说明
情况判断
如果是安装向导页面(Setup Wizard)
页面应该显示数据库配置、管理员设置等内容:
- 选择"注册"或"安装" → 这里会创建第一个管理员账号
- 第一个注册的用户就是管理员
填写示例:
| 字段 | 建议值 |
|---|---|
| 管理员用户名 | admin 或你的名字 |
| 管理员密码 | 设置一个强密码 |
| 确认密码 | 重复输入 |
| 管理员邮箱 | admin@example.com |
⚠️ 注意:这个账号就是未来的管理员账号,请记住用户名和密码。
如果已经是登录页面
说明安装向导已经完成,需要用管理员账号登录:
- 关闭当前页面
- 重新访问
https://git.example.com - 如果又显示安装向导,按上面步骤配置第一个管理员
如果安装向导已完成且无法重置
可以通过命令行创建管理员:
cd /data/gitea
# 停止服务
docker-compose down
# 重新启动(带初始化参数)
docker-compose up -d
# 进入容器
docker exec -it gitea bash
# 创建管理员用户
gitea admin user create \
--username admin \
--password 你的密码 \
--email admin@example.com \
--admin
总结
| 场景 | 操作 |
|---|---|
| 首次显示安装向导 | 填写管理员信息 → 完成安装 → 自动登录 |
| 已完成安装但没记住账号 | 重启容器或用命令行创建管理员 |
你现在看到的页面是安装向导还是登录页面?
gitea admin user create
--username wantsong
--password NJq77PPXBYhrtZY
--email w@wantsong.cc
--admin
docker exec -it gitea gitea admin user create
--username wantsong
--password NJq77PPXBYhrtZY
--email w@wantsong.cc
--admin
现在是登录页面了,安装向导页面没注意管理员的账号。
我在创建管理员用户的时候,报错:
2026/06/01 05:42:56 ...s/setting/setting.go:183:loadRunModeFrom() [F] Gitea is not supposed to be run as root. Sorry. If you need to use privileged TCP ports please instead use setcap and the cap_net_bind_service permission
怎么解决?
解决 Gitea 不允许 root 运行的问题
这是 Gitea 的安全限制,需要使用非 root 用户(如 git)运行。
解决方案
步骤 1:确保 git 用户存在
# 创建 git 用户(如果不存在)
sudo useradd -m -s /bin/bash git
# 创建目录并授权
sudo mkdir -p /data/git/repositories
sudo chown -R git:git /data/git/repositories
sudo chown -R git:git /data/gitea/gitea-data
步骤 2:获取 git 用户的 UID 和 GID
id git
记住输出的 uid 和 gid(通常是 1000)。
步骤 3:修改 docker-compose.yml
编辑 /data/gitea/docker-compose.yml,确保环境变量设置正确:
services:
gitea:
image: gitea/gitea:1.21
container_name: gitea
restart: always
environment:
- USER_UID=1000 # 改成 git 的 uid
- USER_GID=1000 # 改成 git 的 gid
# ... 其他环境变量保持不变
user: "1000:1000" # 添加这行,指定容器以哪个用户运行
步骤 4:重启 Gitea 服务
cd /data/gitea
# 停止并删除旧容器
docker-compose down
# 重新启动(会创建新的容器)
docker-compose up -d
步骤 5:创建管理员用户
docker exec -it gitea gitea admin user create \
--username admin \
--password 你的密码 \
--email admin@example.com \
--admin
验证
# 查看容器是否以 git 用户运行
docker exec -it gitea whoami
输出应该是 git 而不是 root。
常见问题
| 问题 | 解决方法 |
|---|---|
| 之前创建的容器没更新 | 必须 docker-compose down 删除旧容器后再 up |
| 权限不够 | sudo chown -R git:git /data/gitea /data/git |
我检查了下,git用户的id是1005,我添加了这行后,user: "1005:1005" 服务没法起来。
去掉这行,服务启动但是还是root用户
解决 Gitea 以 git 用户运行
步骤 1:检查目录权限
# 确保目录属于 git 用户
sudo chown -R git:git /data/gitea
sudo chown -R git:git /data/git
# 检查权限
ls -la /data/
步骤 2:修改 docker-compose.yml
sudo vim /data/gitea/docker-compose.yml
修改 environment 部分,确保包含正确的 UID/GID:
services:
gitea:
image: gitea/gitea:1.21
container_name: gitea
restart: always
environment:
- USER_UID=1005 # git 用户的 uid
- USER_GID=1005 # git 用户的 gid
# ... 其他环境变量
user: "1005:1005" # 添加这行
步骤 3:查看启动错误日志
cd /data/gitea
docker-compose down
docker-compose up -d
docker-compose logs -f
把错误信息贴出来,我帮你分析具体原因。
可能的问题及解决
问题 1:SELinux 阻止挂载
# 查看 SELinux 状态
getenforce
# 如果是 Enforcing,临时关闭测试
sudo setenforce 0
# 或者给目录打标签
sudo chcon -R -t svirt_sandbox_file_t /data/gitea
sudo chcon -R -t svirt_sandbox_file_t /data/git
问题 2:目录权限不够
# 完全重置权限
sudo chown -R 1005:1005 /data/gitea
sudo chown -R 1005:1005 /data/git
# 给完全权限测试(后续再收紧)
sudo chmod -R 777 /data/gitea/gitea-data
sudo chmod -R 777 /data/git/repositories
问题 3:使用 run 命令启动查看具体错误
cd /data/gitea
docker-compose down
docker-compose run --rm gitea
把终端输出贴出来,我帮你定位问题。
卸载 Gitea
步骤 1:停止并删除容器
cd /data/gitea
# 停止服务
docker-compose down
# 删除容器(如果还存在)
docker rm -f gitea
docker rm -f gitea-db # 如果有单独的数据库容器
步骤 2:删除 Docker 镜像
# 查看 Gitea 相关镜像
docker images | grep gitea
# 删除镜像
docker rmi gitea/gitea:1.21 # 替换为你的版本
docker rmi postgres:15-alpine # 如果使用 PostgreSQL
步骤 3:删除数据目录(可选,谨慎操作)
⚠️ 这会删除所有仓库和用户数据,不可恢复
# 删除 Gitea 数据
sudo rm -rf /data/gitea
# 删除仓库数据
sudo rm -rf /data/git
# 删除 PostgreSQL 数据(如果使用)
sudo rm -rf /var/lib/docker/volumes/gitea_postgres-data
步骤 4:清理 systemd 服务(如果创建了)
# 停止服务
sudo systemctl stop gitea
# 禁用服务
sudo systemctl disable gitea
# 删除服务文件
sudo rm /etc/systemd/system/gitea.service
# 重新加载 systemd
sudo systemctl daemon-reload
步骤 5:清理 Nginx 配置(可选)
# 如果不再需要
sudo rm /etc/nginx/conf.d/gitea.conf
# 重载 Nginx
sudo systemctl reload nginx
快速卸载命令汇总
cd /data/gitea
docker-compose down
docker-compose down --volumes # 同时删除数据卷
docker system prune -a # 清理所有未使用的镜像、容器、网络
# 删除数据目录(根据需要选择)
sudo rm -rf /data/gitea
sudo rm -rf /data/git
# 清理 systemd
sudo systemctl stop gitea 2>/dev/null
sudo systemctl disable gitea 2>/dev/null
sudo rm /etc/systemd/system/gitea.service 2>/dev/null
sudo systemctl daemon-reload
确认卸载完成
# 检查是否还有 Gitea 相关容器
docker ps -a | grep gitea
# 检查是否还有 Gitea 镜像
docker images | grep gitea
# 检查数据目录
ls /data/gitea 2>/dev/null # 应该提示不存在
卸载完成后,你是想重新安装 Gitea,还是用其他方案(如 GitLab 或 SSH 裸仓库)?