version: '3.8' services: # MySQL数据库 mysql: image: mysql:8.0 container_name: agricultural-mysql restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: agricultural_stock MYSQL_USER: agricultural MYSQL_PASSWORD: agricultural123 ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql - ./sql/init.sql:/docker-entrypoint-initdb.d/init.sql command: --default-authentication-plugin=mysql_native_password networks: - agricultural-network # Redis缓存 redis: image: redis:7-alpine container_name: agricultural-redis restart: unless-stopped ports: - "6379:6379" volumes: - redis_data:/data networks: - agricultural-network # Kafka相关服务已移除 # Spring Boot后端服务 backend: build: context: ./backend dockerfile: Dockerfile container_name: agricultural-backend restart: unless-stopped depends_on: - mysql - redis environment: SPRING_PROFILES_ACTIVE: docker SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/agricultural_stock?useSSL=false&serverTimezone=Asia/Shanghai SPRING_DATASOURCE_USERNAME: root SPRING_DATASOURCE_PASSWORD: 123456 SPRING_REDIS_HOST: redis SPRING_REDIS_PORT: 6379 # Kafka配置已移除 ports: - "8080:8080" volumes: - backend_logs:/app/logs networks: - agricultural-network # Vue.js前端服务 frontend: build: context: ./frontend dockerfile: Dockerfile container_name: agricultural-frontend restart: unless-stopped depends_on: - backend ports: - "3000:80" networks: - agricultural-network # Python数据采集服务 data-collector: build: context: ./data-collector dockerfile: Dockerfile container_name: agricultural-collector restart: unless-stopped depends_on: - mysql environment: DB_HOST: mysql DB_PORT: 3306 DB_NAME: agricultural_stock DB_USER: root DB_PASSWORD: 123456 # Kafka配置已移除 volumes: - collector_logs:/app/logs networks: - agricultural-network # Spark数据处理服务 spark-master: image: bitnami/spark:3.4 container_name: agricultural-spark-master restart: unless-stopped environment: - SPARK_MODE=master - SPARK_RPC_AUTHENTICATION_ENABLED=no - SPARK_RPC_ENCRYPTION_ENABLED=no - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no - SPARK_SSL_ENABLED=no ports: - "8081:8080" - "7077:7077" volumes: - spark_data:/opt/bitnami/spark/data - ./spark-processor:/app networks: - agricultural-network spark-worker: image: bitnami/spark:3.4 container_name: agricultural-spark-worker restart: unless-stopped depends_on: - spark-master environment: - SPARK_MODE=worker - SPARK_MASTER_URL=spark://spark-master:7077 - SPARK_WORKER_MEMORY=2G - SPARK_WORKER_CORES=2 - SPARK_RPC_AUTHENTICATION_ENABLED=no - SPARK_RPC_ENCRYPTION_ENABLED=no - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no - SPARK_SSL_ENABLED=no volumes: - spark_data:/opt/bitnami/spark/data - ./spark-processor:/app networks: - agricultural-network # Jupyter Notebook (用于LSTM模型开发) jupyter: image: jupyter/tensorflow-notebook:latest container_name: agricultural-jupyter restart: unless-stopped ports: - "8888:8888" environment: JUPYTER_ENABLE_LAB: "yes" volumes: - jupyter_data:/home/jovyan/work - ./ml-predictor:/home/jovyan/work/ml-predictor networks: - agricultural-network volumes: mysql_data: redis_data: # Kafka volumes已移除 backend_logs: collector_logs: spark_data: jupyter_data: networks: agricultural-network: driver: bridge