83 lines
2.6 KiB
YAML
83 lines
2.6 KiB
YAML
name: ${COMPOSE_PROJECT_NAME:-wolin-cloud}
|
|||
|
|
|
||
|
|
services:
|
||
|
|
db:
|
||
|
|
image: mysql:8.4
|
||
|
|
restart: unless-stopped
|
||
|
|
environment:
|
||
|
|
MYSQL_DATABASE: student_management_system
|
||
|
|
MYSQL_USER: wolin
|
||
|
|
MYSQL_PASSWORD: ${DB_PASSWORD:?Set DB_PASSWORD in the cloud environment file}
|
||
|
|
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:?Set DB_ROOT_PASSWORD}
|
||
|
|
TZ: Asia/Shanghai
|
||
|
|
command: ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_0900_ai_ci", "--innodb-buffer-pool-size=256M", "--max-connections=80"]
|
||
|
|
volumes:
|
||
|
|
- mysql_data:/var/lib/mysql
|
||
|
|
networks: [database]
|
||
|
|
healthcheck:
|
||
|
|
test: ["CMD-SHELL", "MYSQL_PWD=\"$$MYSQL_ROOT_PASSWORD\" mysql -h 127.0.0.1 -uroot -e 'SELECT 1' >/dev/null 2>&1"]
|
||
|
|
interval: 5s
|
||
|
|
timeout: 5s
|
||
|
|
retries: 30
|
||
|
|
start_period: 30s
|
||
|
|
logging:
|
||
|
|
options: {max-size: "10m", max-file: "3"}
|
||
|
|
|
||
|
|
web:
|
||
|
|
image: wolin-student-management:cloud
|
||
|
|
build:
|
||
|
|
context: .
|
||
|
|
args:
|
||
|
|
PIP_INDEX_URL: ${PIP_INDEX_URL:-https://pypi.org/simple}
|
||
|
|
restart: unless-stopped
|
||
|
|
init: true
|
||
|
|
command: ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8004", "--root-path", "/wolin", "--forwarded-allow-ips", "*"]
|
||
|
|
environment:
|
||
|
|
DB_HOST: db
|
||
|
|
DB_PORT: "3306"
|
||
|
|
DB_NAME: student_management_system
|
||
|
|
DB_USER: wolin
|
||
|
|
DB_PASSWORD: ${DB_PASSWORD:?Set DB_PASSWORD}
|
||
|
|
CORS_ORIGINS: ${CORS_ORIGINS:-https://zhouxing199901.site}
|
||
|
|
DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:-}
|
||
|
|
DEEPSEEK_MODEL: ${DEEPSEEK_MODEL:-deepseek-flash}
|
||
|
|
TZ: Asia/Shanghai
|
||
|
|
AUTH_ENABLED: "true"
|
||
|
|
AUTH_COOKIE_SECURE: ${AUTH_COOKIE_SECURE:-true}
|
||
|
|
WOLIN_AUTH_USER: ${WOLIN_AUTH_USER:-admin}
|
||
|
|
WOLIN_AUTH_PASSWORD_HASH: ${WOLIN_AUTH_PASSWORD_HASH:?Generate administrator credentials}
|
||
|
|
WOLIN_SESSION_SECRET: ${WOLIN_SESSION_SECRET:?Generate a session signing secret}
|
||
|
|
depends_on:
|
||
|
|
db: {condition: service_healthy}
|
||
|
|
networks: [database, frontend]
|
||
|
|
logging:
|
||
|
|
options: {max-size: "10m", max-file: "3"}
|
||
|
|
|
||
|
|
gateway:
|
||
|
|
image: caddy:2-alpine
|
||
|
|
restart: unless-stopped
|
||
|
|
ports:
|
||
|
|
- "${HTTP_BIND:-0.0.0.0}:${HTTP_PORT:-80}:80"
|
||
|
|
- "${HTTP_BIND:-0.0.0.0}:${HTTPS_PORT:-443}:443"
|
||
|
|
environment:
|
||
|
|
SITE_ADDRESS: ${SITE_ADDRESS:-zhouxing199901.site}
|
||
|
|
PUBLIC_IP: ${PUBLIC_IP:-}
|
||
|
|
volumes:
|
||
|
|
- ${CADDY_CONFIG_FILE:-./deploy/Caddyfile}:/etc/caddy/Caddyfile:ro
|
||
|
|
- ./deploy/site:/srv:ro
|
||
|
|
- caddy_data:/data
|
||
|
|
- caddy_config:/config
|
||
|
|
networks: [frontend]
|
||
|
|
logging:
|
||
|
|
options: {max-size: "10m", max-file: "3"}
|
||
|
|
|
||
|
|
volumes:
|
||
|
|
mysql_data:
|
||
|
|
caddy_data:
|
||
|
|
caddy_config:
|
||
|
|
|
||
|
|
networks:
|
||
|
|
database:
|
||
|
|
internal: true
|
||
|
|
frontend:
|