GNU/Linux >> Belajar Linux >  >> Debian

Cara Menginstal Node.js di Debian 10 dan mengkonfigurasi Nginx sebagai Server Proxy Frontend

Node.js adalah platform JavaScript sumber terbuka dan gratis yang dapat digunakan untuk menyajikan konten sisi server yang dinamis dan responsif. Itu dibangun di atas mesin JavaScript V8 Chrome dan mampu mengeksekusi kode JavaScript di luar browser web. Ini dapat dijalankan di beberapa sistem operasi termasuk, Linux, FreeBSD, Windows, dan macOS. Node.js juga berfungsi di server web lain seperti Apache dan Nginx.

Dalam tutorial ini, kita akan mempelajari cara menginstal dan mengonfigurasi Node.js untuk menangani permintaan backend dan mengonfigurasi Nginx untuk menangani permintaan front-end di Debian 10.

Prasyarat

  • Server yang menjalankan Debian 10.
  • Kata sandi root dikonfigurasi di server Anda.

Memulai

Pertama, disarankan untuk memperbarui sistem Anda ke versi terbaru. Anda dapat melakukannya dengan perintah berikut:

apt-get update -y
apt-get upgrade -y

Setelah server Anda diperbarui, mulai ulang untuk menerapkan perubahan.

Instal Node.js

Secara default, versi terbaru Node.js tidak tersedia di repositori default Debian 10. Jadi, Anda perlu menginstalnya dari skrip.

Pertama, instal curl dengan perintah berikut:

apt-get install curl -y

Selanjutnya, unduh dan instal skrip instalasi Node.js dengan perintah berikut:

curl -sL https://deb.nodesource.com/setup_12.x | bash -

Setelah instalasi selesai, Anda dapat menginstal Node.js dengan perintah berikut:

apt-get install nodejs -y

Setelah instalasi berhasil diselesaikan, Anda dapat memverifikasi versi Node.js dengan perintah berikut:

nodejs --version

Anda akan melihat versi Node.js di output berikut:

v12.16.1

Anda juga dapat memeriksa versi NPM dengan menjalankan perintah berikut:

npm --version

Anda akan melihat versi NPM di  keluaran berikut:

6.13.4

Buat Aplikasi Node.js

Pertama, Anda perlu membuat direktori untuk aplikasi Anda. Anda dapat membuatnya dengan menjalankan perintah berikut:

mkdir nodeapp

Selanjutnya, ubah direktori menjadi nodeapp dan instal express dengan perintah berikut:

cd nodeapp
npm install express

Selanjutnya, buat contoh aplikasi Node.js dengan express menggunakan editor nano:

nano app.js

Tambahkan konten berikut:

var express = require('express');
var app = express();
app.get('/', function(req, res){
   res.send("Nginx as Frontend Server for Node.js!");
});
app.listen(8000, '127.0.0.1');

Simpan dan tutup file setelah Anda selesai.

Selanjutnya, jalankan aplikasi Anda dengan perintah berikut:

node app.js

Selanjutnya, buka terminal lain dan verifikasi aplikasi dengan perintah berikut:

netstat -antup | grep 8000

Anda akan melihat bahwa aplikasi Node.js Anda mendengarkan pada port 8000:

tcp        0      0 127.0.0.1:8000          0.0.0.0:*               LISTEN      26193/node

Anda juga dapat memverifikasi aplikasi menggunakan perintah curl seperti yang ditunjukkan di bawah ini:

curl http://127.0.0.1:8000

Jika semuanya baik-baik saja, Anda akan mendapatkan output berikut:

Nginx as Frontend Server for Node.js!

Instal dan Konfigurasi PM2

PM2 adalah manajer proses untuk mengelola aplikasi Node.js. ANDA dapat dengan mudah memulai, menghentikan, dan mengaktifkan aplikasi Node.js untuk memulai saat boot menggunakan PM2.

Pertama, instal PM2 versi terbaru menggunakan NPM seperti gambar di bawah ini:

npm install pm2 -g

Setelah terinstal, ubah direktori menjadi nodeapp dan aplikasi Anda dengan perintah berikut:

cd nodeapp
pm2 start app.js

Setelah aplikasi dimulai, Anda akan mendapatkan output berikut:

                        -------------

__/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____
 _\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___
  _\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__
   _\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___
    _\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____
     _\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________
      _\/\\\_____________\/\\\_____________\/\\\___/\\\/___________
       _\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_
        _\///______________\///______________\///__\///////////////__


                          Runtime Edition

        PM2 is a Production Process Manager for Node.js applications
                     with a built-in Load Balancer.

                Start and Daemonize any application:
                $ pm2 start app.js

                Load Balance 4 instances of api.js:
                $ pm2 start api.js -i 4

                Monitor in production:
                $ pm2 monitor

                Make pm2 auto-boot at server restart:
                $ pm2 startup

                To go further checkout:
                http://pm2.io/


                        -------------

[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /root/nodeapp/app.js in fork_mode (1 instance)
[PM2] Done.
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? id  ? name   ? namespace   ? version ? mode    ? pid      ? uptime ? ?    ? status    ? cpu      ? mem      ? user     ? watching ?
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 0   ? app    ? default     ? N/A     ? fork    ? 13202    ? 0s     ? 0    ? online    ? 0%       ? 27.2mb   ? root     ? disabled ?
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

Pada output di atas, Anda dapat melihat informasi yang sangat berguna seperti, PID aplikasi, waktu aktif, status, penggunaan CPU dan Memori.

Selanjutnya, jalankan perintah berikut untuk membuat dan mengonfigurasi skrip startup untuk aplikasi Node.js sehingga aplikasi Node.js Anda akan mulai otomatis saat boot.

pm2 startup

Anda akan mendapatkan output berikut:

[PM2] Init System found: systemd
Platform systemd
Template
[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target

[Service]
Type=forking
User=root
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/root/.pm2
PIDFile=/root/.pm2/pm2.pid
Restart=on-failure

ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect
ExecReload=/usr/lib/node_modules/pm2/bin/pm2 reload all
ExecStop=/usr/lib/node_modules/pm2/bin/pm2 kill

[Install]
WantedBy=multi-user.target

Target path
/etc/systemd/system/pm2-root.service
Command list
[ 'systemctl enable pm2-root' ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-root.service
[PM2] Making script booting at startup...
[PM2] [-] Executing: systemctl enable pm2-root...
Created symlink /etc/systemd/system/multi-user.target.wants/pm2-root.service → /etc/systemd/system/pm2-root.service.
[PM2] [v] Command successfully executed.
+---------------------------------------+
[PM2] Freeze a process list on reboot via:
$ pm2 save

[PM2] Remove init script via:
$ pm2 unstartup systemd

Selanjutnya, mulai layanan PM2 dengan perintah berikut:

systemctl start pm2-root

Selanjutnya, verifikasi status layanan PM2 dengan perintah berikut:

systemctl status pm2-root

Anda akan mendapatkan output berikut:

? pm2-root.service - PM2 process manager
   Loaded: loaded (/etc/systemd/system/pm2-root.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-03-26 06:04:28 UTC; 2s ago
     Docs: https://pm2.keymetrics.io/
  Process: 13387 ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect (code=exited, status=0/SUCCESS)
 Main PID: 13191 (PM2 v4.2.3: God)
    Tasks: 0 (limit: 4915)
   CGroup: /system.slice/pm2-root.service
           ? 13191 PM2 v4.2.3: God Daemon (/root/.pm2)

Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2] Restoring processes located in /root/.pm2/dump.pm2.bak
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2][ERROR] Failed to read dump file in /root/.pm2/dump.pm2.bak
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2][ERROR] No processes saved; DUMP file doesn't exist
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ? PM2+ activated | Instance Name: node.myserver.tld-109e | Dash: https://app.pm2.io/#/r/7p66twg
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ????????????????????????????????????????????????????????????????????????????????????????????????
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ? id  ? name   ? namespace   ? version ? mode    ? pid      ? uptime ? ?    ? status    ? cpu   
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ????????????????????????????????????????????????????????????????????????????????????????????????
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ? 0   ? app    ? default     ? N/A     ? fork    ? 13202    ? 8m     ? 0    ? online    ? 0%    
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ????????????????????????????????????????????????????????????????????????????????????????????????
Mar 26 06:04:28 kolab.linuxbuz.com systemd[1]: Started PM2 process manager.

Konfigurasikan Nginx sebagai Proxy Terbalik untuk Node.js

Pada titik ini, aplikasi Node.js Anda sedang berjalan dan mendengarkan di localhost. Selanjutnya, Anda perlu mengonfigurasi Nginx sebagai server proxy front-end untuk aplikasi Node.js sehingga setiap pengguna dapat mengakses aplikasi Anda melalui internet.

Pertama, instal server web Nginx dengan perintah berikut:

apt-get install nginx -y

Setelah terinstal, buat file konfigurasi virtual host Nginx untuk aplikasi Node.js:

nano /etc/nginx/sites-enabled/myapp.conf

Tambahkan konten berikut:

server {
    listen 80;
    server_name node.myserver.tld;
    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
     }
}

Simpan dan tutup file setelah Anda selesai. Kemudian, restart server Nginx untuk menerapkan perubahan:

systemctl restart nginx

Anda dapat memverifikasi status layanan Nginx dengan perintah berikut:

systemctl status nginx

Anda akan melihat output berikut:

? nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-03-25 12:42:49 UTC; 5min ago
     Docs: man:nginx(8)
  Process: 26180 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 26182 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 26183 (nginx)
    Tasks: 3 (limit: 2359)
   Memory: 5.5M
   CGroup: /system.slice/nginx.service
           ??26183 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ??26184 nginx: worker process
           ??26185 nginx: worker process

Mar 25 12:42:49 debian10 systemd[1]: Starting A high performance web server and a reverse proxy server...
Mar 25 12:42:49 debian10 systemd[1]: Started A high performance web server and a reverse proxy server.

Setelah selesai, Anda dapat melanjutkan ke langkah berikutnya.

Mengakses Aplikasi Node.js Anda

Pada titik ini, Nginx dikonfigurasi untuk melayani aplikasi Node.js Anda.

Sekarang, buka browser web Anda dan ketik URL http://node.myserver.tld. Anda akan melihat aplikasi Node.js Anda di layar berikut:

Kesimpulan

Pada artikel di atas, Anda mempelajari cara mengatur aplikasi Node.js di Debian 10. Anda juga mempelajari cara menjalankan aplikasi Node.js sebagai daemon dan mengkonfigurasi Nginx sebagai proxy terbalik untuk melayani aplikasi. Saya harap Anda sekarang dapat dengan mudah meng-host aplikasi Node.js Anda di lingkungan produksi.


Debian
  1. Cara Menginstal dan Mengkonfigurasi Server VNC di Debian 10

  2. Cara menginstal dan mengkonfigurasi buruh pelabuhan di Debian 11

  3. Cara menginstal dan Mengonfigurasi penyeimbang beban HAProxy di Debian 11

  1. Cara menginstal dan mengkonfigurasi Server OpenVPN di Debian 10

  2. Cara Menginstal Node.js dan npm di Debian 11

  3. Bagaimana menginstal dan mengkonfigurasi Proxy Squid di Debian 11

  1. Cara Menginstal dan Mengkonfigurasi VNC di Debian 9

  2. Cara Menginstal dan Mengonfigurasi Redis di Debian 9

  3. Cara Menginstal dan Mengkonfigurasi Mariadb 10 di Debian 11