NodeBBเป็นซอฟต์แวร์ฟอรัมที่ใช้ Node.js มันใช้ซ็อกเก็ตเว็บสำหรับการโต้ตอบแบบทันทีและการแจ้งเตือนแบบเรียลไทม์ รหัสที่มา NodeBB เป็นเจ้าภาพสาธารณะบนGithub คู่มือนี้จะแนะนำคุณเกี่ยวกับกระบวนการติดตั้ง NodeBB บนอินสแตนซ์ FreeBSD 12 Vultr ใหม่โดยใช้ Node.js, MongoDB เป็นฐานข้อมูล, Nginx เป็น reverse proxy และ Acme.sh สำหรับใบรับรอง SSL
ความต้องการ
NodeBB ต้องติดตั้งซอฟต์แวร์ต่อไปนี้:
- Node.js เวอร์ชั่น 6.9.0 หรือสูงกว่า
- MongoDB เวอร์ชัน 2.6 ขึ้นไป
- Nginx
- Git
- RAM ขั้นต่ำ 1024MB
- ชื่อโดเมนที่มี
A
/ AAAA
บันทึกการตั้งค่า
ก่อนที่จะเริ่ม
ตรวจสอบเวอร์ชั่น FreeBSD
uname -ro
# FreeBSD 12.0-RELEASE
ตรวจสอบให้แน่ใจว่าระบบ FreeBSD ของคุณทันสมัย
freebsd-update fetch install
pkg update && pkg upgrade -y
ติดตั้งแพ็คเกจที่จำเป็นหากไม่มีอยู่ในระบบของคุณ
pkg install -y sudo vim unzip wget git bash socat gcc8 pkgconf vips
สร้างบัญชีผู้ใช้ใหม่ด้วยชื่อผู้ใช้ที่คุณต้องการ (เราจะใช้johndoe
)
adduser
# Username: johndoe
# Full name: John Doe
# Uid (Leave empty for default): <Enter>
# Login group [johndoe]: <Enter>
# Login group is johndoe. Invite johndoe into other groups? []: wheel
# Login class [default]: <Enter>
# Shell (sh csh tcsh nologin) [sh]: bash
# Home directory [/home/johndoe]: <Enter>
# Home directory permissions (Leave empty for default): <Enter>
# Use password-based authentication? [yes]: <Enter>
# Use an empty password? (yes/no) [no]: <Enter>
# Use a random password? (yes/no) [no]: <Enter>
# Enter password: your_secure_password
# Enter password again: your_secure_password
# Lock out the account after creation? [no]: <Enter>
# OK? (yes/no): yes
# Add another user? (yes/no): no
# Goodbye!
รันvisudo
คำสั่งและยกเลิกหมายเหตุ%wheel ALL=(ALL) ALL
บรรทัดเพื่ออนุญาตให้สมาชิกของwheel
กลุ่มเรียกใช้งานคำสั่งใด ๆ
visudo
# Uncomment by removing hash (#) sign
# %wheel ALL=(ALL) ALL
su
ตอนนี้เปลี่ยนไปใช้ที่สร้างขึ้นใหม่ของคุณด้วย
su - johndoe
หมายเหตุ: แทนที่johndoe
ด้วยชื่อผู้ใช้ของคุณ
ตั้งค่าเขตเวลา
sudo tzsetup
ติดตั้ง Node.js
NodeBB ขับเคลื่อนโดย Node.js ดังนั้นจึงจำเป็นต้องติดตั้ง แนะนำให้ทำการติดตั้งรุ่น LTS ปัจจุบันของ Node.js
ติดตั้ง Node.js และ npm
sudo pkg install -y node10 npm-node10
ตรวจสอบเวอร์ชั่น
node -v && npm -v
# v10.15.3
# 6.9.0
MongoDB เป็นฐานข้อมูลเริ่มต้นสำหรับ NodeBB
ติดตั้ง MongoDB
sudo pkg install -y mongodb40
ตรวจสอบเวอร์ชั่น
mongo --version | head -n 1 && mongod --version | head -n 1
# MongoDB shell version v4.0.6
# db version v4.0.6
เปิดใช้งานและเริ่ม MongoDB
sudo sysrc mongod_enable=yes
sudo service mongod start
สร้างฐานข้อมูลและผู้ใช้สำหรับ 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>
ด้วยรหัสผ่านที่คุณเลือก
ออกจากเปลือก Mongo
> quit()
รีสตาร์ท MongoDB และให้แน่ใจว่าผู้ใช้ที่เป็นผู้ดูแลระบบที่สร้างขึ้นก่อนหน้านี้สามารถเชื่อมต่อได้
sudo service mongod restart
mongo -u admin -p your_password --authenticationDatabase=admin
ติดตั้ง Nginx
sudo pkg install -y nginx
ตรวจสอบเวอร์ชั่น
nginx -v
# nginx version: nginx/1.14.2
เปิดใช้งานและเริ่ม Nginx
sudo sysrc nginx_enable=yes
sudo service nginx start
NodeBB 4567
โดยค่าเริ่มต้นทำงานบนพอร์ต เพื่อหลีกเลี่ยงการพิมพ์http://example.com:4567
เราจะกำหนดค่า Nginx เป็น reverse proxy สำหรับแอปพลิเคชัน NodeBB คำขอทุกพอร์ต80
หรือ443
ถ้า SSL 4567
ที่ใช้จะถูกส่งต่อไปยังท่าเรือ
รันsudo vim /usr/local/etc/nginx/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
คำสั่งด้วยโดเมน / ชื่อโฮสต์ของคุณ
บันทึกไฟล์และออกด้วย:+ +WQ
ตอนนี้เราต้องรวมnodebb.conf
ไว้ในnginx.conf
ไฟล์หลัก
เรียกใช้sudo vim /usr/local/etc/nginx/nginx.conf
และเพิ่มบรรทัดต่อไปนี้ในhttp {}
บล็อก
include nodebb.conf;
ตรวจสอบการกำหนดค่า
sudo nginx -t
โหลดซ้ำ Nginx
sudo service nginx reload
ติดตั้งไคลเอนต์ 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 ~
ตรวจสอบเวอร์ชั่น
/etc/letsencrypt/acme.sh --version
# v2.8.1
ได้รับอาร์เอสและ 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 service nginx reload" --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 service nginx reload" --keylength ec-256
หลังจากเรียกใช้คำสั่งข้างต้นใบรับรองและคีย์ของคุณจะอยู่ใน:
/etc/letsencrypt/forum.example.com
อาร์เอส:
- ECC /
/etc/letsencrypt/forum.example.com_ecc
ECDSA:
หลังจากได้รับใบรับรองจาก Let's Encrypt เราต้องกำหนดค่า Nginx เพื่อใช้งาน
รันsudo vim /usr/local/etc/nginx/nodebb.conf
อีกครั้งและกำหนดค่า Nginx เป็น HTTPS reverse proxy
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 service nginx reload
ติดตั้ง NodeBB
สร้างไดเรกทอรีรากของเอกสาร
sudo mkdir -p /usr/local/www/nodebb
เปลี่ยนความเป็นเจ้าของของไดเรกทอรีไป/usr/local/www/nodebb
johndoe
sudo chown -R johndoe:johndoe /usr/local/www/nodebb
นำทางไปยังโฟลเดอร์รูทเอกสาร
cd /usr/local/www/nodebb
โคลน NodeBB ล่าสุดลงในโฟลเดอร์รูทเอกสาร
git clone -b v1.11.x https://github.com/NodeBB/NodeBB.git .
เรียกใช้คำสั่งการตั้งค่า NodeBB และตอบคำถามแต่ละข้อเมื่อได้รับแจ้ง
./nodebb setup
หลังจากติดตั้ง NodeBB เสร็จแล้วให้เรียกใช้./nodebb start
เพื่อเริ่มเซิร์ฟเวอร์ NodeBB ของคุณด้วยตนเอง
./nodebb start
หลังจากคำสั่งนี้คุณจะสามารถเข้าถึงอินสแตนซ์ฟอรัม NodeBB ของคุณในเว็บเบราว์เซอร์
เรียกใช้ NodeBB ด้วย PM2
เมื่อเริ่มต้นผ่าน./nodebb start
NodeBB จะไม่เริ่มต้นโดยอัตโนมัติอีกครั้งเมื่อระบบรีบูต เพื่อหลีกเลี่ยงปัญหานี้เราจะต้องตั้งค่า NodeBB เป็นบริการระบบ
หากทำงานให้หยุด NodeBB
./nodebb stop
ติดตั้ง PM2 ทั่วโลก
sudo npm install pm2 -g
ตรวจสอบเวอร์ชั่น
pm2 -v
# 3.5.0
นำทางไปยังรูทเอกสาร NodeBB
cd /usr/local/www/nodebb
เริ่ม NodeBB ผ่าน PM2
pm2 start app.js
แสดงรายการกระบวนการ NodeBB
pm2 ls
ตรวจสอบระบบ init ที่มีอยู่
pm2 startup
คัดลอกและวาง ouput ของคำสั่งนี้ใน CLI เพื่อตั้งค่า hook เริ่มต้นของคุณ
บันทึกรายการกระบวนการของคุณ
pm2 save
แค่นั้นแหละ. อินสแตนซ์ NodeBB ของคุณเปิดใช้งานแล้ว