Files
abot/docker-compose.yml
2026-05-07 10:29:03 +08:00

102 lines
3.5 KiB
YAML

services:
mariadb:
image: mariadb:11
container_name: abot-mariadb
restart: unless-stopped
environment:
# 数据库初始化参数统一通过 compose 管理,便于首次部署和后续迁移。
MARIADB_ROOT_PASSWORD: ${ABOT_DB_PASSWORD:-please_change_me}
MARIADB_DATABASE: ${ABOT_DB_NAME:-message_archive}
TZ: ${TZ:-Asia/Shanghai}
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
ports:
- "${ABOT_DB_PORT_EXPOSED:-3306}:3306"
volumes:
# 独立数据卷保证数据库升级或重建容器后数据仍然保留。
- mariadb_data:/var/lib/mysql
healthcheck:
test: ["CMD", "mariadb-admin", "ping", "-h", "127.0.0.1", "-p${ABOT_DB_PASSWORD:-please_change_me}"]
interval: 10s
timeout: 5s
retries: 10
start_period: 20s
redis:
image: redis:7
container_name: abot-redis
restart: unless-stopped
command: >
sh -c '
if [ -n "$${ABOT_REDIS_PASSWORD}" ]; then
exec redis-server --appendonly yes --requirepass "$${ABOT_REDIS_PASSWORD}";
else
exec redis-server --appendonly yes;
fi'
environment:
ABOT_REDIS_PASSWORD: ${ABOT_REDIS_PASSWORD:-}
TZ: ${TZ:-Asia/Shanghai}
ports:
- "${ABOT_REDIS_PORT_EXPOSED:-6379}:6379"
volumes:
# Redis 使用 AOF 持久化,兼顾易用性与基础数据保留能力。
- redis_data:/data
healthcheck:
test: ["CMD-SHELL", "if [ -n \"$${ABOT_REDIS_PASSWORD}\" ]; then redis-cli -a \"$${ABOT_REDIS_PASSWORD}\" ping; else redis-cli ping; fi"]
interval: 10s
timeout: 5s
retries: 10
start_period: 10s
abot:
build:
context: .
dockerfile: Dockerfile
container_name: abot-app
restart: unless-stopped
depends_on:
mariadb:
condition: service_healthy
redis:
condition: service_healthy
env_file:
# 默认从项目根目录 .env 读取部署配置,与你现有的环境变量治理方式保持一致。
- .env
environment:
TZ: ${TZ:-Asia/Shanghai}
ABOT_ENVIRONMENT: ${ABOT_ENVIRONMENT:-production}
ABOT_DB_HOST: mariadb
ABOT_DB_PORT: 3306
ABOT_DB_NAME: ${ABOT_DB_NAME:-message_archive}
ABOT_DB_USER: ${ABOT_DB_USER:-root}
ABOT_DB_PASSWORD: ${ABOT_DB_PASSWORD:-please_change_me}
ABOT_REDIS_HOST: redis
ABOT_REDIS_PORT: 6379
ABOT_REDIS_DB: ${ABOT_REDIS_DB:-0}
ABOT_REDIS_PASSWORD: ${ABOT_REDIS_PASSWORD:-}
DASHBOARD_HOST: 0.0.0.0
DASHBOARD_PORT: ${DASHBOARD_PORT:-8888}
WECHAT_SERVER_URL: ${WECHAT_SERVER_URL:-http://host.docker.internal:8059/}
WECHAT_SERVER_IP: ${WECHAT_SERVER_IP:-host.docker.internal}
WECHAT_SERVER_PORT: ${WECHAT_SERVER_PORT:-8059}
WECHAT_SERVER_TYPE: ${WECHAT_SERVER_TYPE:-legacy_855}
WECHAT_WXID: ${WECHAT_WXID:-}
WECHAT_DEVICE_NAME: ${WECHAT_DEVICE_NAME:-}
WECHAT_DEVICE_ID: ${WECHAT_DEVICE_ID:-}
WECHAT_STATE_FILE: ${WECHAT_STATE_FILE:-}
ports:
- "${DASHBOARD_PORT:-8888}:8888"
volumes:
# 日志目录映射到宿主机,方便排障与运维备份。
- ./logs:/app/logs
# 保留 provider 目录下的本地登录态缓存,避免容器重建后丢失 wxid / device 信息。
- ./wechat_ipad/providers:/app/wechat_ipad/providers
extra_hosts:
# 兼容 Linux 环境下通过 host.docker.internal 访问宿主机上的 wechat_ipad server。
- "host.docker.internal:host-gateway"
volumes:
mariadb_data:
redis_data: