Files
xiaozhi-esp32-server/docker-compose.local.yml
2025-11-04 18:27:30 +08:00

86 lines
2.6 KiB
YAML

services:
# Python websocket/server service
xiaozhi-esp32-server:
build:
context: .
dockerfile: Dockerfile-server
container_name: xiaozhi-esp32-server
depends_on:
- xiaozhi-esp32-server-web
restart: always
security_opt:
- seccomp:unconfined
environment:
- TZ=Asia/Shanghai
ports:
- "8000:8000" # websocket
- "8003:8003" # http for vision APIs
volumes:
- ./main/xiaozhi-server/data:/opt/xiaozhi-esp32-server/data
# Mount SenseVoiceSmall model file (required)
- ./main/xiaozhi-server/models/SenseVoiceSmall/model.pt:/opt/xiaozhi-esp32-server/models/SenseVoiceSmall/model.pt
# manager-api (Spring Boot) + manager-web (Vue) in one image behind nginx
xiaozhi-esp32-server-web:
build:
context: .
dockerfile: Dockerfile-web
container_name: xiaozhi-esp32-server-web
depends_on:
xiaozhi-esp32-server-db:
condition: service_healthy
xiaozhi-esp32-server-redis:
condition: service_healthy
restart: always
environment:
- TZ=Asia/Shanghai
- SPRING_DATASOURCE_DRUID_URL=jdbc:mysql://xiaozhi-esp32-server-db:3306/xiaozhi_esp32_server?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&connectTimeout=30000&socketTimeout=30000&autoReconnect=true&failOverReadOnly=false&maxReconnects=10
- SPRING_DATASOURCE_DRUID_USERNAME=root
- SPRING_DATASOURCE_DRUID_PASSWORD=123456
- SPRING_DATA_REDIS_HOST=xiaozhi-esp32-server-redis
- SPRING_DATA_REDIS_PASSWORD=
- SPRING_DATA_REDIS_PORT=6379
ports:
- "8002:8002" # console (nginx)
volumes:
- ./main/manager-api/uploadfile:/uploadfile
# MySQL
xiaozhi-esp32-server-db:
image: mysql:latest
container_name: xiaozhi-esp32-server-db
restart: always
expose:
- "3306"
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=xiaozhi_esp32_server
- MYSQL_INITDB_ARGS=--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 45s
retries: 10
volumes:
- ./main/manager-api/mysql/data:/var/lib/mysql
# Redis
xiaozhi-esp32-server-redis:
image: redis:latest
container_name: xiaozhi-esp32-server-redis
restart: always
expose:
- "6379"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 3
networks:
default:
name: xiaozhi-esp32-net