From 8bfae1588b068eddf347baa3ae5966f43bc143a7 Mon Sep 17 00:00:00 2001 From: root <1772105645@qq.com> Date: Fri, 19 Dec 2025 10:23:51 +0800 Subject: [PATCH] Simplify deployment using Docker run instead of docker-compose MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Removed docker-compose dependency, using direct Docker run commands - Kept all deployment features: auto-restart, health check, logging - Direct Docker container deployment from private registry image - Added comprehensive environment variables for RustFS backend - Maintained port mapping (8080:8080) and volume mounting - Added detailed status reporting and health check validation - Works with local Dockerfile only, no docker-compose.yml needed 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .gitlab-ci.yml | 89 +++++++++++++++++++++----------------------------- 1 file changed, 38 insertions(+), 51 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1b43bd2..22cfd12 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -25,72 +25,57 @@ build_image: # 部署服务 deploy_service: stage: deploy - image: 192.168.1.154:31010/docker/compose:latest + image: 192.168.1.154:31010/docker/alpine:latest services: - docker:24.0.6-dind # Docker-in-Docker服务 variables: DOCKER_HOST: tcp://docker:2376 DOCKER_TLS_CERTDIR: "/certs" script: - # 创建docker-compose.yml文件(如果没有的话) - - | - cat > docker-compose.yml << 'EOF' - version: '3.8' - - services: - file-system-server: - image: ${CI_REGISTRY}/${DOCKER_IMAGE_NAME}:${DOCKER_TAG} - container_name: file-system-server - restart: unless-stopped # 容器退出时自动重启,除非手动停止 - ports: - - "8080:8080" # 映射端口 - environment: - - SERVER_PORT=8080 - - RUSTFS_ENDPOINT=http://192.168.1.154:9000 - - RUSTFS_ACCESS_KEY=minioadmin - - RUSTFS_SECRET_KEY=minioadmin123 - - RUSTFS_USE_SSL=false - - RUSTFS_REGION=us-east-1 - volumes: - # 挂载日志目录 - - ./logs:/app/logs - networks: - - file-system-network - healthcheck: - test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/swagger/index.html"] - interval: 30s - timeout: 10s - retries: 3 - start_period: 40s - logging: - driver: "json-file" - options: - max-size: "10m" - max-file: "3" - - networks: - file-system-network: - driver: bridge - EOF - + # 安装必要的工具 + - apk add --no-cache docker-cli wget # 登录到私有仓库 - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - # 拉取最新镜像 + # 拉取最新构建的镜像 - docker pull $CI_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_TAG # 停止并删除旧容器 - - docker-compose down --remove-orphans || true + - docker stop file-system-server 2>/dev/null || true + - docker rm file-system-server 2>/dev/null || true # 删除旧镜像(释放空间) - docker rmi $CI_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_TAG 2>/dev/null || true - # 启动服务(后台运行) - - docker-compose up -d + # 创建日志目录 + - mkdir -p /builds/root/file_service/logs + # 运行新的容器 + - | + 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 + # 等待容器启动 - - sleep 10 - # 显示运行状态 - - docker-compose ps + - sleep 15 + # 显示容器状态 + - docker ps --filter "name=file-system-server" # 显示容器健康状态 - - docker inspect --format='{{.State.Health.Status}}' file-system-server || echo "Health check not configured" + - docker inspect --format='{{.State.Health.Status}}' file-system-server || echo "Health check not available yet" # 显示容器日志(最近20行) - - docker-compose logs --tail=20 + - docker logs --tail=20 file-system-server # 验证服务是否正常响应 - wget --no-verbose --tries=1 --spider http://localhost:8080/swagger/index.html || echo "Service health check failed" # 清理未使用的镜像 @@ -99,5 +84,7 @@ deploy_service: - echo "🚀 部署完成!服务地址: http://localhost:8080" - echo "📊 容器状态:" - docker ps --filter "name=file-system-server" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" + - echo "📋 健康检查状态:" + - docker inspect --format='{{.State.Health.Status}}' file-system-server || echo "Pending..." only: - main