imetting/docker-compose.yml

146 lines
3.7 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

version: '3.8'
services:
# MySQL数据库
mysql:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.0
container_name: imeeting-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-Unis@123}
MYSQL_DATABASE: ${MYSQL_DATABASE:-imeeting}
MYSQL_USER: ${MYSQL_USER:-imeeting}
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-Unis@123}
TZ: Asia/Shanghai
# 仅在需要外部访问数据库时暴露端口
ports:
- "${MYSQL_PORT:-3306}:3306"
volumes:
- ./data/mysql:/var/lib/mysql
- ./backend/sql:/docker-entrypoint-initdb.d:ro
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --default-authentication-plugin=mysql_native_password
- --max_connections=1000
- --max_allowed_packet=256M
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD:-Unis@123}"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
networks:
- imeeting-network
# Redis缓存
redis:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/redis:7-alpine
container_name: imeeting-redis
restart: unless-stopped
environment:
TZ: Asia/Shanghai
# 仅在需要外部访问Redis时暴露端口
ports:
- "${REDIS_PORT:-6379}:6379"
volumes:
- ./data/redis:/data
command: >
redis-server
--appendonly yes
--requirepass ${REDIS_PASSWORD:-Unis@123}
--maxmemory 2gb
--maxmemory-policy allkeys-lru
healthcheck:
test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
interval: 10s
timeout: 3s
retries: 5
start_period: 10s
networks:
- imeeting-network
# 后端服务
backend:
build:
context: ./backend
dockerfile: Dockerfile
container_name: imeeting-backend
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
environment:
# Python环境
TZ: Asia/Shanghai
PYTHONPATH: /app
PYTHONUNBUFFERED: 1
# 数据库配置
DB_HOST: mysql
DB_PORT: 3306
DB_USER: ${MYSQL_USER:-imeeting}
DB_PASSWORD: ${MYSQL_PASSWORD:-Unis@123}
DB_NAME: ${MYSQL_DATABASE:-imeeting}
# Redis配置
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_DB: ${REDIS_DB:-0}
REDIS_PASSWORD: ${REDIS_PASSWORD:-Unis@123}
# API配置
API_HOST: 0.0.0.0
API_PORT: 8000
BASE_URL: ${BASE_URL:-http://localhost}
# LLM配置
QWEN_API_KEY: ${QWEN_API_KEY}
# 后端不直接暴露端口通过nginx代理访问
ports:
- "${BACKEND_PORT:-8000}:8000"
volumes:
- ./data/uploads:/app/uploads
- ./data/logs/backend:/app/logs
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- imeeting-network
# 前端服务
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
container_name: imeeting-frontend
restart: unless-stopped
depends_on:
backend:
condition: service_healthy
environment:
TZ: Asia/Shanghai
# 前端不直接暴露端口通过nginx代理访问
ports:
- "${HTTP_PORT:-80}:80"
volumes:
- ./data/logs/frontend:/var/log/nginx
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:80/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- imeeting-network
# 网络配置
networks:
imeeting-network:
driver: bridge