diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..857a535 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,34 @@ +# 构建产物 +target/ +*/target/ + +# IDE +.idea/ +*.iml +.vscode/ + +# Git +.git/ +.gitignore + +# 文档 +README.md +docs/ + +# 数据与日志 +data/ +logs/ +static/ + +# 脚本(不需要打包进镜像) +*.sh +deploy.sh +run.sh + +# CI/CD +.drone.yml +docker-compose.yml + +# 其他 +*.md +*.log diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..b8243f8 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,50 @@ +kind: pipeline +type: docker +name: default + +trigger: + branch: + - master + event: + - push + +steps: + - name: maven-package + image: maven:3-eclipse-temurin-21-alpine + volumes: + - name: maven-cache + path: /root/.m2 + commands: + - mvn clean package -DskipTests -B + + - name: docker-build-and-push + image: plugins/docker + settings: + registry: 192.168.31.253 + repo: 192.168.31.253/yescent/par + tags: latest + dockerfile: par-api/Dockerfile + username: + from_secret: harbor_username + password: + from_secret: harbor_password + + - name: deploy + image: appleboy/drone-ssh + settings: + host: 192.168.31.252 + username: + from_secret: ssh_username + password: + from_secret: ssh_password + port: 22 + script: + - cd /data/par + - ./deploy.sh + command_timeout: 2m + timeout: 2m + +volumes: + - name: maven-cache + host: + path: /tmp/drone/cache/maven diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 0000000..6396de7 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,32 @@ +# PAR Server 部署脚本 +# 用法: ./deploy.sh [version] + +set -e + +HARBOR="192.168.31.253" +PROJECT="yescent" +VERSION=${1:-latest} + +echo "====== 开始部署 PAR Server ======" +echo "版本: $VERSION" + +# 登录 Harbor +docker login $HARBOR + +# 拉取镜像 +docker pull $HARBOR/$PROJECT/par:$VERSION + +# 停止旧容器 +docker compose down 2>/dev/null || true + +# 启动新容器 +docker compose up -d + +# 等待健康检查 +echo "等待服务启动..." +sleep 15 + +# 验证部署 +curl -s http://localhost:${APP_PORT:-9012}/health && echo " 部署成功" || echo " 部署异常" + +echo "====== 部署完成 ======" diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..15760ba --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,32 @@ +version: '3.8' + +services: + app: + image: 192.168.31.253/yescent/par:latest + container_name: par-server + restart: unless-stopped + ports: + - "${APP_PORT:-9012}:8080" + volumes: + - ${DATA_ROOT:-./data}/static/configs:/app/static/configs + - ${DATA_ROOT:-./data}/static/admin:/app/static/admin + - ${LOG_ROOT:-./logs}:/app/logs + environment: + TZ: "Asia/Shanghai" + JAVA_OPTS: "-Xms256m -Xmx512m" + MYSQL_HOST: "${MYSQL_HOST:-host.docker.internal}" + MYSQL_PORT: "${MYSQL_PORT:-3306}" + MYSQL_DB: "${MYSQL_DB:-par_registry}" + MYSQL_USER: "${MYSQL_USER:-root}" + MYSQL_PASSWORD: "${MYSQL_PASSWORD:-root}" + HMAC_SECRET: "${HMAC_SECRET:-}" + PAR_STATIC_PATH: "/app/static" + PAR_ADMIN_PATH: "/app/static/admin" + extra_hosts: + - "host.docker.internal:host-gateway" + healthcheck: + test: ["CMD", "wget", "-qO-", "http://localhost:8080/health"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 60s diff --git a/par-api/Dockerfile b/par-api/Dockerfile index 39b4977..659616d 100644 --- a/par-api/Dockerfile +++ b/par-api/Dockerfile @@ -2,7 +2,7 @@ # Phase 1: 最小可用版本 # 构建阶段 -FROM eclipse-temurin:17-jdk-alpine AS builder +FROM eclipse-temurin:21-jdk-alpine AS builder WORKDIR /build @@ -28,7 +28,7 @@ RUN apk add --no-cache maven && \ cp par-api/target/*.jar target/app.jar # 运行阶段 -FROM eclipse-temurin:17-jre-alpine +FROM eclipse-temurin:21-jre-alpine LABEL maintainer="PAR Team" LABEL description="PT Adapter Registry Server"