From 48d32d61a72e786527b7079ef39872487253cd81 Mon Sep 17 00:00:00 2001 From: pooneyy <85266337+pooneyy@users.noreply.github.com> Date: Sun, 26 Oct 2025 12:43:58 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(wechat-selkies):=20add=20wecha?= =?UTF-8?q?t-selkies=20application=20version=200.0.5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - add data.yml with form fields for port, config path, username and password configuration - add docker-compose.yml with wechat-selkies service configuration and network setup - add README.md with Chinese documentation including features and upgrade notes - add README_en.md with English documentation and project overview - add main data.yml with application metadata and architecture support - add logo.png for application branding 📝 docs(wechat-selkies): add comprehensive documentation - provide detailed project description and browser access requirements - include upgrade instructions and feature highlights - support both Chinese and English documentation versions --- apps/wechat-selkies/0.0.5/data.yml | 37 +++++++++++++++++++ apps/wechat-selkies/0.0.5/docker-compose.yml | 27 ++++++++++++++ apps/wechat-selkies/README.md | 26 +++++++++++++ apps/wechat-selkies/README_en.md | 25 +++++++++++++ apps/wechat-selkies/data.yml | 23 ++++++++++++ apps/wechat-selkies/logo.png | Bin 0 -> 15851 bytes 6 files changed, 138 insertions(+) create mode 100644 apps/wechat-selkies/0.0.5/data.yml create mode 100644 apps/wechat-selkies/0.0.5/docker-compose.yml create mode 100644 apps/wechat-selkies/README.md create mode 100644 apps/wechat-selkies/README_en.md create mode 100644 apps/wechat-selkies/data.yml create mode 100644 apps/wechat-selkies/logo.png diff --git a/apps/wechat-selkies/0.0.5/data.yml b/apps/wechat-selkies/0.0.5/data.yml new file mode 100644 index 000000000..3cf67d255 --- /dev/null +++ b/apps/wechat-selkies/0.0.5/data.yml @@ -0,0 +1,37 @@ +additionalProperties: + formFields: + - default: "30001" + envKey: PANEL_APP_PORT_HTTP + label: + en: Port + zh: 端口 + required: true + type: number + edit: true + rule: paramPort + - default: ./config + envKey: CONFIG_PATH + label: + en: Config Path + zh: 数据持久化 + required: true + type: text + edit: true + - default: selkies-username + envKey: PANEL_USER + label: + en: Panel Username + zh: 面板用户名 + required: true + type: text + edit: true + - default: PaSswoRd + envKey: PANEL_PASSWORD + label: + en: PANEL_PASSWORD + zh: 面板密码 + required: true + type: password + edit: true + rule: paramComplexity + random: true diff --git a/apps/wechat-selkies/0.0.5/docker-compose.yml b/apps/wechat-selkies/0.0.5/docker-compose.yml new file mode 100644 index 000000000..108cccb5e --- /dev/null +++ b/apps/wechat-selkies/0.0.5/docker-compose.yml @@ -0,0 +1,27 @@ +services: + wechat-selkies: + image: nickrunning/wechat-selkies:0.0.5 + container_name: wechat-selkies + volumes: + - ${CONFIG_PATH}:/config + # devices: + # - /dev/dri:/dev/dri # optional, for hardware acceleration + ports: + - ${PANEL_APP_PORT_HTTP}:3001 + restart: always + environment: + - PUID=1000 + - PGID=100 + - LC_ALL=zh_CN.UTF-8 + - AUTO_START_WECHAT=true + - AUTO_START_QQ=false + - CUSTOM_USER=${PANEL_USER} + - PASSWORD=${PANEL_PASSWORD} + networks: + - 1panel-network + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true \ No newline at end of file diff --git a/apps/wechat-selkies/README.md b/apps/wechat-selkies/README.md new file mode 100644 index 000000000..ed799bccd --- /dev/null +++ b/apps/wechat-selkies/README.md @@ -0,0 +1,26 @@ +# WeChat Selkies + +基于 Docker 的微信/QQ Linux 客户端,使用 Selkies WebRTC 技术提供浏览器访问支持。 + +**反向代理需要使用 https 协议,例如 https://127.0.0.1:30001** + +## 项目简介 + +本项目将官方微信/QQ Linux 客户端封装在 Docker 容器中,通过 Selkies 技术实现在浏览器中直接使用微信/QQ,无需在本地安装微信/QQ 客户端。适用于服务器部署、远程办公等场景。 + +## 升级注意事项 + +> 如果升级后部分功能缺失,请先清空本地挂载目录下的openbox目录(如`./config/.config/openbox`)。 + +## 功能特性 + +- 🌐 **浏览器访问**:通过 Web 浏览器直接使用微信,无需本地安装 +- 🐳 **Docker化部署**:简单的容器化部署,环境隔离 +- 🔒 **数据持久化**:支持配置和聊天记录持久化存储 +- 🎨 **中文支持**:完整的中文字体和本地化支持,支持本地中文输入法 +- 🖼️ **图片复制**:支持通过侧边栏面板开启图片复制 +- 📁 **文件传输**:支持通过侧边栏面板进行文件传输 +- 🖥️ **AMD64和ARM64架构支持**:兼容主流CPU架构 +- 🔧 **硬件加速**:可选的 GPU 硬件加速支持 +- 🪟 **窗口切换器**:左上角增加切换悬浮窗,方便切换到后台窗口,为后续添加其它功能做基础 +- 🤖 **自动启动**:可配置自动启动微信和QQ客户端(可选) diff --git a/apps/wechat-selkies/README_en.md b/apps/wechat-selkies/README_en.md new file mode 100644 index 000000000..a09027530 --- /dev/null +++ b/apps/wechat-selkies/README_en.md @@ -0,0 +1,25 @@ +# WeChat Selkies + +Docker-based WeChat/QQ Linux client with browser access support using Selkies WebRTC technology. + +**Reverse proxy requires the use of the HTTPS protocol, for example, https://127.0.0.1:30001** + +## Project Overview + +This project packages the official WeChat/QQ Linux client in a Docker container, enabling direct WeChat/QQ usage in browsers through Selkies technology without local installation. Suitable for server deployment, remote work, and other scenarios. + +## Upgrade Notes + +> If some features are missing after an upgrade, please clear the `openbox` directory in the local mounted directory (e.g., `./config/.config/openbox`). + +## Features + +- 🌐 **Browser Access**: Use WeChat directly through web browsers without local installation +- 🐳 **Dockerized Deployment**: Simple containerized deployment with environment isolation +- 🔒 **Data Persistence**: Supports persistent storage of configurations and chat records +- 🎨 **Chinese Support**: Complete Chinese fonts and localization support, including local Chinese input methods +- 🖼️ **Image Copy**: Support image copying through sidebar panel +- 📁 **File Transfer**: Support file transfer through sidebar panel +- 🖥️ **AMD64 and ARM64 Architecture Support**: Compatible with mainstream CPU architectures +- 🔧 **Hardware Acceleration**: Optional GPU hardware acceleration support +- 🪟 **Window Switcher**: Added a floating window switcher in the top left corner for easy switching to background windows, laying the foundation for adding other features in the future diff --git a/apps/wechat-selkies/data.yml b/apps/wechat-selkies/data.yml new file mode 100644 index 000000000..c9c6054d1 --- /dev/null +++ b/apps/wechat-selkies/data.yml @@ -0,0 +1,23 @@ +name: WeChat Selkies +tags: + - 实用工具 +title: 基于 Docker 的微信/QQ Linux 客户端 +description: + en: Docker-based WeChat/QQ Linux client + zh: 基于 Docker 的微信/QQ Linux 客户端 +additionalProperties: + key: wechat-selkies + name: WeChat Selkies + tags: + - Tool + shortDescZh: 基于 Docker 的微信/QQ Linux 客户端 + shortDescEn: Docker-based WeChat/QQ Linux client + type: website + crossVersionUpdate: true + limit: 0 + website: https://github.com/nickrunning/wechat-selkies + github: https://github.com/nickrunning/wechat-selkies + document: https://github.com/nickrunning/wechat-selkies + architectures: + - amd64 + - arm64 diff --git a/apps/wechat-selkies/logo.png b/apps/wechat-selkies/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ac9f3aea53ab018375cb9a2477714fc00c08df7b GIT binary patch literal 15851 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 literal 0 HcmV?d00001