Files
ocdp-go/docker-compose.yml
mangomqy c5e51ed069 ocdp v1
2025-11-13 02:54:06 +00:00

91 lines
2.9 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ==================================================
# OCDP Docker Compose (frontend + gateway layer)
# ==================================================
# 使用方式:
# docker compose -f docker-compose.yml \
# -f ./backend/docker-compose.yml \
# --profile backend up --build -d
#
# 说明:
# - 本文件只负责前端构建和 Nginx。
# - Backend / PostgreSQL / pgAdmin 由 backend/docker-compose.yml 提供。
# - Nginx 统一监听 80/443默认映射 WEB_HTTP_PORT=80、WEB_HTTPS_PORT=443
# 根据路径转发:/api/* → backend其他路径 → 前端静态文件。
# ==================================================
services:
# --------------------------------------------------
# 构建前端静态资源 (一次性 Job)
# --------------------------------------------------
frontend-build:
image: node:20-alpine
container_name: ocdp-frontend-build
init: true
working_dir: /app
restart: "no"
environment:
NODE_ENV: production
NPM_CONFIG_PRODUCTION: "false" # ensure devDependencies (tsc, vite) are installed for build
# 默认通过 Nginx 代理到 backend -> /api/v1
VITE_API_BASE_URL: ${VITE_API_BASE_URL:-/api/v1}
FILE_OWNER_UID: ${FILE_OWNER_UID:-1000}
FILE_OWNER_GID: ${FILE_OWNER_GID:-1000}
command: >
sh -c "
set -eux;
npm ci;
npm run build;
mkdir -p /build;
rm -rf /build/*;
cp -R dist/. /build/;
if [ -d dist ]; then chown -R "$$FILE_OWNER_UID:$$FILE_OWNER_GID" dist; fi;
if [ -d /build ]; then chown -R "$$FILE_OWNER_UID:$$FILE_OWNER_GID" /build; fi
"
volumes:
- ./frontend:/app
- frontend_node_modules:/app/node_modules
- frontend_dist:/build
networks:
- ocdp-network
# --------------------------------------------------
# Nginx - 静态文件 + /api 反向代理统一入口
# --------------------------------------------------
nginx:
image: nginx:1.27-alpine
container_name: ocdp-nginx
depends_on:
frontend-build:
condition: service_completed_successfully
ports:
- "${WEB_HTTP_PORT:-80}:80"
- "${WEB_HTTPS_PORT:-443}:443"
volumes:
- frontend_dist:/usr/share/nginx/html:ro
- ./infra/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
- ./infra/nginx/certs:/etc/nginx/certs:ro
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://localhost/healthz || exit 1"]
interval: 30s
timeout: 5s
retries: 5
networks:
- ocdp-network
# ==================================================
# Networks
# ==================================================
networks:
ocdp-network:
driver: bridge
name: ocdp-network
# ==================================================
# Volumes
# ==================================================
volumes:
frontend_dist:
driver: local
frontend_node_modules:
driver: local