WechatOnCloud/.env.example

149 lines
10 KiB
Plaintext
Raw Normal View History

# 复制本文件为 .env 即可覆盖默认配置。全部可选——不建 .env 也能直接 `docker compose up -d`。
# 面板首个管理员账号 / 密码(仅首次启动、无账号文件时写入)。强烈建议改掉默认密码!
WOC_USER=admin
WOC_PASSWORD=wechat
# 镜像版本:默认 latest上线后建议钉到具体版本如 1.0.0,注意不带 v以便可控升级。
# 同时作用于面板镜像和新建微信实例所用镜像。
WOC_VERSION=latest
# 镜像源前缀registry + 命名空间)。本项目镜像同步发布到 Docker Hub 和 GHCR。
#
# 默认走 Docker Hub国内/国际通用、无需登录即可拉公开镜像,飞牛 OS(fnOS) 等 NAS 还内置拉取加速。
# 拉不动时按需切到备用源:
# WOC_IMAGE_PREFIX=ghcr.io/gloridust # GitHub Container Registry备用
# WOC_IMAGE_PREFIX=ghcr.nju.edu.cn/gloridust # 南京大学镜像站反代 ghcr.io国内较稳
# WOC_IMAGE_PREFIX=registry.cn-hangzhou.aliyuncs.com/你的命名空间 # 自己的阿里云 ACR / 腾讯 TCR / 华为 SWR
#
# 反代会把 docker.io/gloridust/xxx或 ghcr.io/gloridust/xxx映射为 <反代>/gloridust/xxx。
WOC_IMAGE_PREFIX=docker.io/gloridust
# 宿主用户 uid/gid飞牛上用 `id` 命令查看;单用户 NAS 一般是 1000
# 透传给每个微信实例容器,决定面板数据与微信数据卷的属主。
WOC_PUID=1000
WOC_PGID=1000
# 时区
WOC_TZ=Asia/Shanghai
# 面板对外端口(宿主侧,默认用冷门端口避免冲突;容器内固定 8080
# 面板是唯一对外入口;微信实例不直接对宿主暴露,由面板反向代理。
WOC_HTTP_PORT=36080
# 面板允许的 Host 头白名单。用于阻止 DNS rebinding攻击者控制的域名解析到面板
# LAN/loopback 地址后,浏览器视其为同源、自动带上面板 cookie能从受害者浏览器内
# 发起任何已鉴权 API 调用(含挂载 docker.sock 的管理端点sameSite=lax 不挡此攻击。
#
# 默认始终放行localhost / 127.0.0.1 / ::1 + RFC1918 私网10/8、172.16-31/12、
# 192.168/16、169.254/16—— 覆盖直连 NAS / 局域网访问场景,**不需要改任何东西**。
#
# 套 HTTPS 反代部署Caddy / nginx / 飞牛 内置反代 / Cloudflare Tunnel 等)时,把对外
# 域名加进来。**支持多个域名,用英文逗号分隔**;填免端口主机名,大小写不敏感:
#
# 单域名: PANEL_ALLOWED_HOSTS=woc.example.com
# 多域名: PANEL_ALLOWED_HOSTS=woc.example.com,woc.lan,wechat.mynas.cn
# 通配子域: PANEL_ALLOWED_HOSTS=*.example.com (匹配 a.example.com不含裸 example.com
# 含 IPv6 字面量PANEL_ALLOWED_HOSTS=[2001:db8::1]
#
# 改完务必用 **docker compose up -d** 让容器带新环境重建;只 `docker restart` **不会**加载新值!
#
# 排错:若反代/Cloudflare 部署后仍看到 400 "Host header not allowed",错误响应里会回显面板实际
# 收到的 host / forwardedHost —— 把那个值(或其通配)加进本白名单即可。面板也会自动接受
# X-Forwarded-Host可信反代设置故多数反代无需额外配置。
PANEL_ALLOWED_HOSTS=
# ── 音频 / 麦克风 / 摄像头 ───────────────────────────────────
# 音频(听)**自动开启**,进入桌面、点一下画面(浏览器自动播放策略要求一次手势)即可出声,
# 无需手动找工具条。仅当前聚焦的实例出声,切走/切到别的实例会自动断开,避免多端串音。
# 麦克风(说) / 摄像头(视频):浏览器要求"安全上下文",即必须通过 HTTPS 访问面板
# (或 localhost。生产环境务必给面板套 HTTPS反代/证书),否则浏览器会禁用麦克风与摄像头。
#
# 摄像头还需要宿主提供一个虚拟视频设备v4l2loopback
# 1) 宿主安装并加载内核模块:
# Ubuntu/Debian: sudo apt install v4l2loopback-dkms && sudo modprobe v4l2loopback
# (飞牛/其它发行版若自带 v4l2loopback 同理 modprobe没有则摄像头不可用其余功能正常
# 2) 确认出现了 /dev/videoN 设备。
# 3) 二选一让实例容器拿到该设备:
# a) 自动:保留 compose 里的 `/dev:/host-dev:ro` 挂载,面板会自动探测并映射;
# b) 显式:在下面列出设备(逗号分隔),并可删掉那条 /host-dev 挂载。
# 留空 = 不映射摄像头(音频/麦克风不受影响)。
WOC_VIDEO_DEVICES=
# ── 实例资源 / 稳定性 ───────────────────────────────────────
# GPU 硬件编码baseimage 检测到 /dev/dri/renderD* 时会给 Xvnc 加 -hw3dGPU 加速编码)。
# 在 WSL2 / 虚拟 GPU如 Docker Desktop on Windows该路径会导致 Xvnc 内存持续膨胀
# (实测 21 小时涨到 ~9GB。本项目已强制软件渲染LIBGL_ALWAYS_SOFTWARE=1hw3d 对微信
# 这类静态界面收益甚微,故默认关闭。仅在你有真实可用的 GPU 且确认无内存问题时再设为 1 启用。
WOC_ENABLE_GPU=
# 每个微信实例容器的内存上限GiB。默认空 = 不限制(与旧版一致)。
# 作为兜底:万一某进程异常增长,命中上限时容器内 OOM 杀进程、由 s6 自动重启 VNC
# 避免拖垮整台宿主。常规使用单实例约需 1~1.5GiB,设 3~4 较稳妥。
WOC_INSTANCE_MEM_GB=
# ── 设备伪装(降低被微信判"非真实设备"风控的概率) ───────────
# 每个实例默认已自动做:唯一且持久的 machine-id避免全网共用同一个触发"设备农场"风控)、
# 像个人电脑的 hostname不再是 woc-wx-<hex>)、移除 /.dockerenv 容器标记。这些恒定开启。
#
# WOC_SPOOF_OS 是否把 /etc/os-release 伪装成 deepin微信官方支持的发行版且 Deepin 基于
# Debian、与本镜像用户态一致。默认 1设 0 恢复显示真实 Debian。
# 说明:设备伪装是「尽力而为」,非保证不被封;详见 doc/设备伪装.md。
WOC_SPOOF_OS=1
# 实例桌面深色:无需在此配置。面板顶栏右上角的主题开关(管理员)控制,设置持久化在面板数据。
# 仅对**浏览器(Chromium)实例**生效(--force-dark-mode重启实例后生效微信不吃命令行参数、也不跟随
# 极简容器的桌面信号,微信深色请在微信「设置→通用→深色模式」里手动选(随数据卷持久化)。
# ── 自愈 watchdog应对 KasmVNC/Xvnc 长跑内存泄漏) ───────────
# 实测 Xvnc 长跑 24h 可膨胀到 ~9GiB原因在 KasmVNC/Xvnc 自身的 framebuffer / 软渲染 cache
# 累积,不归本项目控制。面板内置一个 watchdog周期性检查每个 running 实例的 working set
# 内存(= docker stats 显示值),按两档阈值(这里设全局默认;每个实例可在「管理 → 实例卡片
# → 安全」按钮里单独覆盖)触发主动 stop + run聊天数据在卷里、登录态本来也会定期失效
# 可控时机自愈优于撑到 OOM
#
# soft 超过且【当前没人在远程会话】才重启 → 柔和自愈,不打扰使用者
# hard 超过即重启(无视会话),防止 OOM 拖垮宿主
#
# WOC_INSTANCE_MEM_SOFT_MB soft 阈值MiB默认 1500
# WOC_INSTANCE_MEM_HARD_MB hard 阈值MiB默认 2500兼容旧名 WOC_INSTANCE_MEM_LIMIT_MB
# WOC_WATCHDOG_INTERVAL_SEC 巡检间隔秒,默认 3005 分钟);最小 600 = 关闭整个 watchdog
# WOC_WATCHDOG_HEALTH_FAILS VNC 响应性探测:连续无响应几次才重启实例;默认 0 = 关闭该探测(仅保留内存自愈)。
# 健康实例探测约 1ms但宿主级 CPU/IO 偶发争用会让探测超时被误判为卡死而重启正常实例,故默认关闭;
# 想要"卡在正在连接桌面"时自动兜底,可设为正整数(如 3 = 连续 3 次≈15 分钟无响应才重启)。
#
# 调参建议:日常活跃单实例约 1500 MiBsoft 应略高于此(如 2000hard 远低于宿主可用内存。
WOC_INSTANCE_MEM_SOFT_MB=1500
WOC_INSTANCE_MEM_HARD_MB=2500
WOC_WATCHDOG_INTERVAL_SEC=300
# WOC_WATCHDOG_HEALTH_FAILS=0
# ── bridge 业务 API 的 M2M 鉴权 ─────────────────────────────
# 外部系统(如 ForcePilot 后端)以 M2M 方式调用 /api/bridge/:id/* 时所需的 Bearer token。
# 配置后,这些请求只需带 Authorization: Bearer <token> 即可,无需管理员会话 cookie。
# 不配置(留空)时退化为仅允许管理员会话鉴权(兼容旧部署,浏览器访问不受影响)。
#
# 生成建议: openssl rand -hex 32 (64 位十六进制字符)
#
# 权限范围: 持有该 token 即可访问全部实例的全部 bridge 业务 API
# (发消息/读消息/查联系人/退出登录/重启微信等),无 per-instance / per-action 粒度。
# 请妥善保管;轮换时修改 .env 后 `docker compose up -d` 重建面板容器即生效。
#
# 调用示例(ForcePilot 侧):
# GET http://<nas_host>:36080/api/bridge/<instance_id>/api/messages/since
# Authorization: Bearer <WOC_BRIDGE_API_TOKEN>
WOC_BRIDGE_API_TOKEN=
# ── woc-bridge 业务 API ──────────────────────────────────────
# bridge 服务在实例容器内监听 8088 端口,由面板 /api/bridge/:id/* 反代访问。
# 端口 8088 与 Dockerfile EXPOSE / 面板反代 target 三处耦合,不可配置;
# 以下配置作用于 bridge 服务行为(由面板 envList 透传给实例容器):
# WOC_BRIDGE_SEND_DELAY_MS 发送消息串行化间隔(毫秒),默认 800
# WOC_BRIDGE_MAX_BATCH_SIZE 单次消息拉取建议上限,默认 50/api/status 返回)
# WOC_BRIDGE_POLL_INTERVAL_MS 轮询建议间隔(毫秒),默认 2000/api/status 返回)
# WOC_BRIDGE_MAX_CALLS_PER_SEC 单实例每秒调用上限,默认 10
WOC_BRIDGE_SEND_DELAY_MS=800
WOC_BRIDGE_MAX_BATCH_SIZE=50
WOC_BRIDGE_POLL_INTERVAL_MS=2000
WOC_BRIDGE_MAX_CALLS_PER_SEC=10