diff --git a/.drone.yml b/.drone.yml index 3ec04f3..e42181c 100644 --- a/.drone.yml +++ b/.drone.yml @@ -20,15 +20,31 @@ steps: - docker build -t platform-backend:${DRONE_COMMIT_SHA:0:8} -f deploy/Dockerfile.backend . - docker tag platform-backend:${DRONE_COMMIT_SHA:0:8} platform-backend:latest - # 构建前端镜像 - - name: build-frontend + # 构建前端镜像(测试环境) + - name: build-frontend-test image: docker:dind volumes: - name: docker-sock path: /var/run/docker.sock commands: - - docker build -t platform-frontend:${DRONE_COMMIT_SHA:0:8} -f deploy/Dockerfile.frontend . - - docker tag platform-frontend:${DRONE_COMMIT_SHA:0:8} platform-frontend:latest + - docker build -t platform-frontend-test:${DRONE_COMMIT_SHA:0:8} -f deploy/Dockerfile.frontend --build-arg BACKEND_HOST=platform-backend-test . + - docker tag platform-frontend-test:${DRONE_COMMIT_SHA:0:8} platform-frontend-test:latest + when: + branch: + - develop + + # 构建前端镜像(生产环境) + - name: build-frontend-prod + image: docker:dind + volumes: + - name: docker-sock + path: /var/run/docker.sock + commands: + - docker build -t platform-frontend-prod:${DRONE_COMMIT_SHA:0:8} -f deploy/Dockerfile.frontend --build-arg BACKEND_HOST=platform-backend-prod . + - docker tag platform-frontend-prod:${DRONE_COMMIT_SHA:0:8} platform-frontend-prod:latest + when: + branch: + - main # 部署测试环境 - name: deploy-test @@ -50,7 +66,7 @@ steps: - docker stop platform-backend-test platform-frontend-test || true - docker rm platform-backend-test platform-frontend-test || true - docker run -d --name platform-backend-test --network platform-network -p 8001:8000 --restart unless-stopped -e DATABASE_URL=$DATABASE_URL -e API_KEY=$API_KEY -e JWT_SECRET=$JWT_SECRET -e CONFIG_ENCRYPT_KEY=$CONFIG_ENCRYPT_KEY platform-backend:latest - - docker run -d --name platform-frontend-test --network platform-network -p 3003:80 --restart unless-stopped platform-frontend:latest + - docker run -d --name platform-frontend-test --network platform-network -p 3003:80 --restart unless-stopped platform-frontend-test:latest when: branch: - develop @@ -63,18 +79,19 @@ steps: path: /var/run/docker.sock environment: DATABASE_URL: - from_secret: database_url + from_secret: database_url_prod API_KEY: - from_secret: api_key + from_secret: api_key_prod JWT_SECRET: - from_secret: jwt_secret + from_secret: jwt_secret_prod CONFIG_ENCRYPT_KEY: - from_secret: config_encrypt_key + from_secret: config_encrypt_key_prod commands: + - docker network create platform-network-prod 2>/dev/null || true - docker stop platform-backend-prod platform-frontend-prod || true - docker rm platform-backend-prod platform-frontend-prod || true - - docker run -d --name platform-backend-prod -p 9001:8000 --restart unless-stopped -e DATABASE_URL=$DATABASE_URL -e API_KEY=$API_KEY -e JWT_SECRET=$JWT_SECRET -e CONFIG_ENCRYPT_KEY=$CONFIG_ENCRYPT_KEY platform-backend:latest - - docker run -d --name platform-frontend-prod -p 4003:80 --restart unless-stopped platform-frontend:latest + - docker run -d --name platform-backend-prod --network platform-network-prod -p 9001:8000 --restart unless-stopped -e DATABASE_URL=$DATABASE_URL -e API_KEY=$API_KEY -e JWT_SECRET=$JWT_SECRET -e CONFIG_ENCRYPT_KEY=$CONFIG_ENCRYPT_KEY platform-backend:latest + - docker run -d --name platform-frontend-prod --network platform-network-prod -p 4003:80 --restart unless-stopped platform-frontend-prod:latest when: branch: - main diff --git a/deploy/Dockerfile.frontend b/deploy/Dockerfile.frontend index 180f621..164ebe5 100644 --- a/deploy/Dockerfile.frontend +++ b/deploy/Dockerfile.frontend @@ -13,9 +13,15 @@ RUN npm run build # 生产镜像 FROM nginx:alpine +# 后端服务地址(通过 build-arg 传入,构建时替换) +ARG BACKEND_HOST=platform-backend-test + COPY --from=builder /app/dist /usr/share/nginx/html COPY deploy/nginx/frontend.conf /etc/nginx/conf.d/default.conf +# 在构建时替换后端地址(只替换 BACKEND_HOST 变量) +RUN sed -i "s/\${BACKEND_HOST}/${BACKEND_HOST}/g" /etc/nginx/conf.d/default.conf + EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] diff --git a/deploy/nginx/frontend.conf b/deploy/nginx/frontend.conf index 5a12504..273d47a 100644 --- a/deploy/nginx/frontend.conf +++ b/deploy/nginx/frontend.conf @@ -14,9 +14,9 @@ server { } # API 代理到后端 - # 使用 Docker 容器名称,通过 Docker DNS 解析 + # 使用环境变量 BACKEND_HOST,通过 Docker DNS 解析 location /api/ { - set $backend platform-backend-test:8000; + set $backend ${BACKEND_HOST}:8000; proxy_pass http://$backend/api/; proxy_http_version 1.1; proxy_set_header Host $host;