xlcp/deploy/docker-compose.yml
tangweijie c5909c6266 feat: 添加后端和前端编译脚本及Docker配置
- 新增 build.sh 脚本用于编译后端 Java 项目和前端 Vue3 项目,并生成部署包
- 新增 docker-compose.yml 文件以配置 MySQL、Redis、后端和前端服务
- 新增 application-prod.yaml 配置文件用于后端服务
- 新增 Dockerfile 用于后端服务的容器化部署
- 新增 SQL 初始化脚本 xlcp_dev.sql
- 新增部署文档 DEPLOYMENT.md 详细描述部署流程和环境要求
2026-01-22 09:29:17 +08:00

127 lines
3.2 KiB
YAML

version: "3.8"
name: xl-prison-system
# 复用 RAGFlow 平台的 Docker 镜像创建独立的中间件服务
# MySQL: 基于 ragflow-mysql-1 镜像 (mysql:8.0.39)
# Redis: 基于 ragflow-redis-1 镜像 (redis:6-alpine / valkey:8)
services:
# MySQL 数据库(复用 RAGFlow 镜像)
mysql:
image: mysql:8.0.39
container_name: xl-prison-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: Prison2024!@
MYSQL_DATABASE: prison
MYSQL_CHARACTER_SET_SERVER: utf8mb4
MYSQL_COLLATION_SERVER: utf8mb4_unicode_ci
ports:
- "3306:3306"
volumes:
- ./data/mysql:/var/lib/mysql
- ./sql:/docker-entrypoint-initdb.d:ro
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-pPrison2024!@"]
interval: 10s
timeout: 5s
retries: 5
networks:
- xl-prison-network
deploy:
resources:
limits:
memory: 2G
reservations:
memory: 512M
# Redis 缓存(复用 RAGFlow 镜像)
redis:
image: redis:6-alpine
container_name: xl-prison-redis
restart: unless-stopped
ports:
- "6379:6379"
volumes:
- ./data/redis:/data
command: redis-server --requirepass Prison2024!@ --appendonly yes --maxmemory 512mb --maxmemory-policy allkeys-lru
healthcheck:
test: ["CMD", "redis-cli", "-a", "Prison2024!@", "ping"]
interval: 10s
timeout: 5s
retries: 5
networks:
- xl-prison-network
deploy:
resources:
limits:
memory: 512M
reservations:
memory: 256M
# 后端服务
backend:
build:
context: ./backend
dockerfile: Dockerfile
container_name: xl-prison-backend
restart: unless-stopped
ports:
- "48080:48080"
environment:
SPRING_PROFILES_ACTIVE: prod
JAVA_OPTS: -Xms512m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/app/heapdump -Djava.security.egd=file:/dev/./urandom
volumes:
- ./backend/config:/app/config:ro
- ./logs/backend:/app/logs
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
networks:
- xl-prison-network
deploy:
resources:
limits:
memory: 2G
reservations:
memory: 512M
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:48080/actuator/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
# 前端服务
frontend:
image: nginx:alpine
container_name: xl-prison-frontend
restart: unless-stopped
ports:
- "8080:80"
volumes:
- ./frontend/dist:/usr/share/nginx/html:ro
- ./frontend/nginx.conf:/etc/nginx/nginx.conf:ro
- ./logs/nginx:/var/log/nginx
depends_on:
- backend
networks:
- xl-prison-network
deploy:
resources:
limits:
memory: 256M
reservations:
memory: 128M
networks:
xl-prison-network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16