>[danger] **棄用提醒:**
> *由于看云對于免費用戶的限制愈發嚴苛,本文檔已經遷移至語雀。本文檔將不做維護。*
> **語雀地址**:[https://www.yuque.com/a632079/nodebb](https://www.yuque.com/a632079/nodebb)
*****
>[info] **該文章是 PA Team 安裝 NodeBB中文社區 時使用的方法**
# Ubuntu/Debian
[TOC]
## 一、 配置環境
### 1.1 Node.js
Node.js 是由 Chrome JavaScript V8 引擎衍生出的一種高性能,高并發,易擴展的框架。
NodeBB也正是因為它,才具有了快捷,高效的特性。
* 截止目前,NodeBB 要求 Node.js 的最低版本為 v8.x,但是,我們推薦使用最新的 LTS 分支:v12.x
>[success] 目前,推薦使用 Ubuntu/Debian 包管理器 來快速安裝nodejs。
#### 1.1.1 使用 Ubuntu/Debian 包管理器來安裝 (推薦)
>[info] 不同于 nvm ,我們推薦您在非 **`ROOT`** 用戶下進行下列操作(直到教程結束)。
###### **使用 Nodejs 的快速配置腳本**
```
$ curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
```
---------
如果是位于大陸的服務器,我們強烈推薦您執行下面的操作 :
* 編輯 Node.js 源
```
$ sudo vim /etc/apt/sources.list.d/nodesource.list
```
使用下方的源來代替源內的 URL
> `https://mirrors.ustc.edu.cn/nodesource/deb/node_{版本號,例如: 12}.x`
* 更新 APT 源
```
$ sudo apt-get update
```
---------
通過 APT 安裝
```
$ sudo apt-get install -y nodejs
```
檢查 Node.js 版本
```
$ node -v
```
###### **補充: 安裝 `yarn`**
>[info] 本步驟僅為有需要的童鞋使用,不是必要步驟。
若你不是通過 包管理器 安裝 nodejs 的話,建議您使用下面的指令來安裝 `yarn`
```
$ curl -o- -L https://yarnpkg.com/install.sh | sudo bash
```
* 通過包管理器 安裝 `yarn`
配置 Yarn 源
```
$ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
$ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
```
更新 APT 源 并 安裝 Yarn
```
$ sudo apt-get update
$ sudo apt-get install yarn
```
檢查 Yarn 版本
```
$ yarn -v
```
>[info] 有關 Yarn 安裝的更多玩法,可以通過 **高級 - 安裝 Yarn** 了解。
#### 1.1.2 使用 NVM 來安裝 Node.js LTS (適用于多版本 Node.js 切換,共存)
>[warning] 我們建議您使用 **`Root`** 用戶來進行下面的安裝操作。 這樣會減少很多不必要的麻煩!
>在騰訊云親測:**使用默認的ubuntu用戶來安裝比使用Root麻煩十倍 <- 主要是`sudo`并不能載入你的環境配置,so...**)
* 首先,我們現在服務器上安裝 `NVM`
```
#截止2019.12.07,NVM最新版本為 v0.35.1
$ sudo curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.35.1/install.sh | bash
```
***可以在 [Github](https://github.com/creationix/nvm/) 中獲取 NVM 最新的安裝指令***
* 添加 NVM 到環境變量
```
$ export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
```
* 使環境變量的修改生效
```
$ source ~/.bashrc
```
* 檢查是否成功安裝
```
$ command -v nvm
```
如果沒有拋出任何錯誤信息,那么我們繼續下面的步驟吧。(如果有,請到Github中尋找解決方案。)
* 使用 NVM 安裝 Node.js 的 LTS 版本
***如果你使用的機器是國內的話,建議使用以下代碼讓NVM使用淘寶鏡像來下載源碼(騰訊云的下載速度只有可憐的1x.kb/s...)***
```
$ sudo vim ~/.bashrc
```
將下方的代碼放置到最下方
```
#讓NVM使用淘寶源
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
export NVM_IOJS_ORG_MIRROR=https://npm.taobao.org/mirrors/iojs
```
使其生效
```
$ source ~/.bashrc
```
好,我們使用下面的代碼來安裝LTS版本
```
#安裝Node.js LTS
$ sudo nvm install --lts
```
等待執行完成,如果使用`node -v` ,`npm -v`都能正確輸出版本號的話,說明nodejs已經成功安裝。
>[info] 在國內,NPM源的速度比較慢,可以使用`sudo npm config set registry https://registry.npm.taobao.org/`來將npm更換到國內的淘寶源
----
#### 1.1.3 使用源碼編譯安裝Node.js (**已不再推薦,且不再維護**)
首先,我們要去Node.js官網獲得源代碼文件`https://nodejs.org`。
我們推薦使用LTS作為NodeBB的驅動環境。截止`2018.01.20`,目前Node.js的LTS最新版本為`8.9.4`。
你可以通過下面的Linux指令將Node.js下載到你想要的目錄中。
```
$ sudo wget https://nodejs.org/dist/v8.9.4/node-v8.9.4.tar.gz
#國內速度比較慢,可以使用這個鏈接代替:
# https://npm.taobao.org/mirrors/node/v{版本號}/node-v{版本號}.tar.gz
```
然后,我們需要解壓這個壓縮包,并且開始編譯它。
```
$ sudo tar -xzf node*.tar.gz #解壓
$ cd node* #進入解壓后的文件夾
$ sudo ./configure #進行環境配置(檢測),如果出現warning 建議使用 Oneinstack 安裝Nginx 以解決環境依賴問題 (Nginx稍后會使用到)
$ sudo make #編譯 (可能需要數十分鐘)
$ sudo make install #安裝
#先別急,我們看看安裝是否成功
$ node -v #檢查是否輸出的是你要安裝的版本
$ npm -v #同上
```
>[info] 在國內,NPM源的速度比較慢,可以使用`sudo npm config set registry http://registry.npm.taobao.org/`來將npm更換到國內的淘寶源.
### 1.2 數據庫
#### Mongodb (推薦)
Mongodb是目前流行的NoSQL數據庫。它具有高性能,高可用,易擴展,富查詢的特性。相比Redis ,它更能節省內存開支。
- **Ubuntu**
Mongodb 目前只給LTS版本提供安裝包。例如,16.04 LTS (xenial),18.04 LTS(bionic)
使 APT 支持 https
```
$ sudo apt-get install apt-transport-https
```
導入公鑰
```
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
```
為Mongodb建立一個.list文件
>[info] 由于國內可能源不穩定,我們可以使用`https://mirrors.tuna.tsinghua.edu.cn/mongodb/apt/{ubuntu或者debian}` 來代替下面的官方源
---------------
>[success] 2017.07.17 新增: **阿里源** `https://mirrors.aliyun.com/mongodb/apt/{ubuntu或者debian}`
```
#(目前最新版本是 4.2,安裝其他版本可以將 4.2 替換為其他版本。這個方法可能向上兼容到 3.0。)
#如果你是Ubuntu 16.04 LTS 請執行下面的代碼
$ echo "deb [arch = amd64,arm64] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
#如果你是Ubuntu 18.04 LTS 執行下面的代碼
$ echo "deb [arch = amd64] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
```
更新apt源
```
$ sudo apt-get update
```
安裝Mongodb
```
$ sudo apt-get install -y mongodb-org #安裝Mongodb社區版
```
```
$ mongod --version # 檢測版本
```
>[danger] 請檢查:**您的 MongoDB 版本是否大于或等于3.4.10**,如果不是請立即升級(以前的版本存在嚴重的安全風險)!
-----
- Debian
導入公鑰
```
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
```
新建一個.list文件
>[info] 由于國內可能源不穩定,我們可以使用`http://mirrors.tuna.tsinghua.edu.cn/apt/{ubuntu或者debian}` 來代替下面的官方源
---------------
>[success] 17.07.17 新增: **阿里源** `http://mirrors.aliyun.com/mongodb/apt/{ubuntu或者debian}`
```
#(目前最新版本是4.2,安裝其他版本可以將下面的 4.2 替換為其他版本。這個方法可能向上兼容到3.0。)
# 如果你是Debian 10 Buster,請執行下面的命令
$ echo "deb http://repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
# 如果你是Debian 9 Stretch,請執行下面的命令
$ echo "deb http://repo.mongodb.org/apt/debian stretch/mongodb-org/4.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
```
更新apt源
```
$ sudo apt-get update
```
安裝Mongodb
```
$ sudo apt-get install -y mongodb-org
```
```
$ mongod --version # 檢測版本
```
>[danger] 請檢查:**您的 MongoDB 版本是否大于或等于3.4.10**,如果不是請立即升級(以前的版本存在嚴重的安全風險)!
**有關如何配置Mongodb數據庫,[請點擊這里](http://www.hmoore.net/a632079/nodebb-cn/372104)**
#### redis (不推薦大型社區使用)
>[danger] Q: (NodeBB Development)為什么我們不建議使用 Redis ?
>A: https://docs.nodebb.org/configuring/databases/redis/
1. 安裝 Redis
```shell
$ sudo add-apt-repository ppa:chris-lea/redis-server
$ sudo apt-get update
$ sudo apt-get install -y redis-server #安裝redis
```
2. 為 Redis 加入安全性保障:
>[success]**密碼支持,僅限本地使用,刪除FLUSHALL**
編輯 `/etc/redis/redis.conf`:
```
$ vim /etc/redis/redis.conf
```
在里面加入下面的內容:
```
requirepass yourpassword
bind 127.0.0.1
rename-command FLUSHALL ""
```
3. 重啟服務
```
service redis-server restart
```
## 二、安裝
### 2.1 獲取 NodeBB 程序
截止 2019.12.7,NodeBB 目前最新穩定版本為1.13.0。
首先,我們先得安裝好Git(如果有,可跳過)
```
$ sudo apt-get install -y git build-essential
```
找到一個你喜歡的位置,然后使用`git`指令獲取程序。
```
$ cd /home #修改為你喜歡的位置
$ sudo git clone -b v1.13.x https://github.com/NodeBB/NodeBB.git nodebb #這將在 /home 下面 新建一個名叫nodebb的文件夾并且會把程序從Github克隆到里面
```
>[info] 現在,你可以使用國內的鏡像倉庫(`https://gitee.com/qiai365/NodeBB.git`)來提高連接速度。
然后,我們先把依賴安裝完畢。
```
$ cd nodebb
```
> `1.7.x` 起,無需執行`npm i --production` 或 `yarn install --production`
現在,我們就可以對開始程序的配置了。
```
$ sudo ./nodebb setup
```
>[info] NodeBB v1.7.1 支持使用 `./nodebb install` 來使用 可視化的 Web 界面進行安裝(配置)
*可以根據括號中的提示完成信息的填寫,nodebb監聽的默認端口是`4567`,Mongodb 監聽的端口是 `27017`*
使用`sudo ./nodebb start` 啟動,享受NodeBB給你帶來的快樂吧!
### 讓NodeBB開機自啟
方法可以參考 Ghost 的安裝,不過我們還是建議你把NodeBB注冊為服務。
首先,先新建一個叫做nodebb的用戶和用戶組并且把nodebb目錄下所有文件的所有權轉移給這個用戶(組)。
```
$ sudo adduser --system --group nodebb
$ sudo chown -R nodebb:nodebb /{你之前填寫的目錄}/nodebb
```
現代化的Linux系統都使用 `systemd` 作為默認的初始化系統。讓我們給 NodeBB 新建一個 systemd 單元吧。使用`vim /lib/systemd/system/nodebb.service`編輯,請將下面的內容復制進去。
```
[Unit]
Description=NodeBB forum for Node.js.
Documentation=http://nodebb.readthedocs.io/en/latest/
After=system.slice multi-user.target
[Service]
Type=simple
User=nodebb
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=nodebb
Environment=NODE_ENV=production
WorkingDirectory=/home/nodebb
#請把上面的目錄替換為你的nodebb目錄
ExecStart=/usr/bin/node loader.js --no-daemon --no-silent
#請修改/usr/bin/node 為which node所打印的位置
Restart=always
[Install]
WantedBy=multi-user.target
```
好了,我們啟用并且運行nodebb服務吧!
***如果前面使用`./nodebb start` 運行了nodebb的話,請先使用 `./nodebb stop`停止。***
```
$ sudo systemctl enable nodebb
$ sudo service nodebb start
$ sudo service nodebb status
```
## 三、使用Web服務器反代NodeBB
### Nginx
#### 通過 系統源 安裝 Nginx
1. 先去官網下載 apt 源的簽名,并添加
```
$ wget http://nginx.org/keys/nginx_signing.key
$ sudo apt-key add nginx_signing.key
```
2. 在 /etc/apt/sources.list 添加源
```
$ vim /etc/apt/sources.list
# Ubuntu 16.04
$ deb http://nginx.org/packages/ubuntu/ xenial nginx
$ deb-src http://nginx.org/packages/ubuntu/ xenial nginx
# Ubuntu 14.04
$ deb http://nginx.org/packages/ubuntu/ trusty nginx
$ deb-src http://nginx.org/packages/ubuntu/ trustyl nginx
# Debian 7 Wheezy
$ deb http://nginx.org/packages/debian/ wheezy nginx
$ deb-src http://nginx.org/packages/debian/ wheezy nginx
# Debian 8 Jessie
$ deb http://nginx.org/packages/debian/ jessie nginx
$ deb-src http://nginx.org/packages/debian/ jessie nginx
```
3. 安裝
```
$ sudo apt-get update
$ sudo apt-get install nginx
```
4. 新增配置
>[success] 有關 詳細的Nginx 反代配置 您可以參考**高級 - 配置Nginx**篇。
執行 `vim /etc/nginx/nginx.conf`,在 `http` 語句塊內追加上:
```nginx
##########################################
server {
listen 80;
server_name www.xxx.com; # 你的域名
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:4567;
proxy_redirect off;
# Socket.IO Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# 配置 502 頁? 參考: 高級 - 配置 Nginx
}
##########################################
```
5. 啟動 Nginx
```
$ service nginx start
```
#### 通過 編譯 安裝 Nginx
>[info] 由于編譯安裝 比較繁瑣,所以我們推薦使用 `Oneinstack` 來進行安裝 Nginx.
```
$ sudo apt-get -y install wget screen curl python
$ wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz
$ tar -xzf oneinstack-full.tar.gz
$ cd oneinstack
$ screen -S os
# 在 Screen 內的操作
$ ./install.sh
```
根據需要選擇你需要安裝的部分。
>[success] 下面的內容是基于你使用這個安裝包安裝了 `Nginx` 后的。
```
$ cd ~/oneinstack #跳轉到你解壓oneinstack的目錄
$ sudo ./vhost.sh add #配置你需要使用的域名(可以開啟ssl)
$ sudo vim /usr/local/nginx/conf/vhost/domains.conf
```
>[success] 有關 詳細的Nginx 反代配置 您可以參考**高級 - 配置Nginx**篇。
* 編輯你剛才填寫的域名的配置文件。
* 在文件中,我們刪除所有的 location塊。并且我們需要把下面的 location 復制進你的conf文件中。
* 如果你啟用了ssl,請稍后將正確的證書編輯進相應的文件(通常目錄為/usr/local/nginx/conf/ssl/)
```
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:4567;
proxy_redirect off;
# Socket.IO Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
```
最后,我們需要使用下面的指令重載Nginx(如果報錯,修改指定位置即可。)
```
$ sudo service nginx reload
```
---
### 其他 Web 服務器
下面是Apache的配置方法,如果您需要,可以點擊查看。
* [Apache v2.4.x+](http://nodebb.readthedocs.io/en/latest/configuring/proxies/apache.html)
* [Apache v2.x](http://nodebb.readthedocs.io/en/latest/configuring/proxies/apache2.2.html)
>參考:
>[NodeBB-Docs](http://nodebb.readthedocs.io/en/latest/index.html)
>[Oneinstack](http://oneinstack.com)
------------------------
>[info] 編寫: a632079
維護: a632079
審核: PA Team
最后更新: 2019.12.07
- 序
- 贊助
- 導言
- 安裝
- 通過操作系統
- 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)使用說明