
Wekan 虚拟化部署指南在 VirtualBox 中安装、配置与维护 Wekan 虚拟设备【免费下载链接】wekanThe Open Source kanban, built with Meteor. GitHub issues/PRs are only for FLOSS Developers, not for support, support is at https://wekan.fi/commercial-support/ . PR source translation to imports/i18n/data/en.i18n.json, other translations at https://app.transifex.com/wekan/wekan项目地址: https://gitcode.com/GitHub_Trending/we/wekan本篇指南围绕 Wekan 官方发布的 VirtualBox 虚拟设备Virtual Appliance展开讲解如何在 Oracle VirtualBox 中导入.ova镜像、通过桥接或 NAT 网络访问运行在虚拟机内的 Wekan 服务、配置ROOT_URL与邮件参数、以及使用构建脚本把已有虚拟设备升级到最新版本。读完本文你将掌握从下载镜像到局域网访问、再到源码级定制与磁盘扩容的完整操作链路。一、Wekan 的 VirtualBox 虚拟设备方案概览Wekan 是一个基于 Meteor 构建的开源看板应用Kanban。除了 Docker、Snap、源码构建等部署方式外官方还提供开箱即用的 VirtualBox 虚拟设备Virtual Appliance适合希望在隔离的 Linux 虚拟机中快速体验或长期运行 Wekan 的用户。虚拟设备的核心设计目标有三点开箱即用下载.ova文件后直接在 VirtualBox 中导入即可虚拟机内已预装 Wekan 及其运行依赖网络可达虚拟设备默认使用桥接Bridged网络模式虚拟机拥有独立 IP 地址局域网内的其他电脑可直接通过浏览器访问也可以通过 SSH22 端口登录虚拟机可升级可定制仓库的 releases/virtualbox 目录内置了完整的运维脚本用于启动、停止、查询 IP、放开 80 端口权限以及把镜像内的 Wekan 源码重建到最新版本。官方要求使用 VirtualBox 5.2.22 或更新版本注原文档指向外部站点实际以你安装的 VirtualBox 版本为准旧版本 VirtualBox 与镜像不兼容。两种官方虚拟设备普通用户版与开发者版镜像适用对象基础系统内容说明wekan-VERSION.ova普通用户Ubuntu 14.04 64bit仅包含 Wekan 及其从源码构建的环境wekan-sandstorm-VERSION.ova开发者Debian 9 64bit集成了编译 Wekan、Sandstorm 以及 Wekan for Sandstorm 所需的全部工具链两种镜像统一使用以下登录凭据用户名wekan密码wekan开发者版镜像额外预装了 Snap、Docker、Firefox、Chrome、带 Meteor.js 扩展的 Visual Studio Code、GHex 十六进制编辑器等工具是进行 Wekan / Sandstorm 开发的一站式环境。两份.ova文件都托管在 https://releases.wekan.team下载地址以该站点实际提供的版本为准。二、下载与导入虚拟设备1. 下载.ova文件根据你的使用场景在 https://releases.wekan.team 下载对应的.ova文件普通使用wekan-VERSION.ova开发使用wekan-sandstorm-VERSION.ova2. 解压.ova文件本身是一个打包容器建议先使用压缩工具解压Windows使用 7-ZipLinux 等使用 p7zip解压后可得到虚拟硬盘文件通常是.vmdk这为后面的高级用法如转换为 Qubes OS 使用的 raw 镜像留出了空间。3. 导入虚拟设备在 VirtualBox 中通过「管理 → 导入虚拟电脑Import Appliance」导入.ova文件即可。导入后可以看到虚拟设备默认的虚拟机配置内存 2GB硬盘镜像当前占用约 16GB、最大可扩展至 500GB。4. 可选将虚拟设备转换为其他虚拟化格式如果需要在 Qubes OS 中运行可以把.ova解包出的.vmdk作为虚拟硬盘使用或转换为 raw.img格式供 Qubes OS 的 HVM 虚拟机加载。这一转换流程在 Qubes OS 官方文档中有详细说明本文不再展开。三、VirtualBox 网络模式与端口转发设置虚拟设备在导入后需要根据你的访问方式设置网络。VirtualBox 支持多种网络模式官方推荐两种典型方案方案 A桥接模式Bridged Adapter——局域网直接访问选择「桥接网卡」并在「名称」中选择宿主机实际使用的物理网卡例如有线网络eth0、enp9s0等无线网络wlan等在这种模式下虚拟机将获得与宿主机同网段的独立 IP 地址。局域网内任何电脑都可以通过http://虚拟机IP直接访问 Wekan同时也可以用 SSH端口 22登录虚拟机。方案 BNAT 模式 端口转发——与宿主机共享地址选择「网络地址转换NAT」虚拟机会复用宿主机的 IP 地址对外通信。此时需要配置端口转发规则将宿主机端口转发到 Wekan 虚拟机的 8080 端口即 Wekan Node.js 服务监听端口实现宿主机访问。关于端口 80 的说明官方虚拟设备的 Wekan 运行在 80 端口且由/etc/rc.local在开机时自动启动。为什么普通进程能绑定 80 这样的特权端口关键在于node-allow-port-80.sh脚本sudo setcap cap_net_bind_serviceep /usr/local/bin/node这条命令通过 Linuxsetcap机制把cap_net_bind_service能力授予 Node.js 可执行文件使其无需以 root 身份运行即可绑定 1024 以下的特权端口。仓库中的 releases/virtualbox/etc-rc.local.txt 展示了完整的开机自启逻辑#!/bin/sh -e # node-allow-port-80.sh sudo setcap cap_net_bind_serviceep /usr/local/bin/node # Start Wekan at boot at Ubuntu 14.04 sudo -H -u wekan bash -c /home/wekan/repos/wekan/releases/virtualbox/start-wekan.sh exit 0从源码结构看开机时先授予 Node.js 绑定特权端口的权限再以wekan普通用户身份启动 Wekan避免了以 root 直接运行应用的安全风险。四、首次启动与访问 Wekan启动虚拟机在 VirtualBox 中选中导入的虚拟设备并点击「启动」。系统启动后Wekan 会由/etc/rc.local自动拉起。登录虚拟机通过 SSH 或虚拟机的图形桌面登录username: wekan password: wekan查看虚拟机 IP仓库提供了 releases/virtualbox/ipaddress.sh 用于查询当前 IP# ifdata -pa eth0 ip address配置 ROOT_URL关键步骤要让局域网内的其他电脑能够访问 Wekan必须把ROOT_URL配置为虚拟机的实际 IP 地址。配置位于虚拟机内的/home/wekan/repos/start-wekan.shcd repos ./stop-wekan.sh nano start-wekan.shstop-wekan.sh的实现非常简单直接——它通过pkill -f node main.js终止正在运行的 Wekan Node.js 进程见 releases/virtualbox/stop-wekan.sh。在start-wekan.sh中修改环境变量例如export ROOT_URLhttp://192.168.1.200 export MAIL_URLsmtp://user:passmailserver.example.com:25/ export MAIL_FROMExample Wekan Support supportexample.com保存方法按CtrlO回车保存再按CtrlX退出 nano 编辑器。为什么 ROOT_URL 必须正确仓库根目录的 start-wekan.sh 中对这一变量有明确注释# If port is 80, must change ROOT_URL to: http://YOUR-WEKAN-SERVER-IPv4-ADDRESS , like http://192.168.0.100 # If port is not 80, must change ROOT_URL to: http://YOUR-WEKAN-SERVER-IPv4-ADDRESS:YOUR-PORT-NUMBER , like http://192.168.0.100:2000 # If ROOT_URL is not correct, these do not work: translations, uploading attachments. export ROOT_URL${ROOT_URL:-http://localhost:2000}也就是说ROOT_URL 配置错误会导致翻译、附件上传等功能失效这是虚拟化部署中最常见的坑之一。脚本默认值为http://localhost:2000在虚拟机内部访问可以工作但局域网外部访问必须改为虚拟机的 IP。放开端口 80 并启动./node-allow-port-80.sh ./start-wekan.shnode-allow-port-80.sh即上文介绍的setcap授权脚本。启动后在局域网内的任何电脑浏览器访问http://虚拟机IP即可使用 Wekan。五、虚拟设备维护升级到最新 Wekan获取最新构建脚本从 https://github.com/wekan/wekan-maintainer/tree/master/virtualbox 下载最新的虚拟机构建脚本该仓库同时包含如何在普通 Ubuntu 14.04 64bit / Debian 9 原生或虚拟机环境中使用这些脚本的方法以及让 Node.js 运行在 80 端口的脚本。说明当前 Wekan 仓库的 releases/virtualbox 目录维护着一套同源脚本README.txt、ipaddress.sh、node-allow-port-80.sh、start-wekan.sh、stop-wekan.sh并在构建系统 build.sh 中注册了对应的命令行入口例如「Server and VM | Show the VirtualBox VMs IP address」「Start WeKan in the VirtualBox VM」「Stop WeKan in the VirtualBox VM」等。升级步骤在虚拟机内依次执行# 1. 先执行一次 sudo 命令以便输入 sudo 密码密码wekan sudo ls # 2. 以普通用户运行构建脚本 ./build-meteor-1.6.sh脚本交互式运行时第一次先选择选项 1安装编译依赖依赖就绪后选择选项 3重建 Wekan 源码到最新版本。升级系统补丁定期更新虚拟机内的 Ubuntu 系统sudo apt-get updatesudo apt-get -y dist-upgrade注意执行 sudo 命令时提示输入密码即登录密码wekan。更新后的参考材料虚拟机的 Ubuntu 桌面上保留了丰富的参考资料桌面上的README.txt~/repos目录下的各运维脚本/home/wekan/.bash_history记录了该虚拟设备当初的完整安装过程包括其中的笔误可作为排查问题的历史依据。六、虚拟设备磁盘扩容与瘦身虚拟硬盘规格虚拟设备携带的硬盘镜像当前占用约 16GB最大可增长至 500GB动态扩展。扩容方法使用VBoxManage命令扩大虚拟硬盘容量例如VBoxManage modifymedium disk path-to-vmdk --resize size-in-MB扩容后需要用 LiveCD 启动虚拟机删除原有的逻辑交换分区logical swap和扩展分区extended重新创建更大尺寸的扩展分区并在其内部重建逻辑交换分区使扩展的空间被文件系统真正利用。压缩体积官方镜像的尺寸经过专门瘦身处理利用磁盘清零与压缩技术减小.vmdk的物理体积用户在自行复制或归档虚拟机时同样可以参考这一思路先在虚拟机内对空闲空间清零再通过 VirtualBox 的克隆/压缩功能生成瘦身后的镜像。七、深入源码虚拟设备中的 Wekan 启动脚本解读仓库根目录的 start-wekan.sh 是目前 Wekan 源码部署的标准启动模板虚拟设备内的启动脚本是其简化/适配版本见 releases/virtualbox/start-wekan.sh。两者的核心环境变量保持一致环境变量虚拟设备中的默认值说明MONGO_URLmongodb://127.0.0.1:27017/wekan本地 MongoDB 连接串指向本机 27017 端口的 wekan 库ROOT_URLhttp://localhost:2000Wekan 对外访问地址虚拟化部署必须改为虚拟机 IPPORT2000Wekan Node.js 本地监听端口结合 iptables/代理映射到 80MAIL_URLsmtp://user:passmailserver.example.com:25/邮件发送服务器 SMTP 地址MAIL_FROMWekan Boards infoexample.com邮件发件人WITH_APItrue是否启用 Wekan API禁用后「导出看板」功能不可用BROWSER_POLICY_ENABLEDtrue浏览器策略关闭会降低 iframe 等安全保护TRUSTED_URL空允许嵌入 Wekan iframe 的可信 URL在虚拟设备版本中cd ~/repos/wekan/.build/bundle进入 Meteor 打包产物目录最终以node main.js ~/repos/wekan.log启动并把日志写入~/repos/wekan.log。脚本中保留了while true循环的注释结构若希望崩溃后自动重启可以取消注释让 Wekan 常驻运行。现代版启动脚本start-wekan.sh则加入了更多生产环境逻辑包括副本集Replica Set自动初始化通过snap-src/bin/db-eval.mjs检查并初始化rs0副本集为 MongoDB Change Streams 提供基础Change Streams / polling 自动选择根据是否具备node与db-eval自动设置METEOR_REACTIVITY_ORDERchangeStreams,oplog,polling或pollingMongoDB 就绪等待启动前轮询 MongoDB 主节点超时默认 120 秒后打印数据库升级与迁移指引mongodump/mongorestore备份恢复流程、WRITABLE_PATH下附件/头像的磁盘目录迁移提示等Node 堆内存自动适配根据宿主机内存含 cgroup 限制自动计算--max-old-space-size并默认以ulimit -s 65500; exec node main.js提升栈空间后启动。这些机制解释了为什么虚拟设备/源码部署会强调 MongoDB 必须以副本集方式运行——现代 Wekan 默认依赖 Change Streams 实现实时数据同步。八、第三方面向社区的虚拟设备anselal 构建版除了官方镜像社区成员 anselal 也发布了一套 Wekan 虚拟设备可从其仓库的 releases 页面下载登录凭据同样为用户名wekan/密码wekan更多信息包括用于生成该虚拟设备的脚本见其仓库说明。如果你在虚拟设备使用过程中遇到问题或希望提出功能需求可以到 Wekan 官方仓库提交 issue。九、常见问题与排查清单1. 局域网内无法访问 Wekan按顺序检查虚拟设备是否使用桥接模式并选择了正确的物理网卡start-wekan.sh中的ROOT_URL是否已改为虚拟机 IPnode-allow-port-80.sh是否已执行确认 Node.js 能绑定 80 端口虚拟机防火墙是否放行 80 / 22 端口。2. 附件上传或翻译不生效优先检查ROOT_URL是否与浏览器地址栏中的实际访问地址完全一致含端口号详见 start-wekan.sh 中的注释说明。3. 修改配置后需要重启 Wekancd ~/repos ./stop-wekan.sh ./start-wekan.sh4. 磁盘空间不足参考第六节使用VBoxManage扩容或使用「清零 压缩」流程瘦身镜像。十、总结Wekan 的 VirtualBox 虚拟设备提供了从下载到上线的极简路径导入.ova→ 启动 → 配置ROOT_URL→ 局域网访问全程无需手动安装 MongoDB、Node.js 或编译 Meteor 应用。对于开发者wekan-sandstorm镜像则直接内置了完整的交叉编译工具链。虚拟设备背后的运维脚本node-allow-port-80.sh、start-wekan.sh、stop-wekan.sh、ipaddress.sh、etc-rc.local.txt均可在本仓库的 releases/virtualbox 目录中查看现代版启动模板 start-wekan.sh 中的 Change Streams、副本集自动初始化与内存自适应逻辑则为迁移到生产环境提供了更完善的参考。【免费下载链接】wekanThe Open Source kanban, built with Meteor. GitHub issues/PRs are only for FLOSS Developers, not for support, support is at https://wekan.fi/commercial-support/ . PR source translation to imports/i18n/data/en.i18n.json, other translations at https://app.transifex.com/wekan/wekan项目地址: https://gitcode.com/GitHub_Trending/we/wekan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考