>[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 達到開機自啟動的目的。

>[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)使用說明