103 lines
3.6 KiB
Bash
103 lines
3.6 KiB
Bash
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
|
||
mkdir -p /app/logs
|
||
|
||
# 首次启动时自动生成最小可运行配置:
|
||
# 1. 若用户已经通过挂载文件提供 config.yaml,则完全尊重现有配置;
|
||
# 2. 若未提供,则根据 .env / compose 环境变量生成一份安全模板;
|
||
# 3. 模板中的敏感值继续走环境变量占位,避免把真实密钥写进镜像层。
|
||
if [ ! -f /app/config.yaml ]; then
|
||
cat > /app/config.yaml <<EOF
|
||
environment: "\${ABOT_ENVIRONMENT:production}"
|
||
plugin_dir: "\${ABOT_PLUGIN_DIR:plugins}"
|
||
|
||
db_config:
|
||
pool_name: "\${ABOT_DB_POOL_NAME:wechat_boot_pool}"
|
||
pool_size: "\${ABOT_DB_POOL_SIZE:10}"
|
||
host: "\${ABOT_DB_HOST:127.0.0.1}"
|
||
port: "\${ABOT_DB_PORT:3306}"
|
||
prot: "\${ABOT_DB_PORT:3306}"
|
||
user: "\${ABOT_DB_USER:root}"
|
||
password: "\${ABOT_DB_PASSWORD}"
|
||
database: "\${ABOT_DB_NAME:message_archive}"
|
||
charset: "utf8mb4"
|
||
use_unicode: true
|
||
get_warnings: true
|
||
pool_reset_session: true
|
||
|
||
redis_config:
|
||
host: "\${ABOT_REDIS_HOST:127.0.0.1}"
|
||
port: "\${ABOT_REDIS_PORT:6379}"
|
||
password: "\${ABOT_REDIS_PASSWORD:}"
|
||
db: "\${ABOT_REDIS_DB:0}"
|
||
decode_responses: true
|
||
|
||
email_config:
|
||
smtp_server: "\${ABOT_EMAIL_SMTP_SERVER:smtp.163.com}"
|
||
smtp_port: "\${ABOT_EMAIL_SMTP_PORT:465}"
|
||
sender_email: "\${ABOT_EMAIL_SENDER:}"
|
||
sender_password: "\${ABOT_EMAIL_PASSWORD:}"
|
||
alert_recipient: "\${ABOT_EMAIL_ALERT_RECIPIENT:}"
|
||
|
||
glances:
|
||
host: "\${ABOT_GLANCES_HOST:127.0.0.1}"
|
||
port: "\${ABOT_GLANCES_PORT:61208}"
|
||
|
||
wx_config:
|
||
admin: [ "\${ABOT_WX_ADMIN:admin}" ]
|
||
|
||
wechat_ipad:
|
||
server_url: "\${WECHAT_SERVER_URL:http://host.docker.internal:8059/}"
|
||
server_ip: "\${WECHAT_SERVER_IP:host.docker.internal}"
|
||
server_port: "\${WECHAT_SERVER_PORT:8059}"
|
||
server_type: "\${WECHAT_SERVER_TYPE:legacy_855}"
|
||
# 864 风格 server 依赖固定 key,这里一并写入自动生成的配置模板:
|
||
# 1. 避免容器部署场景下还要手工进容器补 config.yaml;
|
||
# 2. 855/859 保持可留空,不影响现有默认行为;
|
||
# 3. 真正的值仍由 `.env` / compose 环境变量注入,不会写死在镜像层。
|
||
server_key: "\${WECHAT_SERVER_KEY:}"
|
||
wxid: "\${WECHAT_WXID:}"
|
||
device_name: "\${WECHAT_DEVICE_NAME:}"
|
||
device_id: "\${WECHAT_DEVICE_ID:}"
|
||
state_file: "\${WECHAT_STATE_FILE:}"
|
||
legacy_config_path: "\${WECHAT_LEGACY_CONFIG_PATH:wechat_ipad/config.toml}"
|
||
EOF
|
||
fi
|
||
|
||
# Dashboard 单独使用 config.toml:
|
||
# 1. 公开仓库里的默认账号和 webhook token 不适合作为最终线上值;
|
||
# 2. 这里允许通过环境变量在容器启动期覆盖默认配置,降低“改完 .env 还要再改一份 TOML”的成本;
|
||
# 3. 若用户自己挂载了定制版 config.toml,也仍然可以继续复用,因为运行时还会再做环境变量兜底覆盖。
|
||
if [ ! -f /app/admin/dashboard/config.toml ]; then
|
||
cat > /app/admin/dashboard/config.toml <<EOF
|
||
[server]
|
||
host = "0.0.0.0"
|
||
port = ${DASHBOARD_PORT:-8888}
|
||
|
||
[auth]
|
||
username = "${ABOT_DASHBOARD_USERNAME:-admin}"
|
||
password = "${ABOT_DASHBOARD_PASSWORD:-ChangeThisPassword_2026!}"
|
||
session_timeout_minutes = 480
|
||
max_failed_attempts = 5
|
||
lock_seconds = 900
|
||
cookie_secure = false
|
||
cookie_samesite = "Lax"
|
||
|
||
[trendradar_webhook]
|
||
enabled = false
|
||
token = "${ABOT_TRENDRADAR_WEBHOOK_TOKEN:-please_change_this_token}"
|
||
default_group_ids = []
|
||
allow_payload_target_groups = false
|
||
send_timeout_seconds = 20
|
||
EOF
|
||
fi
|
||
|
||
# wechat_ipad 登录态现在默认落到 provider 自己目录下:
|
||
# 1. 静态连接配置已统一走 `.env` / `config.yaml`;
|
||
# 2. 855 当前默认会写到 `wechat_ipad/providers/legacy_855/runtime_state.toml`;
|
||
# 3. 这里只预创建 provider 根目录,真正状态文件由运行期按 provider 自动写入。
|
||
mkdir -p /app/wechat_ipad/providers
|
||
|
||
exec "$@"
|