knowledge-vault/sources/references/开发笔记/CentOS/安装Git.md

901 lines
24 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

下面给出一套 **在 CentOS 上使用 Docker 快速部署 Git 服务器** 的完整思路与实操步骤。
你可以任选下面两种方案:
| 方案 | 适合场景 | 资源占用 | 主要功能 |
|------|----------|----------|----------|
| **Gitea轻量** | 个人/小团队、需要 Web UI代码浏览、Issue、PR| <1GB RAM | 开箱即用的 Git 服务界面友好支持 LDAP/OAuth |
| **GitLab CE完整** | 大团队需要 CI/CDWiki容器 Registry 等完整功能 | 至少 4GB RAM推荐 8GB+| 功能最全但资源消耗大 |
| **仅 SSH 裸仓库** | 只想通过 `git clone ssh://...` 访问 Web UI | 基本无额外资源 | 手动管理权限最轻量 |
下面重点演示 **Gitea**Docker Compose+ **Nginx 反向代理 + Lets Encrypt HTTPS** 的完整链路兼顾易用性和安全若你想直接跑 **GitLab**请跳到章节 2 Docker 运行 GitLab CE”。
---
## 1⃣ 前期准备CentOS 7/8
```bash
# 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
```
> **提示**:如果机器内存 <1GB请选 **仅 SSH 裸仓库**(后文的方案三),否则 Gitea 也能跑,但建议先把系统 Swap 开启:
```bash
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 创建项目目录
```bash
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。
```yaml
# /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:
```
> **⚠️ 关键点**
> 1. `USER_UID` / `USER_GID` 必须与宿主机上运行 Docker 进程的用户对应(通常是 `1000`),否则 Gitea 生成的仓库文件权限会报错。
> 2. `DOMAIN`、`ROOT_URL` 换成你自己的域名,后面 Nginx 反代时需要匹配。
> 3. `SSH_PORT=2222` 表示容器内部 SSH 监听在 22而我们在 `ports` 里把它映射到宿主机的 **2222**(避免冲突本机 22 端口)。
> 4. **密码** 一定要改成强密码,最好使用 `openssl rand -base64 32` 生成随机字符串。
### 2.3 启动并检查
```bash
cd /data/gitea
docker-compose up -d # 后台启动
docker-compose logs -f gitea # 查看日志,出现 “HTTP Listen: :3000” 表示成功
```
> **第一次访问**:打开浏览器,访问 `http://<服务器IP>:3000`,会看到 Gitea 的 **安装向导**(设置管理员账号、数据库、域名等),完成后即进入主页。
### 2.4 (可选)配置 Systemd 监控 Docker Compose
```bash
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 反向代理 + HTTPSLets Encrypt
> **前置条件**:已拥有域名 `git.example.com`,并在 DNS 处把 `git.example.com` A 记录指向服务器 IP。
### 3.1 安装 Nginx 与 Certbot
```bash
sudo yum install -y epel-release
sudo yum install -y nginx certbot python3-certbot-nginx
```
### 3.2 创建 Nginx 配置
```bash
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 并获取证书
```bash
sudo systemctl enable nginx && sudo systemctl start nginx
# 初次自动生成证书Lets 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
```bash
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 备份到另一台机器。<br>示例:`tar czf /backup/gitea-$(date +%F).tar.gz -C /data/gitea gitea-data postgres-data` |
| **升级 Gitea** | <pre>docker-compose pull<br>docker-compose up -d</pre> |
| **日志查看** | `docker-compose logs -f --tail=200` |
| **资源限制** | 若机器内存紧张,可在 `docker-compose.yml` 中为服务添加 `mem_limit`、`cpus` 参数。 |
| **防火墙** | 只保留 **22**(宿主机 SSH **2222**Gitea SSH **80/443**Nginx 端口,其他默认关闭。 |
---
## 5⃣ 若想使用 GitLab CEDocker
> **注意**GitLab 官方镜像非常大2GB首次启动需要 48GB RAM 才能正常运行。下面给出 **最小化** 配置示例,若机器资源不足请跳过此节。
### 5.1 `docker-compose.yml`GitLab CE
```yaml
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 官方建议至少 4GB RAM。若机器只有 2GB请改用 **GitLab EE 官方轻量版**`gitlab/gitlab-ee:latest`)或直接选 Gitea。
---
## 6⃣ 仅用 SSH + 裸仓库最轻量的“Git 服务器”)
如果不需要 Web UI只想团队成员通过 `ssh` 拉取/推送代码,可直接在宿主机上创建裸仓库:
```bash
# 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 | 1GB RAM+(推荐 2GB| ✅ |
| **GitLab CE (Docker)** | 需要完整 DevOps 平台CI/CD、容器 Registry、Wiki| 22/80/443 | ≥4GB RAM | ✅ |
| **SSH + 裸仓库** | 极简团队、只做代码托管、无需 UI | 22 | 基本无 | ❌ |
> **推荐**如果是中小团队、机器配置一般4GB 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 配置文件:
```bash
sudo vim /etc/nginx/conf.d/gitea.conf
```
找到 `proxy_set_header Host` 那行,**改成这样**
```nginx
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;
}
```
或者,如果你使用的是域名访问,也可以试试:
```nginx
proxy_set_header Host git.example.com;
```
## 然后重载 Nginx
```bash
sudo nginx -t # 检查配置语法
sudo systemctl reload nginx
```
---
## 如果还不行,检查 Gitea 的 ROOT_URL
确保 `docker-compose.yml` 中的域名配置正确:
```yaml
environment:
- ROOT_URL=https://git.example.com/ # 这里要和实际访问的域名一致
- DOMAIN=git.example.com
```
修改后重启 Gitea
```bash
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 用户和用户组
```bash
# 创建 git 用户(如果不存在)
sudo useradd -m -s /bin/bash git
# 或者如果已经存在,确保其主目录正确
sudo mkdir -p /home/git
sudo chown -R git:git /home/git
```
## 步骤 2创建仓库目录并授权
```bash
# 创建仓库根目录
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
```bash
id git
```
输出类似:
```
uid=1000(git) gid=1000(git) groups=1000(git)
```
记录下 `uid``gid`(通常是 1000
## 步骤 4更新 docker-compose.yml
编辑 `/data/gitea/docker-compose.yml`
```yaml
environment:
- USER_UID=1000 # 改成 git 的 uid
- USER_GID=1000 # 改成 git 的 gid
- ROOT_URL=https://git.example.com/
- DOMAIN=git.example.com
```
## 步骤 5重启 Gitea 服务
```bash
cd /data/gitea
docker-compose down
docker-compose up -d
```
---
## 验证权限
```bash
# 检查目录权限
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` |
> ⚠️ **注意**:这个账号就是未来的管理员账号,请记住用户名和密码。
---
### 如果已经是登录页面
说明安装向导已经完成,需要用管理员账号登录:
1. **关闭当前页面**
2. **重新访问** `https://git.example.com`
3. 如果又显示安装向导,按上面步骤配置第一个管理员
---
### 如果安装向导已完成且无法重置
可以通过命令行创建管理员:
```bash
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 用户存在
```bash
# 创建 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
```bash
id git
```
记住输出的 `uid``gid`(通常是 `1000`)。
### 步骤 3修改 docker-compose.yml
编辑 `/data/gitea/docker-compose.yml`,确保环境变量设置正确:
```yaml
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 服务
```bash
cd /data/gitea
# 停止并删除旧容器
docker-compose down
# 重新启动(会创建新的容器)
docker-compose up -d
```
### 步骤 5创建管理员用户
```bash
docker exec -it gitea gitea admin user create \
--username admin \
--password 你的密码 \
--email admin@example.com \
--admin
```
---
## 验证
```bash
# 查看容器是否以 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检查目录权限
```bash
# 确保目录属于 git 用户
sudo chown -R git:git /data/gitea
sudo chown -R git:git /data/git
# 检查权限
ls -la /data/
```
## 步骤 2修改 docker-compose.yml
```bash
sudo vim /data/gitea/docker-compose.yml
```
修改 `environment` 部分,确保包含正确的 UID/GID
```yaml
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查看启动错误日志
```bash
cd /data/gitea
docker-compose down
docker-compose up -d
docker-compose logs -f
```
把错误信息贴出来,我帮你分析具体原因。
---
## 可能的问题及解决
### 问题 1SELinux 阻止挂载
```bash
# 查看 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目录权限不够
```bash
# 完全重置权限
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 命令启动查看具体错误
```bash
cd /data/gitea
docker-compose down
docker-compose run --rm gitea
```
把终端输出贴出来,我帮你定位问题。
# 卸载 Gitea
## 步骤 1停止并删除容器
```bash
cd /data/gitea
# 停止服务
docker-compose down
# 删除容器(如果还存在)
docker rm -f gitea
docker rm -f gitea-db # 如果有单独的数据库容器
```
## 步骤 2删除 Docker 镜像
```bash
# 查看 Gitea 相关镜像
docker images | grep gitea
# 删除镜像
docker rmi gitea/gitea:1.21 # 替换为你的版本
docker rmi postgres:15-alpine # 如果使用 PostgreSQL
```
## 步骤 3删除数据目录可选谨慎操作
> ⚠️ 这会删除所有仓库和用户数据,**不可恢复**
```bash
# 删除 Gitea 数据
sudo rm -rf /data/gitea
# 删除仓库数据
sudo rm -rf /data/git
# 删除 PostgreSQL 数据(如果使用)
sudo rm -rf /var/lib/docker/volumes/gitea_postgres-data
```
## 步骤 4清理 systemd 服务(如果创建了)
```bash
# 停止服务
sudo systemctl stop gitea
# 禁用服务
sudo systemctl disable gitea
# 删除服务文件
sudo rm /etc/systemd/system/gitea.service
# 重新加载 systemd
sudo systemctl daemon-reload
```
## 步骤 5清理 Nginx 配置(可选)
```bash
# 如果不再需要
sudo rm /etc/nginx/conf.d/gitea.conf
# 重载 Nginx
sudo systemctl reload nginx
```
---
## 快速卸载命令汇总
```bash
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
```
---
## 确认卸载完成
```bash
# 检查是否还有 Gitea 相关容器
docker ps -a | grep gitea
# 检查是否还有 Gitea 镜像
docker images | grep gitea
# 检查数据目录
ls /data/gitea 2>/dev/null # 应该提示不存在
```
卸载完成后,你是想重新安装 Gitea还是用其他方案如 GitLab 或 SSH 裸仓库)?