ການ Deploy NodeJS ຂື້ນ Production

ຂຽນຂື້ນເມື່ອ

ການ Deploy NodeJS ຂື້ນ Production

ສິ່ງຈຳເປັນທີ່ຕ້ອງມີ ກໍຄື Account AWS. ສຳລັບຄົນທີ່ບໍ່ຄຸ້ນເຄີຍກັບຄຳນີ້ ແລະ ຢາກຮູ້ວິທີເປີດ Account (ເປີດ Free ເດີ້).

ໃຫ້ເຂົ້າໄປໃນ Website ແລະ ກໍເປີດໄດ້ເລີຍ. ມີສິ່ງໜື່ງທີ່ຕ້ອງມີກໍຄື Credit Card, ເຊີ່ງສາມາດເປີດຜ່ານ BCEL One ໄດ້ໃນຮູບແບບ Prepaid Card ແລ້ວກໍນຳເອົາຂໍ້ມູນບັດທະນາຄານນັ້ນໄປຜຸກໄດ້ເລີຍ.

Nginx ແມ່ນຫຍັງ? (engine X)

ມັນເປັນ HTTP + Reverse Proxy Server, Mail Server, ແລະ TCP/UDP proxy server. ເວົ້າງ່າຍໆກໍຄື ເຮົາສາມາດໃຊ້ເປັນເປັນ Web Server ໃຫ້ເຮົາໄດ້ໃນຕອນນີ້. ແຕ່ບໍ່ແມ່ນ Server ເດີ້, ຈົ່ງແຍກໃຫ້ອອກລະຫວ່າງ Server ແລະ Web Server.

ມາເລີ່ມລົງມືກັນເລີຍ

ກ່ອນອື່ນໝົດຕ້ອງ ssh ເຂົ້າ Server ເຮົາກ່ອນ (ຂອງຂ້ອຍເອງແມ່ນ Ubuntu Server 22.04 LTS (HVM), Free tier eligible)
ssh yeng@10.10.10.10

Update and Upgrade Packages ຕ່າງໆ

sudo apt update
sudo apt upgrade

ຕິດຕັ້ງ NodeJS

sudo apt-get install nodejs
sudo apt install npm # ຖ້າກວດສອບ npm ບໍ່ໄດ້

ກວດສອບວ່າຕິດຕັ້ງໄດ້ບໍ ແລະ ເປັນ Version ໃດ

node -v
npm -v

ແນະນຳໃຫ້ຕິດ nvm ເພື່ອງ່າຍຕໍ່ການຈັດການ Node Version, ຕົວຢ່າງ ປ່ຽນຈາກ node version 12 ເປັນ 20

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

# ບໍ່ຕ້ອງກັງວົນວ່າ ຢ້ານຂຽນຜິດ, ຫຼັງຈາກຂັ້ນຕອນກ່ອນໜ້ານີ້ ມັນຈະບອກສະແດງ ຄຳສັ່ງຕໍ່ໄປນີ້ ແລ້ວເຈົ້າສາມາດ Copy, Paste, and Enter
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

# ທົດລອງ nvm

nvm --version

# ຖ້າຢາກໃຊ້ node version ໃດ ກໍສາມາດຂຽນແບບນີ້ເລີຍ
nvm install 20
nvm use 20 # ຕ້ອງການໃຊ້ node version 20

ສ້າງ Project NodeJS ນ້ອຍໆ

mkdir nodejs
cd nodejs
npm init -y
npm install express cors
vim app.js

ຂຽນ code javascript ແບບນີ້ລົງໄປ

const express = require('express')
const cors = require('cors')
const app = express()
const port = 3000

app.use(cors())

app.get('/', (req, res) => {
    return res.send('Hello world')
})

app.listen(port, () => {
    console.log(`Server is running on port ${port}`)
})

ທົດລອງລະບົບເຮົາ

node app.js
# Server is running on port 3000

ຫລັງຈາກຮອດຂັ້ນຕອນນີ້ ພວກເຮົາສາມາດທົດລອງລະບົບເຮົາຜ່ານ ຄອມພີວເຕີ ຫຼື ໂທລະສັບມືຖືໄດ້ແລ້ວ ໂດຍການພີມ http://10.10.10.10:3000 ໃນ Browsers (10.10.10.10 ແມ່ນ public IP ຂອງ Instance)

ແຕ່ຈະບໍ່ສະແດງຫຍັງອອກມາ ແຖມ Load ໄປດົນໆ. ສາເຫດກໍຄືເຮົາຕ້ອງໄດ້ອະນຸຍາດ PORT (3000) ໃຫ້ແກ່ Instance ຂອງເຮົາກ່ອນ.

ວິທີກໍຄື

  • ເຂົ້າ AWS EC2 Dashboard
  • ກົດເຂົ້າເບີ່ງລາຍລະອຽດ Instance ຂອງທີ່ຕ້ອງການ
  • Click Security Tab > Click Security Groups > Click Edit Inbound Rules > Click Add rule
  • ເລືອກ Type ເປັນ Custom TCP, Port Range ເປັນ 3000, Source ເປັນ Anywhere ຫຼື 0.0.0.0/0
  • Click Save Rules

ລອງໃຫມ່ອີກຄັ້ງ, ໂດຍການພີມ http://10.10.10.10:3000 ໃນ Browsers

ຖ້າເຮົາໃຊ້ node run app, ເວລາເຮົາ STOP ລະບົບເຮົາຈະບໍ່ລົ້ມບໍ?

ແນ່ນອນວ່າ ຖ້າເຮົາຢຸດ (Ctrl + C) ລະບົບເຮົາກໍບໍ່ສາມາດເຂົ້າໄດ້ແລ້ວ

ວິທີແກ້ໄຂກໍຄື ຕ້ອງມີຕົວຊ່ວຍ, ເຊັ່ນ PM2

PM2 ເປັນ process manager ສຳລັບ JavaScript runtime Node.JS. ຖ້າຈະເວົ້າງ່າຍໆອີກກໍຄື ຕົວຊ່ວຍໃຫ້ NodeJS Server ຂອງເຮົາ Run ໄດ້ 24 ຊົ່ວໂມງ ເຖີງຈະປິດລະບົບແລ້ວກໍຕາມ.

ວິທີຕິດຕັ້ງ PM2

sudo npm install pm2 -g

ວິທີ Run App ກໍພຽງແຕ່

pm2 start app.js

# ສ່ວນເສີມ
pm2 list # ເບີ່ງລາຍການທີ່ກຳລັງເຮັດວຽກໃນເບື່ອງຫຼັງ
pm2 stop [id] # ຢຸດ process ນັ້ນໆ
pm2 restart [id]

ເທົ່ານີ້ ເຮົາກໍສາມາດ deploy nodejs ໄດ້ແລ້ວ, ແຕ່ເປັນຫຍັງຕ້ອງມີ nginx ມາພ້ອມ.

Nginx ໃນບົດຄວາມນີ້ຈະຊ່ວຍໃຫ້ ເຮົາບໍ່ຈຳເປັນຕ້ອງປ້ອນ 10.10.10.10:3000, ແຕ່ເຮົາສາມາດພີມ 10.10.10.10 ໄດ້ເລີຍ.

ຕິດຕັ້ງ nginx

sudo apt install nginx
sudo vim /etc/nginx/sites-enabled/default

ຊອກຫາແຖວທີ່ຂຽນວ່າ

    location / {
        try_files $uri $uri/ =404;
    }

ປ່ຽນເປັນ

    location / {
        proxy_pass http://localhost:3000;
    }

Restart nginx

sudo systemctl restart nginx

ຫຼັງຈາກນັ້ນ ເຂົ້າໄປ AWS EC2 Dashboard, ແລ້ວເປີດ PORT 80 ດັ່ງທີ່ເຄີຍເປີດໃຫ້ PORT 3000

ທົດລອງ ສຳເລັດ

ຜູ້ຂຽນ: Kayengxiong Tongsuatong

@Facebook