>[danger] **弃用提醒:**
> *由于看云对于免费用户的限制愈发严苛,本文档已经迁移至语雀。本文档将不做维护。*
> **语雀地址**:[https://www.yuque.com/a632079/nodebb](https://www.yuque.com/a632079/nodebb)
*****
# 运行 NodeBB
> 本文章基于 NodeBB 官方文档 进行细节优化,更符合文档的排版。
在之前的章节中,我们已经掌握了 NodeBB 可执行文件 的基本指令。也知道我们该使用:
* `./nodebb start` 启动 NodeBB
* `./nodebb stop` 停止 NodeBB
* 你也可以使用 `npm start` 和 `npm stop` 来开关 NodeBB,他们和上面的指令是完全等效的。
----------------------------
>[warning] 特殊的启动方式:
> `node app.js` 启动单一进程的 NodeBB (使用该指令时只启动一个 NodeBB 进程)
> `node loader.js` 启动 进程池 的 NodeBB (只有使用该指令时,NodeBB 的端口池配置才会生效)
> **虽然上面的方法也能正常启动 NodeBB ,但我们依旧推荐使用 可执行文件 来操作NodeBB**
通过之前的学习,我们也知道上面的方法不能使 NodeBB 在开机时便自行启动。这时候,通过下面的方法,便能使你的 NodeBB 达到开机自启动的目的。
![](https://box.kancloud.cn/84c750b99355a7e154b7988f7f3fabc1_500x500.jpg)
>[info] 首先,请确认你的 Mongodb/Redis 服务是开机自启动的。
```
# Mongodb / redis 开机自启
systemctl enable mongod
systemctl enable redis
```
## pm2
PM2 是一个带有负载均衡功能的 Node 应用的进程管理器。
当你要把你的独立代码利用全部的服务器上的所有 CPU,并保证进程永远都活着,0 秒的重载, PM2 是十分完美的。
>[info] 使用 pm2 时,我们无需再为 NodeBB 配置端口组
```
$ sudo pm2 start /path/to/nodebb/app.js --name NodeBB
```
## systemd
>[info] 记得把 `/path/to/nodebb` 和 `myuser` 替换成自己的 路径 和 用户名 哦!
> ***我们能通过 systemd 使 NodeBB 开机自启***
Ubuntu 的新版本 使用 systemd 来管理服务。下面是一个NodeBB 的 systemd 服务例子:
```
[Unit]
Description=NodeBB
Documentation=https://docs.nodebb.org
After=system.slice multi-user.target mongod.service
[Service]
Type=simple
User=nodebb
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=nodebb
WorkingDirectory=/path/to/nodebb
ExecStart=/usr/bin/env node loader.js --no-silent --no-daemon
Restart=always
[Install]
WantedBy=multi-user.target
```
>[warning] 记得让 NodeBB 目录的所有者和你填写的用户名是同一个。
> 附指令: `sudo chown -R username.usergroup /path/to/nodebb`
把例子修改并保存到 `/etc/systemd/system/nodebb.service`。然后,你就能通过以下指令控制它了:
```
systemctl start nodebb
systemctl stop nodebb
```
>[danger] 我们在 `ExecStart` 的后面加了两个标志,他们的作用是:
> * `--no-silent`:确保将日志发送到stdout(在这种情况下,您可以通过运行 `journalctl -u nodebb` 查看日志输出)
> * `--no-daemon` :确保在主线程中运行,不产生任何分支。
> 加入开机自启动
```
systemctl enable nodebb
```
想要了解更多有关配置 systemd 的信息?请参考:[systemd 帮助页](https://www.freedesktop.org/software/systemd/man/systemd.service.html)
## Upstart
在 Ubuntu 的较早版本中,在启动时它会利用 `Upstart` 来管理进程。值得一提的是: 当它们崩溃时,`Upstart` 还会重新启动脚本。
您可以使用 `Upstart` 启动/停止/重新启动 NodeBB。
>[danger] 目前 CentOS7 / Ubuntu 16.04 都使用 systemd 管理服务,所以该节仅适合低于该版本的系统。
-----------
>[warning]注意:在 NodeBB v0.7.0 之前,Upstart 进程不能获得正确的 pid,这意味着没有办法停止 NodeBB 的进程。NodeBB v0.7.0 包含一些允许 Upstart 更有效地控制 NodeBB 的更新。
您可以对下方的 `Upstart` 配置进行简单修改,然后就可以投入使用。
```
start on startup
stop on runlevel [016]
respawn
setuid someuser
setgid someuser
script
cd /path/to/nodebb
node loader.js --no-silent --no-daemon
end script
```
若你是 Root 用户 并且 假定`nodebb.conf` 是 upstart 的配置文件的名字的话,可以通过: `start nodebb`,`stop nodebb`,`restart nodebb` 启动/停止/重启 NodeBB 。
下面的两个都是能够帮助 NodeBB 在出现异常后能帮助它自动重启的程序,十分实用。
## Supervisor
使用 [supervisor 包](https://github.com/isaacs/node-supervisor),你能在 NodeBB 异常时,自动重启 NodeBB:
```
$ npm install -g supervisor
$ supervisor app
```
缺省情况下,`supervisor` 持续将输出通过管道发给 `stdout`,它最适合开发版本。
## Forever
另一个保持 NodeBB 运行的方法,是使用 [forever 包](https://github.com/nodejitsu/forever) 。通过命令行接口,forever 可以监视 NodeBB,在需要的时候重启 NodeBB:
```
$ npm install -g forever
$ forever start app.js
```
## Grunt (适用于开发)
我们可以利用 Grunt 来启动 NodeBB 并在 有文件改动时重新编译资源。因为不重新编译未改动的文件,所以启动速度会快很多。
```
$ npm install -g grunt-cli
```
运行 Grunt 以便 启动 NodebB 并监听文件变动
```
$ grunt
```
>[info] 编写: NodeBB Development Team
维护: a632079
审核: PA Team
最后更新: 2018.01.20
- 序
- 赞助
- 导言
- 安装
- 通过操作系统
- Windows + Mongodb/Redis
- Ubuntu/Debian + Redis/Mongodb
- CentOS + Redis
- CentOS + Mongodb
- FreeBSD/OpenBSD + Redis
- Arch Linux + Redis
- OSX + Redis
- 通过云服务
- 通过主机面板安装
- AppNode
- CPanel
- 宝塔
- 使用
- FAQ
- 高级
- 运行 NodeBB
- 配置 Config.json
- 配置 Nginx
- 配置 MongoDB
- 更新 NodeBB
- 设置 Widgets
- 安装 Yarn
- 更新 MongoDB
- 数据库备份与恢复
- 重置管理员密码
- 让 NodeBB 支持搜索
- 优化
- 优化配置,提升NodeBB处理能力
- Google字体库 -> 360公共前端库
- Google字体库 -> 中科大镜像
- 海外VPS提升NodeBB访问速度
- 通过 NodeBB API 自动发帖
- 开发
- 准备
- 常用方法 & 变量
- 插件制作
- 使用工具包编写一个插件
- 主题制作
- 使用工具包编写一个主题
- 部件制作
- 国际化
- 钩子(hook)使用说明