Fix deployment configuration and add docker-compose.yml

- Fix YAML syntax error in GitLab CI/CD pipeline
- Update Docker image path to push/pull from docker directory
- Add docker-compose.yml for proper deployment
- Simplify CI/CD configuration removing complex deployment scripts

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
root 2025-12-19 10:36:03 +08:00
parent 3d464c747d
commit 3e1f4083b9
2 changed files with 41 additions and 193 deletions

View File

@ -3,217 +3,36 @@ stages:
- deploy - deploy
variables: variables:
DOCKER_IMAGE_NAME: file-system-server DOCKER_IMAGE_NAME: docker/file-system-server
DOCKER_TAG: latest DOCKER_TAG: latest
CI_REGISTRY: "192.168.1.154:31010" CI_REGISTRY: "192.168.1.154:31010"
CI_REGISTRY_USER: "docker" CI_REGISTRY_USER: "docker"
CI_REGISTRY_PASSWORD: "dockerxn001624." CI_REGISTRY_PASSWORD: "dockerxn001624."
# 构建镜像
build_image: build_image:
stage: build stage: build
image: 192.168.1.154:31010/docker/alpine:latest image: 192.168.1.154:31010/docker/alpine:latest
script: script:
- echo "🔧 ===== 开始构建阶段 ====="
- echo "📋 构建环境信息:"
- echo " - 工作目录: $(pwd)"
- echo " - 镜像名称: $DOCKER_IMAGE_NAME:$DOCKER_TAG"
- echo " - 私有仓库: $CI_REGISTRY"
- echo " - Git提交: $CI_COMMIT_SHORT_SHA"
- echo " - 构建时间: $(date)"
- echo ""
- echo "📦 安装Docker CLI..."
- apk add --no-cache docker-cli - apk add --no-cache docker-cli
- echo ""
- echo "🔐 登录私有仓库..."
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- echo "✅ Docker登录成功" - docker build -t $DOCKER_IMAGE_NAME:$DOCKER_TAG .
- echo ""
- echo "🔍 检查Dockerfile和项目文件..."
- ls -la
- echo ""
- echo "📄 Dockerfile内容预览:"
- head -20 Dockerfile
- echo ""
- echo "🏗️ 开始构建Docker镜像..."
- echo " 构建命令: docker build -t $DOCKER_IMAGE_NAME:$DOCKER_TAG ."
- docker build --progress=plain --no-cache -t $DOCKER_IMAGE_NAME:$DOCKER_TAG . 2>&1 | tee build.log
- echo ""
- echo "📊 构建结果检查..."
- docker images | grep $DOCKER_IMAGE_NAME
- echo ""
- echo "🏷️ 标记镜像为私有仓库地址..."
- docker tag $DOCKER_IMAGE_NAME:$DOCKER_TAG $CI_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_TAG - docker tag $DOCKER_IMAGE_NAME:$DOCKER_TAG $CI_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_TAG
- echo "✅ 镜像标记完成: $CI_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_TAG"
- echo ""
- echo "📤 推送镜像到私有仓库..."
- docker push $CI_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_TAG - docker push $CI_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_TAG
- echo "✅ 镜像推送成功"
- echo ""
- echo "🎯 ===== 构建阶段完成 ====="
- echo "📋 构建产物信息:"
- docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}\t{{.CreatedAt}}" | grep -E "(REPOSITORY|$DOCKER_IMAGE_NAME|$CI_REGISTRY)"
only: only:
- main - main
# 部署服务
deploy_service: deploy_service:
stage: deploy stage: deploy
image: 192.168.1.154:31010/docker/alpine:latest image: 192.168.1.154:31010/docker/compose:latest
services: before_script:
- docker:24.0.6-dind # Docker-in-Docker服务 - echo $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
variables:
DOCKER_HOST: tcp://docker:2376
DOCKER_TLS_CERTDIR: "/certs"
script: script:
- echo "🚀 ===== 开始部署阶段 =====" - docker-compose pull
- echo "📋 部署环境信息:" - docker-compose down --remove-orphans || true
- echo " - 工作目录: $(pwd)" - docker-compose up -d
- echo " - 镜像地址: $CI_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_TAG"
- echo " - Docker主机: $DOCKER_HOST"
- echo " - 部署时间: $(date)"
- echo ""
- echo "📦 安装部署工具..."
- apk add --no-cache docker-cli wget curl
- echo "✅ 工具安装完成"
- echo ""
- echo "🔐 登录私有仓库..."
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- echo "✅ Docker登录成功"
- echo ""
- echo "🔍 检查Docker环境..."
- docker version
- echo ""
- echo "📋 当前Docker镜像列表:"
- docker images | head -10
- echo ""
- echo "📥 拉取最新构建的镜像..."
- echo " 拉取命令: docker pull $CI_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_TAG"
- docker pull $CI_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_TAG
- echo "✅ 镜像拉取完成"
- echo ""
- echo "🧹 清理旧部署..."
- echo "🛑 停止现有容器..."
- docker stop file-system-server 2>/dev/null || echo " 没有运行中的容器"
- echo "🗑️ 删除现有容器..."
- docker rm file-system-server 2>/dev/null || echo " 没有现有容器"
- echo "🗑️ 清理旧镜像..."
- docker rmi $CI_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_TAG 2>/dev/null || echo " 没有旧镜像"
- echo ""
- echo "📁 创建部署目录..."
- mkdir -p /builds/root/file_service/logs
- echo "✅ 目录创建完成"
- echo ""
- echo "🏃 运行新容器..."
- echo " 容器名称: file-system-server"
- echo " 端口映射: 8080:8080"
- echo " 镜像地址: $CI_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_TAG"
- |
CONTAINER_ID=$(docker run -d \
--name file-system-server \
--restart unless-stopped \
-p 8080:8080 \
-e SERVER_PORT=8080 \
-e RUSTFS_ENDPOINT=http://192.168.1.154:9000 \
-e RUSTFS_ACCESS_KEY=minioadmin \
-e RUSTFS_SECRET_KEY=minioadmin123 \
-e RUSTFS_USE_SSL=false \
-e RUSTFS_REGION=us-east-1 \
-v /builds/root/file_service/logs:/app/logs \
--health-cmd="wget --no-verbose --tries=1 --spider http://localhost:8080/swagger/index.html || exit 1" \
--health-interval=30s \
--health-timeout=10s \
--health-retries=3 \
--health-start-period=40s \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
$CI_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_TAG)
echo "✅ 容器启动成功ID: $CONTAINER_ID"
- echo ""
- echo "⏳ 等待容器启动..."
- echo "⏱️ 等待 1/15 秒..." && sleep 1
- echo "⏱️ 等待 2/15 秒..." && sleep 1
- echo "⏱️ 等待 3/15 秒..." && sleep 1
- echo "⏱️ 等待 4/15 秒..." && sleep 1
- echo "⏱️ 等待 5/15 秒..." && sleep 1
- echo "⏱️ 等待 6/15 秒..." && sleep 1
- echo "⏱️ 等待 7/15 秒..." && sleep 1
- echo "⏱️ 等待 8/15 秒..." && sleep 1
- echo "⏱️ 等待 9/15 秒..." && sleep 1
- echo "⏱️ 等待 10/15 秒..." && sleep 1
- echo "⏱️ 等待 11/15 秒..." && sleep 1
- echo "⏱️ 等待 12/15 秒..." && sleep 1
- echo "⏱️ 等待 13/15 秒..." && sleep 1
- echo "⏱️ 等待 14/15 秒..." && sleep 1
- echo "⏱️ 等待 15/15 秒..." && sleep 1
- echo "✅ 容器启动等待完成"
- echo ""
- echo "📊 容器状态检查..."
- docker ps --filter "name=file-system-server" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}\t{{.Image}}"
- echo ""
- echo "🏥 容器健康状态..."
- HEALTH_STATUS=$(docker inspect --format='{{.State.Health.Status}}' file-system-server 2>/dev/null || echo "checking")
- echo " 健康状态: $HEALTH_STATUS"
- echo ""
- echo "📋 容器详细信息..."
- docker inspect file-system-server --format='{{json .State}}' | jq '.' 2>/dev/null || docker inspect file-system-server --format='{{.State}}'
- echo ""
- echo "📝 容器启动日志 (最近30行):"
- docker logs --tail=30 file-system-server
- echo ""
- echo "🔍 服务连通性测试..."
- echo " 测试URL: http://localhost:8080/swagger/index.html"
- if wget --no-verbose --tries=3 --timeout=10 --spider http://localhost:8080/swagger/index.html; then
echo "✅ 服务连通性测试成功"
else
echo "❌ 服务连通性测试失败"
echo "📋 端口监听状态:"
- netstat -tlnp | grep :8080 || echo " 端口8080未监听"
fi
- echo ""
- echo "🧹 清理未使用的镜像..."
- docker image prune -f - docker image prune -f
- docker-compose ps
- echo "" tags:
- echo "📋 部署最终报告..." - shell
- echo "🎯 ===== 部署阶段完成 ====="
- echo ""
- echo "📊 服务信息:"
- echo " 🌐 服务地址: http://localhost:8080"
- echo " 📖 API文档: http://localhost:8080/swagger/index.html"
- echo " 📱 Web界面: http://localhost:8080/web"
- echo " 📋 容器名称: file-system-server"
- echo " 🏥 健康状态: $HEALTH_STATUS"
- echo ""
- echo "📋 容器运行状态:"
- docker ps --filter "name=file-system-server" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
- echo ""
- echo "💾 存储使用情况:"
- docker system df --format "table {{.Type}}\t{{.TotalCount}}\t{{.Size}}\t{{.Reclaimed}}"
only: only:
- main - main

29
docker-compose.yml Normal file
View File

@ -0,0 +1,29 @@
version: '3.8'
services:
file-system-server:
image: 192.168.1.154:31010/docker/file-system-server:latest
container_name: file-system-server
ports:
- "8080:8080"
restart: unless-stopped
environment:
- GIN_MODE=release
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/swagger/index.html"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
volumes:
- ./logs:/app/logs
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
logs:
driver: local