news-classifier/docker/docker-compose.yml

84 lines
2.0 KiB
YAML

version: '3.8'
services:
# MySQL数据库
mysql:
image: mysql:8.0
container_name: news-classifier-mysql
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: news_classifier
TZ: Asia/Shanghai
volumes:
- mysql-data:/var/lib/mysql
- ../docs/schema.sql:/docker-entrypoint-initdb.d/schema.sql
command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
networks:
- news-classifier-network
# Redis缓存
redis:
image: redis:7-alpine
container_name: news-classifier-redis
restart: always
ports:
- "6379:6379"
volumes:
- redis-data:/data
command: redis-server --appendonly yes
networks:
- news-classifier-network
# Elasticsearch (可选 - 全文检索)
elasticsearch:
image: elasticsearch:8.11.0
container_name: news-classifier-elasticsearch
restart: always
ports:
- "9200:9200"
- "9300:9300"
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- es-data:/usr/share/elasticsearch/data
networks:
- news-classifier-network
# 后端服务
backend:
build:
context: ../backend
dockerfile: Dockerfile
container_name: news-classifier-backend
restart: always
ports:
- "8080:8080"
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/news_classifier?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: root
SPRING_DATA_REDIS_HOST: redis
SPRING_DATA_REDIS_PORT: 6379
depends_on:
- mysql
- redis
networks:
- news-classifier-network
volumes:
mysql-data:
driver: local
redis-data:
driver: local
es-data:
driver: local
networks:
news-classifier-network:
driver: bridge