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:
parent
3d464c747d
commit
3e1f4083b9
203
.gitlab-ci.yml
203
.gitlab-ci.yml
@ -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
29
docker-compose.yml
Normal 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
|
||||||
Loading…
x
Reference in New Issue
Block a user