--- name: gitea-deploy description: Deploy Gitea (self-hosted Git service) with PostgreSQL using Docker Compose. Use when user wants to set up Gitea for Git repository hosting. tools: Read, Glob, Grep, Bash --- # Gitea Docker 部署 使用 Docker Compose 部署 Gitea 自託管 Git 服務(含 PostgreSQL 資料庫)。 ## 前置需求 - **目標**: 已安裝 Docker 的伺服器 - **存取**: SSH root 權限 - **目錄**: 服務部署於 `/opt/docker/gitea/` ## 部署步驟 ### Step 1: 建立目錄與配置 ```bash ssh root@ bash -c ' mkdir -p /opt/docker/gitea cat > /opt/docker/gitea/docker-compose.yml << "EOF" networks: gitea: external: false volumes: gitea: driver: local postgres: driver: local services: server: image: docker.gitea.com/gitea:1.22.3 container_name: gitea environment: - USER_UID=1000 - USER_GID=1000 - GITEA__database__DB_TYPE=postgres - GITEA__database__HOST=db:5432 - GITEA__database__NAME=gitea - GITEA__database__USER=gitea - GITEA__database__PASSWD=gitea restart: always networks: - gitea volumes: - gitea:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3000:3000" - "222:22" depends_on: - db db: image: docker.io/library/postgres:14 container_name: gitea-db restart: always environment: - POSTGRES_USER=gitea - POSTGRES_PASSWORD=gitea - POSTGRES_DB=gitea networks: - gitea volumes: - postgres:/var/lib/postgresql/data EOF ' ``` ### Step 2: 啟動服務 ```bash ssh root@ "cd /opt/docker/gitea && docker compose up -d" ``` ### Step 3: 驗證部署 ```bash ssh root@ "docker ps | grep gitea" ``` **預期輸出**: ``` gitea Up 0.0.0.0:3000->3000/tcp, 0.0.0.0:222->22/tcp gitea-db Up 5432/tcp ``` ## 存取資訊 - **Web 介面**: `http://:3000` - **SSH**: `ssh git@:222` ## 初始設定 首次訪問 `http://:3000` 時,需填寫: **資料庫設定**: - **資料庫類型**: PostgreSQL - **資料庫主機**: `db:5432` - **資料庫使用者**: `gitea` - **資料庫密碼**: `gitea` - **資料庫名稱**: `gitea` **其他設定可保持預設值。** ## 常用指令 ```bash # 查看狀態 ssh root@ "cd /opt/docker/gitea && docker compose ps" # 查看日誌 ssh root@ "cd /opt/docker/gitea && docker compose logs" # 停止服務 ssh root@ "cd /opt/docker/gitea && docker compose down" # 重啟服務 ssh root@ "cd /opt/docker/gitea && docker compose restart" # 更新映像 ssh root@ "cd /opt/docker/gitea && docker compose pull && docker compose up -d" # 進入容器 ssh root@ "docker exec -it gitea bash" ``` ## 連接埠說明 | 連接埠 | 用途 | |--------|------| | 3000 | Web 介面 | | 222 | SSH Git 操作 | ## 備份 ```bash # 備份資料庫 ssh root@ "docker exec gitea-db pg_dump -U gitea gitea > gitea_backup.sql" # 備份資料卷 ssh root@ "docker run --rm -v gitea_gitea:/data -v \$(pwd):/backup ubuntu tar czf /backup/gitea_data.tar.gz /data" ``` ## 故障排除 ### 容器名稱有 -1 後綴 確保 `docker-compose.yml` 中每個服務都有 `container_name` 設定。 ### 無法連接資料庫 確認網路設定正確,容器應在 `gitea` 網路中: ```bash docker network inspect gitea_gitea ``` ### SSH 連接失敗 確認 222 連接埠已開放,且 SSH 金鑰已正確添加到 Gitea 用戶設定。 ## 升級 編輯 `docker-compose.yml` 更新映像版本後: ```bash cd /opt/docker/gitea docker compose pull docker compose up -d ```