NodeBB - это форум на базе Node.js. Он использует веб-сокеты для мгновенного взаимодействия и уведомления в режиме реального времени. Исходный код NodeBB публично размещен на Github . Это руководство проведет вас через процесс установки NodeBB на новом экземпляре Ubuntu 18.04 LTS Vultr с использованием Node.js, MongoDB в качестве базы данных, Nginx в качестве обратного прокси-сервера и Acme.sh для SSL-сертификатов.
Требования
NodeBB требует установки следующего программного обеспечения:
- Гит
- Node.js версии 6.9.0 или новее
- MongoDB версии 2.6 или новее
- Nginx
- Минимум 1024 МБ ОЗУ
- Доменное имя с
A
/ AAAA
записи настроены
Прежде чем вы начнете
Проверьте версию Ubuntu.
lsb_release -ds
# Ubuntu 18.04 LTS
Создайте новую non-root
учетную запись пользователя с sudo
доступом и переключитесь на нее.
adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe
su - johndoe
ПРИМЕЧАНИЕ . Замените johndoe
на свое имя пользователя.
Установите часовой пояс.
sudo dpkg-reconfigure tzdata
Убедитесь, что ваша система обновлена.
sudo apt update && sudo apt upgrade -y
Установите необходимые пакеты.
sudo apt install -y git build-essential apt-transport-https
Установите Node.js
NodeBB управляется Node.js, поэтому его необходимо установить. Рекомендуется установить текущую LTS-версию Node.js.
Установите Node.js из репозитория NodeSource.
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt install -y nodejs
Проверьте установку Node.js и npm.
node -v && npm -v
# v10.15.0
# 5.6.0
MongoDB является базой данных по умолчанию для NodeBB.
Установите MongoDB.
sudo apt install -y mongodb
Проверьте версию.
mongo --version | head -n 1 && mongod --version | head -n 1
# MongoDB shell version v3.6.3
# db version v3.6.3
Создайте базу данных MongoDB и пользователя для NodeBB.
Сначала подключитесь к серверу MongoDB.
mongo
Переключиться на встроенную admin
базу данных.
> use admin
Создать административного пользователя.
> db.createUser( { user: "admin", pwd: "<Enter a secure password>", roles: [ { role: "readWriteAnyDatabase", db: "admin" }, { role: "userAdminAnyDatabase", db: "admin" } ] } )
ПРИМЕЧАНИЕ. Замените местозаполнитель <Enter a secure password>
собственным выбранным паролем.
Добавьте новую базу данных с именем nodebb
.
> use nodebb
База данных будет создана и контекст переключен на nodebb
. Затем создайте nodebb
пользователя с соответствующими привилегиями.
> db.createUser( { user: "nodebb", pwd: "<Enter a secure password>", roles: [ { role: "readWrite", db: "nodebb" }, { role: "clusterMonitor", db: "admin" } ] } )
ПРИМЕЧАНИЕ. Снова замените заполнитель <Enter a secure password>
на выбранный вами пароль.
Выход из оболочки Монго.
> quit()
Перезапустите MongoDB и убедитесь, что созданный ранее администратор может подключиться.
sudo systemctl restart mongodb.service
mongo -u admin -p your_password --authenticationDatabase=admin
Установите последнюю основную версию Nginx из официального репозитория Nginx.
wget https://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
rm nginx_signing.key
sudo -s
printf "deb https://nginx.org/packages/mainline/ubuntu/ $(lsb_release -sc) nginx\ndeb-src https://nginx.org/packages/mainline/ubuntu/ $(lsb_release -sc) nginx\n" >> /etc/apt/sources.list.d/nginx_mainline.list
exit
sudo apt update
sudo apt install -y nginx
Проверьте версию.
sudo nginx -v
# nginx version: nginx/1.15.0
Включите и запустите Nginx.
sudo systemctl enable nginx.service
sudo systemctl start nginx.service
NodeBB по умолчанию работает на порту 4567
. Чтобы избежать необходимости печатать http://example.com:4567
, мы настроим Nginx как обратный прокси-сервер для приложения NodeBB. Каждый запрос на порт 80
или 443
(если используется SSL) будет перенаправлен на порт 4567
.
Запустите sudo vim /etc/nginx/conf.d/nodebb.conf
и заполните его базовой конфигурацией обратного прокси ниже.
server {
listen [::]:80;
listen 80;
server_name forum.example.com;
root /usr/share/nginx/html;
client_max_body_size 50M;
location /.well-known/acme-challenge/ {
allow all;
}
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_hide_header X-Powered-By;
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";
}
}
Примечание. Обновите server_name
директиву, указав свой домен / имя хоста.
Проверьте конфигурацию.
sudo nginx -t
Перезагрузить Nginx.
sudo systemctl reload nginx.service
Установите клиент Acme.sh и получите сертификат Let's Encrypt (необязательно)
Защита вашего форума с помощью HTTPS не обязательна, но это защитит трафик вашего сайта. Acme.sh - это чистая оболочка Unix для получения SSL-сертификатов от Let's Encrypt с нулевыми зависимостями.
Загрузите и установите Acme.sh.
sudo mkdir /etc/letsencrypt
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
sudo ./acme.sh --install --home /etc/letsencrypt --accountemail [email protected]
cd ~
source ~/.bashrc
Проверьте версию.
acme.sh --version
# v2.7.9
Получить сертификаты RSA и ECDSA для forum.example.com
.
# RSA 2048
sudo /etc/letsencrypt/acme.sh --issue --home /etc/letsencrypt -d forum.example.com --webroot /usr/share/nginx/html --reloadcmd "sudo systemctl reload nginx.service" --accountemail [email protected] --ocsp-must-staple --keylength 2048
# ECDSA/ECC P-256
sudo /etc/letsencrypt/acme.sh --issue --home /etc/letsencrypt -d forum.example.com --webroot /usr/share/nginx/html --reloadcmd "sudo systemctl reload nginx.service" --accountemail [email protected] --ocsp-must-staple --keylength ec-256
После выполнения вышеуказанных команд ваши сертификаты и ключи будут находиться в следующих каталогах:
- RSA:
/etc/letsencrypt/forum.example.com
- ECC / ECDSA:
/etc/letsencrypt/forum.example.com_ecc
После получения сертификатов от Let's Encrypt нам необходимо настроить Nginx для их использования.
Запустите sudo vim /etc/nginx/conf.d/nodebb.conf
снова и настройте Nginx в качестве обратного прокси-сервера HTTPS.
server {
listen [::]:443 ssl http2;
listen 443 ssl http2;
listen [::]:80;
listen 80;
server_name forum.example.com;
root /usr/share/nginx/html;
client_max_body_size 50M;
location /.well-known/acme-challenge/ {
allow all;
}
# RSA
ssl_certificate /etc/letsencrypt/forum.example.com/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/forum.example.com/forum.example.com.key;
# ECDSA
ssl_certificate /etc/letsencrypt/forum.example.com_ecc/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/forum.example.com_ecc/forum.example.com.key;
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";
}
}
Проверьте конфигурацию.
sudo nginx -t
Перезагрузить Nginx.
sudo systemctl reload nginx.service
Установить NodeBB
Создайте корневой каталог документа.
sudo mkdir -p /var/www/nodebb
Изменить владельца /var/www/nodebb
каталога на johndoe
.
sudo chown -R johndoe:johndoe /var/www/nodebb
Перейдите в корневую папку документа.
cd /var/www/nodebb
Клонируйте последнюю версию NodeBB в корневую папку документа.
git clone -b v1.10.x https://github.com/NodeBB/NodeBB.git .
Запустите команду установки NodeBB и ответьте на каждый вопрос, когда будет предложено.
./nodebb setup
После завершения настройки NodeBB запустите, ./nodebb start
чтобы вручную запустить сервер NodeBB.
./nodebb start
После этой команды вы сможете получить доступ к вашему форуму в веб-браузере.
Запустите NodeBB в качестве системной службы
При запуске через ./nodebb start
NodeBB не будет автоматически запускаться снова при перезагрузке системы. Чтобы избежать этого, нам нужно настроить NodeBB в качестве системного сервиса.
Если работает, остановите NodeBB.
./nodebb stop
Создайте нового непривилегированного nodebb
пользователя.
sudo adduser nodebb
Измените владельца /var/www/nodebb
каталога на nodebb
пользователя.
sudo chown -R nodebb:nodebb /var/www/nodebb
Создайте nodebb.service
файл конфигурации модуля systemd. Этот файл модуля будет обрабатывать запуск демона NodeBB. Запустите sudo vim /etc/systemd/system/nodebb.service
и заполните файл следующим содержимым:
[Unit]
Description=NodeBB
Documentation=https://docs.nodebb.org
After=system.slice multi-user.target mongod.service
[Service]
Type=forking
User=nodebb
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=nodebb
Environment=NODE_ENV=production
WorkingDirectory=/var/www/nodebb
PIDFile=/var/www/nodebb/pidfile
ExecStart=/usr/bin/env node loader.js
Restart=always
[Install]
WantedBy=multi-user.target
ПРИМЕЧАНИЕ. Установите имя пользователя и путь к каталогу в соответствии с выбранными вами именами.
Включить nodebb.service
при перезагрузке и сразу запустить nodebb.service
.
sudo systemctl enable nodebb.service
sudo systemctl start nodebb.service
Проверьте nodebb.service
статус.
sudo systemctl status nodebb.service
sudo systemctl is-enabled nodebb.service
Вот и все. Ваш экземпляр NodeBB теперь запущен и работает.