使用 Docker 快速搭建 Whisper 网页音频转写服务(附登录保护思路)

在需要进行多语言音频转写时,OpenAI Whisper 模型提供了极高的准确率和多语言支持。为了更方便地部署到服务器并供多人使用,结合 Docker 容器技术可以快速搭建一个带网页界面的语音识别服务。 本教程以 whisper-webui 项目为核心,结合 NVIDIA GPU(如 GTX 1080)加速推理,构建一个可上传音频、自动或手动选择语言并返回转写结果的完整服务。 💡 准备条件 ✅ NVIDIA 驱动与 CUDA 配置检查 首先验证 GPU 是否正常识别。 nvidia-smi 如果显示显卡信息,说明驱动配置无误。 ✅ Docker 与 NVIDIA Container Toolkit 安装 在服务器上安装 Docker: curl -fsSL https://get.docker.com | bash 安装 NVIDIA Container Toolkit 以支持容器内调用 GPU: distribution=$(. /etc/os-release;echo $ID$VERSION_ID)curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey …

Whisper 服务器 + 网页前端完整安装教程

🎯 功能目标 ✅ 服务器上运行 Whisper(用 GPU 加速)✅ 网页界面登录(账号密码)✅ 上传音频文件进行识别✅ 可选语言(或自动检测)✅ 返回文本结果 🟢 一、服务器准备 1️⃣ 硬件 2️⃣ 驱动 & CUDA 安装 NVIDIA 驱动 + CUDA(以 Ubuntu 为例): sudo apt updatesudo apt install nvidia-driver-535 nvidia-cuda-toolkit 验证: nvidia-smi 🟢 二、Python 环境 1️⃣ 安装 Python 建议 Python 3.9+ sudo apt install python3 python3-venv python3-pip …

Nextcloud 插件或系统更新中断后的应对与救援方法

在使用 Nextcloud 时,如果遇到在线更新(尤其是大型插件如 Recognize)过程中超时或页面卡住,往往会感到紧张。但其实只要有基本的备份和 SSH 访问权限,大多数情况下都可以安全救回。这里整理一篇总结文章,记录应对和修复思路,供参考。 1️⃣ 不要立即刷新或关闭 即使浏览器显示卡住,后端的 PHP 进程通常仍在执行。此时如果频繁刷新页面或强行中断,反而更容易导致数据库或文件结构混乱。 2️⃣ 检查维护模式 Nextcloud 更新时会自动进入维护模式。可以在服务器中执行以下命令确认: sudo -u www-data php occ maintenance:mode –status 如果显示 enabled,说明更新流程还未完全结束。 3️⃣ 查看更新日志 更新流程会在 data/updater-xxxx/ 目录中生成 updater.log 文件(xxxx 为随机字符串)。 可以查看最后 50 行日志内容,判断是否还有进行中的任务: tail -n 50 /path/to/nextcloud/data/updater-xxxx/updater.log 若日志持续更新,说明后端仍在执行;若长时间没有新内容,可能已经中断。 4️⃣ 使用命令行恢复更新 如果确认更新进程已停止,可以尝试使用命令行继续完成: sudo -u www-data php occ upgrade 针对插件,也可以单独更新: …

某型号苹果一体机在 Arch Linux 上配置无线网卡的全过程记录

近期某型号苹果一体机,在 Arch Linux 系统上配置无线网卡时遇到了一些曲折,最终通过移除黑名单并使用内核自带驱动成功解决,整理如下,供后续参考。 背景与硬件信息 该机型配备的无线网卡为 Broadcom BCM43602(802.11ac),PCI 总线识别信息如下: 03:00.0 Network controller: Broadcom Inc. and subsidiaries BCM43602 802.11ac Wireless LAN SoC (rev 01) Subsystem: Apple Inc. Device 016f Kernel modules: brcmfmac, wl 在 Arch Linux 系统中,这款无线网卡通常有两种驱动方案: 遇到的问题 系统早期曾通过 /etc/modprobe.d/blacklist-broadcom.conf 文件写入以下内容,对 Broadcom 系列驱动进行了黑名单设置: blacklist brcmfmacblacklist bcmablacklist b43blacklist b43legacyblacklist brcmsmacblacklist ssb 此举会导致内核自带的 …

Linux 系统中多蓝牙控制器的管理与默认控制器切换

在 Linux(基于 BlueZ 的系统)中,如果同时存在多个蓝牙控制器(例如主板内置蓝牙与 USB 蓝牙适配器),系统通常会根据内核枚举顺序自动指定默认控制器。这种自动分配并不总是符合用户期望,例如希望使用信号更稳定、性能更好的 USB 蓝牙适配器,而非内置蓝牙模块。 控制器的显示与默认情况 通过 bluetoothctl list 命令,可以查看当前系统检测到的蓝牙控制器。例如输出如下: Controller XX:XX:XX:XX:XX:XX Hostname #2 [default]Controller YY:YY:YY:YY:YY:YY Hostname 其中 [default] 表示系统当前使用的默认蓝牙控制器。如果有多个控制器,编号自动按检测顺序排列,内置控制器通常会优先编号并被设为默认。 修改 /etc/bluetooth/main.conf 在 /etc/bluetooth/main.conf 配置文件中,有如下可选参数: #ControllerMode = dual#DefaultAdapter = XX:XX:XX:XX:XX:XX 其中 DefaultAdapter 理论上用于指定默认控制器的 MAC 地址。然而,在大多数 Linux 桌面发行版中,这个参数实际上并不会生效。内核与 BlueZ 会根据硬件探测顺序优先指定第一个控制器,而忽略 DefaultAdapter 配置。 手动切换默认控制器 若希望使用指定的控制器,可以通过 bluetoothctl 工具手动切换: select XX:XX:XX:XX:XX:XX …

Linux 蓝牙多控制器切换与手写板自动断开调试笔记

在 Linux 系统上,如果同时存在内置蓝牙控制器和 USB 蓝牙控制器,蓝牙设备管理会变得复杂,尤其在涉及自动断开设备、切换控制器等需求时,常会遇到意想不到的情况。此文记录一次针对蓝牙手写板的调试过程,作为参考。 背景 需要使用脚本自动断开蓝牙设备(例如手写板),脚本中使用 bluetoothctl info 命令配合 expect 自动化交互流程。然而,在接入 USB 蓝牙控制器后,系统默认仍然使用内置控制器,导致脚本无法正常识别目标设备。 初步现象 执行 bluetoothctl info 时,输出的设备信息中,Device 行并不包含 (random) 或 (public) 标记。例如: Device AA:BB:CC:DD:EE:FF Generic Pen TabletName: Generic Pen TabletConnected: yes 脚本中原本使用的正则表达式如下: regexp {Device ([A-F0-9:]+) \(random\)} $output match mac 由于缺少括号标记,这条正则无法成功提取 MAC 地址。 修改正则 修订后的正则表达式改为不依赖括号标记,仅提取 MAC 地址: regexp {Device …

Linux 平台安装与配置 WeChat Universal(bwrap 沙盒版)指南

随着国内外越来越多用户在 Linux 平台使用微信,社区提供了多个解决方案,其中基于 Bubblewrap 沙盒的 wechat-universal-bwrap 版本受到广泛欢迎。该版本通过 UOS 微信(或腾讯官方微信)重新打包,同时借助 bwrap 隔离容器化运行,提升安全性与系统兼容性。 🌟 安装方式 在 Arch Linux 及衍生系统(如 Manjaro、EndeavourOS 等)上,可以通过 AUR 安装: yay -S wechat-universal-bwrap 编译过程中,会自动构建必要的共享库(如 libuosdevicea.so),并安装所有依赖项(包括字体、图标、Wine 环境等)。安装后,应用体积大约 700 MiB。 在编译日志中会看到 libuosdevicea.so 的编译、打包、清理等详细步骤,最终生成并安装到系统中。 🛡️ 沙盒机制(bwrap) 该版本默认使用 Bubblewrap(bwrap)进行容器化隔离,微信进程只会访问宿主机中显式绑定的文件和目录。默认情况下,仅暴露用户主目录下的特定数据目录,如 ~/Documents/WeChat_Data,其他宿主目录不会被暴露。 ⚙️ 配置自定义数据目录 默认数据目录为: ~/Documents/WeChat_Data 如需修改,可使用环境变量 WECHAT_DATA_DIR 来指定新目录。例如,想使用 ~/.local/share/WeChat_Data,可通过如下命令启动微信: env WECHAT_DATA_DIR=”$HOME/.local/share/WeChat_Data” wechat-universal 💻 修改桌面文件 …

Apple 设备无法访问主域名及路径问题排查与解决

近期遇到一种情况:主域名(例如 https://example.net/)及其附加路径(如 /path1/, /path2/ 等)在苹果手机(iOS Safari)上无法访问,但子域名(如 mail.example.net, chat.example.net)可以正常访问。此问题在非苹果浏览器(如 Windows Chrome 或 Android 浏览器)中不会出现,表现为白屏、无响应或直接连接失败。 经过详细排查,总结出原因及解决方案如下。 🟢 初步排查方向 🔥 根本原因分析 在配置文件中发现,主域名使用了以下配置: proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection “upgrade”; 这两行配置用于 WebSocket 或需要协议升级的后端(如即时通讯服务),但普通 Web 服务或静态资源并不需要。如果后端(如 Apache)返回了 Upgrade: h2,h2c header,Nginx 会将此 header 透传给前端浏览器。苹果 Safari 对该 header 十分敏感,如果出现多余或错误的 Upgrade header,会直接拒绝连接,导致无法访问。 ✅ 解决方案 1️⃣ 注释多余的 header 将主域名配置中的以下两行注释: # proxy_set_header …

WordPress 开启两步验证后,移动端登录提示「用户名或密码错误」的解决方案

在 WordPress 中启用两步验证(Two-Factor Authentication,2FA)可以显著提高后台安全性。但不少用户在开启后,会发现无法通过手机 app 或其他外部客户端(例如 XML-RPC 接口)登录,提示「用户名或密码错误」。 出现该情况的根本原因在于,移动端或 API 并不支持输入动态验证码,只能使用静态密码。这时需要通过「应用密码(Application Password)」功能进行登录授权。 常见现象 产生原因 开启两步验证后,网站登录流程需要两步: 而 WordPress 手机 app 或 XML-RPC 不支持验证码输入,因此仅凭原始密码无法完成验证。 解决思路:使用「应用密码」 多数支持两步验证的插件(如 Two Factor、WP 2FA、Wordfence 等)都提供了「应用密码」功能,专门用于第三方应用登录。 Two Factor 插件的操作流程 以下以 Two Factor 插件为例,介绍具体步骤。 1️⃣ 登录网站后台 通过浏览器正常登录 WordPress 后台。 2️⃣ 进入「个人资料」页面 后台菜单中选择「用户」 → 「所有用户」 → 需要设置的用户 → 「编辑」,或直接点击右上角用户名进入「个人资料」页面。 3️⃣ …

Web 应用文件夹权限配置建议(WordPress、数据库管理面板等)

在部署 WordPress、数据库管理面板(如 phpMyAdmin)或其他 Web 应用时,正确设置文件夹和文件权限,对安全性和正常运行都至关重要。以下整理了通用的权限配置思路与方法,供参考。 📁 管理面板类目录(如数据库管理工具) 推荐权限 设置思路 示例命令 chmod -R 750 /path/to/admin-panelchown -R www-data:www-data /path/to/admin-panelchmod 640 /path/to/admin-panel/config-file.php 这样可有效防止其他用户查看目录或配置文件,降低敏感信息泄露的风险。 📁 WordPress 等常见内容管理系统 官方推荐权限 设置思路 示例命令 find /path/to/cms/ -type d -exec chmod 755 {} \;find /path/to/cms/ -type f -exec chmod 644 {} \; 如果对安全要求更高,可只允许需要写入的目录(例如上传目录)设置为可写,其他目录和文件都只读。 ⚠️ 更高安全性做法 ✅ 总结 场景 目录权限 …