Files
ShiErFeng/docker-compose.yml
T
2026-09-29 09:20:31 +08:00

136 lines
3.8 KiB
YAML

services:
shierfeng-mysql:
image: mysql:8.0
container_name: shierfeng-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:?请在 .env 中设置 MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE:-shierfeng-fastapi}
MYSQL_USER: ${DB_USERNAME:-shierfeng}
MYSQL_PASSWORD: ${DB_PASSWORD:?请在 .env 中设置 DB_PASSWORD}
TZ: ${TZ:-Asia/Shanghai}
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --skip-character-set-client-handshake=1
volumes:
- mysql-data:/var/lib/mysql
- ./shierfeng-fastapi-backend/sql/shierfeng-fastapi.sql:/docker-entrypoint-initdb.d/01-shierfeng-fastapi.sql:ro
ports:
- ${COMPOSE_BIND_IP:-127.0.0.1}:${MYSQL_HOST_PORT:-13307}:3306
healthcheck:
test:
- CMD-SHELL
- >-
mysqladmin ping -h 127.0.0.1 -uroot
-p"$${MYSQL_ROOT_PASSWORD}" --silent
interval: 5s
timeout: 10s
retries: 30
start_period: 20s
networks:
- shierfeng-network
shierfeng-redis:
image: redis:7-alpine
container_name: shierfeng-redis
restart: unless-stopped
command:
- redis-server
- --appendonly
- 'yes'
- --save
- '60'
- '1000'
volumes:
- redis-data:/data
healthcheck:
test: [CMD, redis-cli, ping]
interval: 5s
timeout: 5s
retries: 30
start_period: 5s
networks:
- shierfeng-network
shierfeng-backend-my:
build:
context: ./shierfeng-fastapi-backend
dockerfile: Dockerfile.my
image: shierfeng-backend-my:latest
container_name: shierfeng-backend-my
restart: unless-stopped
environment:
APP_ENV: dockermy
APP_HOST: 0.0.0.0
APP_PORT: '9099'
APP_ROOT_PATH: /docker-api
APP_RELOAD: 'false'
APP_WORKERS: '1'
APP_DEMO_MODE: 'false'
APP_DISABLE_SWAGGER: 'true'
APP_DISABLE_REDOC: 'true'
DB_TYPE: mysql
DB_HOST: shierfeng-mysql
DB_PORT: '3306'
DB_USERNAME: ${DB_USERNAME:-shierfeng}
DB_PASSWORD: ${DB_PASSWORD:?请在 .env 中设置 DB_PASSWORD}
DB_DATABASE: ${MYSQL_DATABASE:-shierfeng-fastapi}
DB_ECHO: 'false'
REDIS_HOST: shierfeng-redis
REDIS_PORT: '6379'
REDIS_USERNAME: ${REDIS_USERNAME:-}
REDIS_PASSWORD: ${REDIS_PASSWORD:-}
REDIS_DATABASE: ${REDIS_DATABASE:-2}
JWT_SECRET_KEY: ${JWT_SECRET_KEY:?请在 .env 中设置 JWT_SECRET_KEY}
TRANSPORT_CRYPTO_ENABLED: ${TRANSPORT_CRYPTO_ENABLED:-false}
TRANSPORT_CRYPTO_MODE: ${TRANSPORT_CRYPTO_MODE:-off}
LOG_FILE_ENABLED: 'false'
LOGURU_STDOUT: 'true'
expose:
- '9099'
ports:
- ${COMPOSE_BIND_IP:-127.0.0.1}:${BACKEND_HOST_PORT:-9099}:9099
depends_on:
shierfeng-mysql:
condition: service_healthy
shierfeng-redis:
condition: service_healthy
healthcheck:
test:
- CMD-SHELL
- >-
python -c "import socket; s=socket.create_connection(('127.0.0.1', 9099), 2); s.close()"
interval: 10s
timeout: 5s
retries: 30
start_period: 20s
networks:
- shierfeng-network
shierfeng-frontend:
build:
context: ./shierfeng-fastapi-frontend
dockerfile: Dockerfile
image: shierfeng-frontend:latest
container_name: shierfeng-frontend
restart: unless-stopped
ports:
- ${COMPOSE_BIND_IP:-127.0.0.1}:${FRONTEND_HOST_PORT:-8080}:80
volumes:
- ./shierfeng-fastapi-frontend/bin/nginx.dockermy.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
shierfeng-backend-my:
condition: service_healthy
networks:
- shierfeng-network
volumes:
mysql-data:
redis-data:
networks:
shierfeng-network:
name: shierfeng-network
driver: bridge