update 26.9.4
This commit is contained in:
Generated
+7
-26
@@ -4,14 +4,11 @@
|
||||
<option name="autoReloadType" value="ALL" />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="ae3fb6a0-aca4-4c0a-858b-91952e6dcdd3" name="更改" comment="update 26.8.30">
|
||||
<change afterPath="$PROJECT_DIR$/480T/Mem0/.env" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/480T/Mem0/docker-compose.yaml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/shelf/_2026_8_25_09_09____.xml" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/shelf/在进行更新之前于_2026_8_25_09_09_取消提交了更改_[更改]/shelved.patch" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/vcs.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
|
||||
<list default="true" id="ae3fb6a0-aca4-4c0a-858b-91952e6dcdd3" name="更改" comment="update 26.9.2">
|
||||
<change afterPath="$PROJECT_DIR$/480T/WechatOnCloud/.env" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/480T/WechatOnCloud/docker-compose.yaml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/480T/n8n_service/.env" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
@@ -54,7 +51,7 @@
|
||||
"RunOnceActivity.typescript.service.memoryLimit.init": "true",
|
||||
"codeWithMe.voiceChat.enabledByDefault": "false",
|
||||
"git-widget-placeholder": "main",
|
||||
"last_opened_file_path": "/Users/kun/PycharmProjects/Docker_Compose/480T/Mem0",
|
||||
"last_opened_file_path": "/Users/kun/PycharmProjects/Docker_Compose/480T/WechatOnCloud",
|
||||
"node.js.detected.package.jshint": "true",
|
||||
"node.js.selected.package.jshint": "",
|
||||
"nodejs_package_manager_path": "npm",
|
||||
@@ -250,24 +247,6 @@
|
||||
<option name="USE_PATTERN" value="false" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<configuration default="true" type="tests" factoryName="Autodetect">
|
||||
<module name="Docker_Compose" />
|
||||
<option name="ENV_FILES" value="" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="IS_MODULE_SDK" value="false" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<option name="DEBUG_JUST_MY_CODE" value="false" />
|
||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
||||
<option name="RUN_TOOL" value="" />
|
||||
<option name="_new_additionalArguments" value="""" />
|
||||
<option name="_new_target" value="""" />
|
||||
<option name="_new_targetType" value=""PATH"" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
||||
<component name="SharedIndexes">
|
||||
<attachedChunks>
|
||||
@@ -311,6 +290,8 @@
|
||||
<workItem from="1787705701661" duration="856000" />
|
||||
<workItem from="1788090668335" duration="1476000" />
|
||||
<workItem from="1788272932700" duration="860000" />
|
||||
<workItem from="1788334202246" duration="1878000" />
|
||||
<workItem from="1788484732453" duration="302000" />
|
||||
</task>
|
||||
<task id="LOCAL-00001" summary="update 26.7.27">
|
||||
<option name="closed" value="true" />
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
# 复制本文件为 .env 即可覆盖默认配置。全部可选——不建 .env 也能直接 `docker compose up -d`。
|
||||
|
||||
# 面板首个管理员账号 / 密码(仅首次启动、无账号文件时写入)。强烈建议改掉默认密码!
|
||||
WOC_USER=yakun
|
||||
WOC_PASSWORD=nxY7HUoJYjUgn
|
||||
|
||||
# 镜像版本:默认 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=4500
|
||||
|
||||
# 面板允许的 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 加 -hw3d(GPU 加速编码)。
|
||||
# 在 WSL2 / 虚拟 GPU(如 Docker Desktop on Windows)下,该路径会导致 Xvnc 内存持续膨胀
|
||||
# (实测 21 小时涨到 ~9GB)。本项目已强制软件渲染(LIBGL_ALWAYS_SOFTWARE=1),hw3d 对微信
|
||||
# 这类静态界面收益甚微,故默认关闭。仅在你有真实可用的 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 巡检间隔秒,默认 300(5 分钟);最小 60;0 = 关闭整个 watchdog
|
||||
# WOC_WATCHDOG_HEALTH_FAILS VNC 响应性探测:连续无响应几次才重启实例;默认 0 = 关闭该探测(仅保留内存自愈)。
|
||||
# 健康实例探测约 1ms,但宿主级 CPU/IO 偶发争用会让探测超时被误判为卡死而重启正常实例,故默认关闭;
|
||||
# 想要"卡在正在连接桌面"时自动兜底,可设为正整数(如 3 = 连续 3 次≈15 分钟无响应才重启)。
|
||||
#
|
||||
# 调参建议:日常活跃单实例约 1500 MiB;soft 应略高于此(如 2000);hard 远低于宿主可用内存。
|
||||
WOC_INSTANCE_MEM_SOFT_MB=1500
|
||||
WOC_INSTANCE_MEM_HARD_MB=2500
|
||||
WOC_WATCHDOG_INTERVAL_SEC=300
|
||||
# WOC_WATCHDOG_HEALTH_FAILS=0
|
||||
@@ -0,0 +1,67 @@
|
||||
# WechatOnCloud —— 面板为唯一服务;微信实例由面板按需动态创建(docker run)。
|
||||
# 面板挂载 docker.sock 来创建/启动/删除微信实例容器,并反向代理到它们的 KasmVNC。
|
||||
# 镜像默认从 Docker Hub 拉取(GHCR 备用),无需本地构建。要改配置:复制 .env.example 为 .env 后修改。
|
||||
services:
|
||||
panel:
|
||||
# 镜像源前缀默认 Docker Hub(飞牛等 NAS 有加速);拉不动时改 .env 的 WOC_IMAGE_PREFIX 切到 GHCR/国内反代(见 .env.example)。
|
||||
image: ${WOC_IMAGE_PREFIX:-docker.io/gloridust}/woc-panel:${WOC_VERSION:-latest}
|
||||
container_name: woc-panel
|
||||
# pull_policy 用默认(missing):本地已有同名镜像就直接用,没有才去镜像源拉。
|
||||
# 这样「发布前本地自构建」与「线上拉取」都能用同一份 compose。
|
||||
# 想强制更新到最新版:docker compose pull && docker compose up -d
|
||||
|
||||
environment:
|
||||
- PORT=8080
|
||||
# 新建微信实例时使用的镜像(多架构,amd64/arm64 自动匹配);前缀同样跟随 WOC_IMAGE_PREFIX。
|
||||
- WOC_WECHAT_IMAGE=${WOC_IMAGE_PREFIX:-docker.io/gloridust}/wechat-on-cloud:${WOC_VERSION:-latest}
|
||||
# 透传给每个微信实例容器(KasmVNC 基础镜像用它们降权运行)
|
||||
- PUID=${WOC_PUID:-1000}
|
||||
- PGID=${WOC_PGID:-1000}
|
||||
- TZ=${WOC_TZ:-Asia/Shanghai}
|
||||
# 摄像头直通:逗号分隔的宿主视频设备(如 /dev/video0)。留空则自动探测(见下方 /host-dev 挂载)或禁用摄像头。
|
||||
# 启用前需在宿主加载 v4l2loopback 内核模块。详见 .env.example。
|
||||
- WOC_VIDEO_DEVICES=${WOC_VIDEO_DEVICES:-}
|
||||
# 实例资源相关(见 .env.example):GPU 硬件编码默认关闭(避免 WSL2/虚拟 GPU 下 Xvnc 内存暴涨);
|
||||
# 可选给每个实例设内存上限(GiB),0=不限制;watchdog 双阈值(soft 柔和自愈 / hard 强制重启)+ 巡检间隔。
|
||||
- WOC_ENABLE_GPU=${WOC_ENABLE_GPU:-}
|
||||
- WOC_INSTANCE_MEM_GB=${WOC_INSTANCE_MEM_GB:-}
|
||||
- WOC_INSTANCE_MEM_SOFT_MB=${WOC_INSTANCE_MEM_SOFT_MB:-1500}
|
||||
- WOC_INSTANCE_MEM_HARD_MB=${WOC_INSTANCE_MEM_HARD_MB:-2500}
|
||||
- WOC_WATCHDOG_INTERVAL_SEC=${WOC_WATCHDOG_INTERVAL_SEC:-300}
|
||||
# 设备伪装:os-release 伪装成 deepin(默认开,=0 关恢复 Debian)。详见 .env.example / doc/设备伪装.md。
|
||||
- WOC_SPOOF_OS=${WOC_SPOOF_OS:-1}
|
||||
# 登录会话时长(天,默认 30)。会话已落盘持久化:面板重启/自更新不再踢人。调小更安全、调大更省事。
|
||||
- WOC_SESSION_DAYS=${WOC_SESSION_DAYS:-30}
|
||||
# 拉取实例镜像的"无进度"超时(分钟,默认 5)。NAS 直连 docker.io 卡死时据此快速失败而非无限转圈。
|
||||
- WOC_PULL_STALL_MIN=${WOC_PULL_STALL_MIN:-5}
|
||||
# 实例桌面深色:由面板顶栏的主题开关统一控制(管理员),持久化在 accounts.json,无需在此配 env。
|
||||
# 面板首个管理员账号(仅首次启动、无账号文件时写入;务必改掉默认密码)
|
||||
- PANEL_ADMIN_USER=${WOC_USER:-admin}
|
||||
- PANEL_ADMIN_PASSWORD=${WOC_PASSWORD:-wechat}
|
||||
- PANEL_DATA=/data/accounts.json
|
||||
# DNS-rebinding 防护:套 HTTPS 反代部署时把对外域名加进 .env(详见 .env.example)。
|
||||
# 默认仅放行 loopback + RFC1918 私网,直连 NAS / 局域网无需改动。
|
||||
- PANEL_ALLOWED_HOSTS=${PANEL_ALLOWED_HOSTS:-}
|
||||
|
||||
volumes:
|
||||
# 面板账号数据(用户、实例元信息、密码哈希)
|
||||
- /volume1/docker/docker_projects/wechat/data-panel:/data
|
||||
# 面板经 docker 引擎创建/启动/删除微信实例容器、exec 触发下载、读取进度。
|
||||
# 注意:docker.sock 等同宿主 root 权限,故实例增删仅限管理员,docker API 绝不暴露给前端。
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
# 摄像头自动探测(可选):把宿主 /dev 只读挂进来,面板据此发现 /dev/videoN 并映射给实例。
|
||||
# 不想自动探测就删掉此行,改用上面的 WOC_VIDEO_DEVICES 显式指定。
|
||||
- /dev:/host-dev:ro
|
||||
|
||||
ports:
|
||||
- "${WOC_HTTP_PORT:-36080}:8080" # 面板 = 唯一对外入口
|
||||
|
||||
# 日志硬上限:docker 默认 json-file 不限大小,长期运行/异常刷错会无限吃磁盘。
|
||||
# (实例容器的同类上限由面板创建时注入,无需在此配置。)
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "20m"
|
||||
max-file: "2"
|
||||
|
||||
restart: unless-stopped
|
||||
@@ -0,0 +1,2 @@
|
||||
MINIO_ROOT_USER=kun
|
||||
MINIO_ROOT_PASSWORD=nxY7HUoJYjUgn
|
||||
Reference in New Issue
Block a user