102 lines
3.5 KiB
YAML
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:
|