This commit is contained in:
mangomqy
2025-11-13 02:54:06 +00:00
commit c5e51ed069
254 changed files with 54901 additions and 0 deletions

90
docker-compose.yml Normal file
View File

@ -0,0 +1,90 @@
# ==================================================
# 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