:Node.js、MongoDB 与 daemontools 服务全流程)
在 Uberspace 6 上手动安装 WekanMeteor 版看板Node.js、MongoDB 与 daemontools 服务全流程【免费下载链接】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/wekanWekan 是基于 Meteor 构建的开源看板应用除 Docker 等容器化部署方式外也支持直接在共享托管主机上以普通用户身份安装运行。本文基于仓库内 docs/Platforms/Propietary/SaaS/Uberspace/README.md 的官方安装脚本完整讲解在 Uberspace 6 主机上从零部署 Wekan 的每一步配置 Node.js、申请 MongoDB 实例与空闲端口、下载并安装 Wekan 发布包、以 daemontools 服务方式常驻运行以及服务的启停、排错与彻底卸载。读完本文你将掌握一套无需 root 权限、完全运行在本地用户空间的 Wekan 部署方案并理解 ROOT_URL、MONGO_URL、MAIL_URL 等核心环境变量在实际部署中的含义。部署概览与适用前提Uberspace 是典型的“无 root 共享主机”用户只能在自己的 home 目录和系统提供的工具命令范围内操作。因此该部署方案的思路是使用 Uberspace 提供的uberspace-setup-*系列命令申请 MongoDB 数据库实例、空闲 TCP 端口并创建基于 daemontools 的服务从 Wekan 官方 GitHub Release 下载对应版本的.tar.gz发布包bundle解压后在bundle/programs/server目录执行npm install完成依赖安装通过环境变量MONGO_URL、ROOT_URL、MAIL_URL、MAIL_FROM、PORT告知 Wekan 如何连接数据库、以什么地址对外提供服务最终以node ~/wekan/bundle/main.js启动交给 daemontools 守护实现开机/进程退出后的自动拉起。该脚本在文档中说明其测试于 Wekan 0.32 与 0.63 两个版本。原文档同时指出最新的 Node.js / MongoDB / Meteor 版本请以仓库根目录的 Dockerfile 为准当前 Dockerfile 中标注的版本如NODE_VERSIONv24.21.0、METEOR_RELEASEMETEOR3.5.2对于 x64 架构最新发布的wekan-VERSION.zip位于 https://releases.wekan.team其安装思路可参考 Raspberry Pi 部署文档该文档详细列出了 Wekan 运行所需的最小依赖对应 CPU 架构的 bundle、Node.js 二进制、MongoDB以及一个设置好环境变量后执行node main.js的启动脚本。另外官方文档建议优先参考 UberLab 提供的《Uberspace 7 手册Wekan》作为新版本主机的部署指引原始出处为 issue #2009 的评论本文档则聚焦 Uberspace 6 的经典手工流程。两种使用方式该安装脚本支持两种执行方式无论哪种都需要先准备 SMTP 密码用于邮件通知功能。方式一逐行执行将下方脚本中的$1替换为真实 SMTP 密码即把SMTP_PASS$1改成SMTP_PASSsmtp_password然后逐行粘贴到 shell 中执行。方式二保存为脚本自动执行将脚本保存为文件install_wekan.sh赋予执行权限chmod x install_wekan.sh以 SMTP 密码作为命令行参数运行./install_wekan.sh smtp_password。脚本中SMTP_PASS$1会自动接收该命令行参数若直接执行而不传参可改为硬编码方式即取消注释# SMTP_PASSxxxxxxxxxx并填入真实密码。完整安装脚本逐段解读以下为原文档提供的完整脚本将其按功能分为五个阶段逐一解释。脚本头部与 SMTP 密码#!/bin/sh ## ## Usage: ./install_wekan.sh SMTP-password ## ## Draft ## Install Wekan (v0.63) on Uberspace 6 by Noodle / Chris ## ## Sources: ## https://wiki.uberspace.de/database:mongodb ## https://wiki.uberspace.de/development:nodejs ## https://wiki.uberspace.de/system:daemontools ## https://github.com/wekan/wekan/issues/907 ## Set SMTP password # SMTP_PASSxxxxxxxxxx SMTP_PASS$1脚本头部注明了用途、作者、版本号以及所参考的 Uberspace 官方 Wiki 文档。SMTP 密码会被用于构造MAIL_URL见下文用于 Wekan 发送账户验证、重置密码等系统邮件。第一阶段配置 Node.jscat __EOF__ ~/.npmrc prefix $HOME umask 077 __EOF__ echo export PATH/package/host/localhost/nodejs-4/bin:$PATH ~/.bash_profile source ~/.bash_profile这里做了两件事写入~/.npmrc把 npm 的全局安装前缀prefix指向 home 目录并设置umask 077使新创建的文件默认仅当前用户可读写避免共享主机上敏感文件如后续存放密码的~/etc/wekan-setup被其他用户读取将 Uberspace 6 上预装的 Node.js 4 的可执行目录加入PATH路径为/package/host/localhost/nodejs-4/bin并写入~/.bash_profile以便登录后自动生效然后source立即生效。原文档特别提示当前仓库的 Dockerfile 记录了最新的 Node.js / MongoDB / Meteor 版本要求如NODE_VERSIONv24.21.0、METEOR_RELEASEMETEOR3.5.2在较新的环境部署时应以仓库标注的版本为准。此外Raspberry Pi 文档 中同样强调除 bundle 外的关键运行要素就是与 bundle 匹配的 Node.js 二进制和 MongoDB 服务。第二阶段配置 MongoDBtest -d ~/service || uberspace-setup-svscan TEMPMDB$(uberspace-setup-mongodb) MONGO_USER${USER}_mongoadmin MONGO_PORT$(echo ${TEMPMDB} | grep -E -o m#:\s[0-9]{5}\sUs | cut -d -f 2) MONGO_PASS$(echo ${TEMPMDB} | grep -E -o rd:\s.\sTo\sconn | cut -d -f 2) echo -e MONGO_USER: ${MONGO_USER} \nMONGO_PORT: ${MONGO_PORT} \nMONGO_PASS: ${MONGO_PASS}这段脚本依次完成uberspace-setup-svscan如果~/service目录不存在则初始化 daemontools 的 svscan 运行环境这是后续创建常驻服务的基础uberspace-setup-mongodb申请一个属于当前用户的 MongoDB 实例输出文本中带有数据库端口和密码脚本用grep与cut从输出文本中提取出 5 位端口号匹配m#:\s[0-9]{5}\sUs和密码匹配rd:\s.\sTo\sconn拼接出 Mongo 管理员用户名为${USER}_mongoadmin即系统用户名加_mongoadmin后缀将解析结果打印出来方便人工核对。提取出的信息将用于构造MONGO_URL见第四阶段。数据库将以wekan为库名并使用authSourceadmin指定认证库。第三阶段申请空闲 WebSocket 端口export FREE_PORT$(uberspace-add-port --protocol tcp --firewall | grep -E -o [0-9]{5}) echo FREE_PORT: ${FREE_PORT}uberspace-add-port --protocol tcp --firewall会向 Uberspace 申请一个对外开放的 TCP 端口同时配置防火墙放行脚本从输出中提取 5 位端口号作为 Wekan 的监听端口。该端口既用于 HTTP 访问也用于 WebSocketMeteor 的 DDP 实时通信因此文档将其命名为“Websocket Port”。第四阶段组装 Wekan 运行环境变量## Issue #907 - Port must be speccified in root url, when Version 0.10.1 MONGO_URLmongodb://${MONGO_USER}:${MONGO_PASS}127.0.0.1:${MONGO_PORT}/wekan?authSourceadmin ROOT_URLhttp://${USER}.${HOSTNAME}:${FREE_PORT}/ MAIL_URLsmtp://${USER}:${SMTP_PASS}${HOSTNAME}:587/ MAIL_FROM${USER}${HOSTNAME} PORT${FREE_PORT} echo -e MONGO_URL: ${MONGO_URL} \nPORT: ${PORT} \nROOT_URL: ${ROOT_URL} \nMAIL_URL ${MAIL_URL} \nMAIL_FROM: ${MAIL_FROM}五个环境变量的含义如下变量示例值作用MONGO_URLmongodb://USER_mongoadmin:PASS127.0.0.1:PORT/wekan?authSourceadminWekan 连接 MongoDB 的完整连接串库名为wekan认证库为adminROOT_URLhttp://USER.HOSTNAME:PORT/对外访问的根地址脚本注释指出 issue #907 的结论当版本大于 0.10.1 时根 URL 中必须包含端口号否则实时通信与资源定位会出错MAIL_URLsmtp://USER:PASSHOSTNAME:587/SMTP 邮件发送地址使用 Uberspace 的 587 端口STARTTLS 常用端口MAIL_FROMUSERHOSTNAME邮件发件人地址由用户名与主机名拼接而成PORT5 位空闲端口Wekan Node.js 进程的监听端口从源码层面看MAIL_URL是 Meteor 邮件系统的核心配置在 server/lib/mailTransport.js 中smtpOptionsFromUrl会解析MAIL_URL得到协议必须为smtp:或smtps:、主机、端口587 对应 STARTTLS465 对应隐式 TLS、认证信息URL 中的用户名与密码会先做decodeURIComponent解码等 nodemailer 传输参数MAIL_FROM则在 server/lib/resetPasswordEmail.js 与 server/lib/verificationEmail.js 中作为邮件发件人来源这两处代码都会把“未配置或配置错误的MAIL_URL/MAIL_FROM”作为邮件功能不可用的典型原因之一进行处理。也就是说Uberspace 上邮件功能是否可用直接取决于这两个变量的正确性。第五阶段下载并安装 Wekanmkdir ~/wekan cd ~/wekan # Tested versions 0.32, 0.63 WEKAN_VERSION0.63 curl -OL https://github.com/wekan/wekan/releases/download/v${WEKAN_VERSION}/wekan-${WEKAN_VERSION}.tar.gz tar xzf wekan-${WEKAN_VERSION}.tar.gz rm wekan-${WEKAN_VERSION}.tar.gz cd ~/wekan/bundle/programs/server npm install cd ~在 home 目录创建~/wekan并进入从 GitHub Releases 下载对应版本的wekan-${WEKAN_VERSION}.tar.gz脚本以 0.63 为例解压后删除压缩包进入~/wekan/bundle/programs/server执行npm install安装 Meteor bundle 所需的 npm 依赖回到 home 目录。这一步与仓库其他平台文档保持一致Wekan 的发布形态是预编译的 Meteor bundleNode.js 侧只需要安装programs/server下的依赖即可运行。较新的部署可参照 Raspberry Pi 文档 的做法直接使用wekan-VERSION.zip如wekan-11.x-amd64.zip并在bundle/programs/server中安装依赖。第六阶段创建 daemontools 服务cat __EOF__ ~/etc/wekan-setup #!/bin/bash export MONGO_URL${MONGO_URL} export ROOT_URL${ROOT_URL} export MAIL_URL${MAIL_URL} export MAIL_FROM${MAIL_FROM} export PORT${PORT} __EOF__ cat __EOF__ ~/etc/wekan-start #!/bin/bash source ~/etc/wekan-setup exec node ~/wekan/bundle/main.js __EOF__ chmod 700 ~/etc/wekan-setup chmod ax ~/etc/wekan-start ## Init Start as servcie uberspace-setup-service wekan ~/etc/wekan-start ## Setup Start in bg for debugging # source ~/etc/wekan-setup node ~/wekan/bundle/main.js 关键点~/etc/wekan-setup环境变量导出文件集中保存MONGO_URL、ROOT_URL、MAIL_URL、MAIL_FROM、PORT五个变量。由于其中含有数据库密码与 SMTP 密码脚本将其权限设为chmod 700仅当前用户可读写执行配合第一步中~/.npmrc的umask 077共同保证敏感信息在共享主机上不被泄露~/etc/wekan-start服务启动脚本先source环境变量文件再exec node ~/wekan/bundle/main.js启动 Wekan。使用exec使 node 进程直接接管当前进程便于 daemontools 正确跟踪子进程uberspace-setup-service wekan ~/etc/wekan-start向 Uberspace 注册名为wekan的 daemontools 服务并立即启动被注释掉的一行source ~/etc/wekan-setup node ~/wekan/bundle/main.js 是调试用的前台/后台启动方式服务化不可用时可借此观察输出。控制 Wekan 服务daemontools 通过svc命令控制服务服务目录为~/service/wekan停止服务svc -d ~/service/wekan启动服务svc -u ~/service/wekan实时查看日志tailf ~/service/wekan/log/main/currenttailf持续跟踪日志文件是排查启动报错如 MongoDB 认证失败、端口被占用、bundle 依赖未装全的首选手段。daemontools 的更多细节可参考其官方 FAQsvscan、supervise、svc的完整语义。卸载 Wekan彻底移除需要依次执行三步1. 停止并移除服务uberspace-remove-service -s wekan2. 删除数据库数据mongo admin --port $MONGO_PORT -u $MONGO_USER -p $MONGO_PASS use wekan db.dropDatabase() exit使用前面解析出的 MongoDB 端口、管理员用户名与密码登录切换到wekan库后执行db.dropDatabase()删除全部看板数据。此步骤不可逆执行前请确认已无需要保留的数据。3. 删除安装文件rm -Rf ~/wekan/ ~/etc/wekan-*删除~/wekanbundle 安装目录与~/etc/wekan-*环境变量与服务启动脚本通配符同时覆盖wekan-setup与wekan-start。总结该脚本为 Uberspace 6 用户提供了一条零 root 权限的 Wekan 部署路径通过 Uberspace 工具链申请 MongoDB 与端口将五个核心环境变量固化为~/etc/wekan-setup再以 daemontools 服务方式托底运行。其价值不仅在于“装好即用”更在于完整展示了 Wekan 作为 Meteor 应用运行所需的全部外部契约——数据库连接串MONGO_URL、对外根地址ROOT_URL注意端口必须带上、SMTP 邮件配置MAIL_URL/MAIL_FROM与监听端口PORT——这些契约在仓库的 server/lib/mailTransport.js、server/lib/resetPasswordEmail.js 等源码中均有对应实现可追溯。如果你需要在其他共享主机或裸机上手工部署 Wekan只需把“Uberspace 专用命令”替换为对应的系统级等价操作如 systemd 或 init.d 服务、本地 MongoDB 实例本脚本的其余部分bundle 解压、npm install、环境变量导出、node main.js启动都可以直接复用最新版本要求请以仓库根目录的 Dockerfile 为准。【免费下载链接】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),仅供参考