Pengantar
Tutorial ini bertujuan untuk membantu Anda menyiapkan server Ubuntu untuk menjalankan aplikasi Node.js, termasuk aplikasi berbasis Express, Geddy, atau Sails. Petunjuk ini akan membantu Anda menghindari beberapa kesalahan keamanan, serta memberikan beberapa manfaat yang mengejutkan seperti:
- Anda tidak akan menjalankan aplikasi Anda sebagai root; oleh karena itu, aplikasi Anda akan lebih aman.
- Anda akan menggunakan port 80 untuk menjalankan aplikasi Anda, yang biasanya hanya dapat diakses oleh pengguna root. (Anda akan dapat menjalankan aplikasi Anda menggunakan URL khusus seperti http://mysite.com - tetapi Anda tidak perlu menentukan porta.)
- Aplikasi Anda akan dimulai ulang jika macet, dan akan menyimpan log pengecualian yang tidak tertangani.
- Aplikasi Anda akan dimulai ulang saat server dimulai - yaitu, akan dijalankan sebagai layanan.
Instruksi ini mengasumsikan bahwa pembaca hanya memiliki pengetahuan dasar tentang Linux. Anda dapat melewatkan informasi yang tidak Anda perlukan, tetapi mengikuti langkah-langkah dengan cermat mungkin memberikan beberapa keuntungan.
Buat Akun Aman untuk Menjalankan Kode Anda
Saat Anda pertama kali mengatur tetesan DigitalOcean, Anda menerima instruksi untuk masuk menggunakan akun root. Instruksi terlihat seperti ini:
Untuk masuk ke droplet Anda, Anda perlu membuka jendela terminal dan menyalin dan menempelkan string berikut:
ssh [email protected]
Harap diperhatikan, '192.241.xxx.xxx' akan berbeda untuk Anda. Cukup ikuti instruksi yang Anda terima dari Provider ketika server virtual Anda diatur dan masuk menggunakan ssh.
Seperti yang dipahami sebagian besar dari kita, jika Anda menjalankan kode menggunakan akun root, dan jika pihak yang bermusuhan membobol kode, pihak tersebut dapat memperoleh kendali penuh atas VPS Anda.
Untuk menghindarinya, mari buat akun yang aman yang masih dapat melakukan operasi root jika kami memberikan kata sandi yang sesuai. Untuk keperluan tutorial ini, sebut saja safe user kami "safeuser" - Anda dapat menamainya sesuka Anda. Untuk saat ini, log on sebagai pengguna root dan ikuti langkah-langkah berikut:
Untuk masuk ke droplet Anda, Anda perlu membuka jendela terminal dan menyalin dan menempelkan string berikut:
Buat pengguna dengan folder di /home/safeuser/:
useradd -s /bin/bash -m -d /home/safeuser -c "safe user" safeuser
Buat kata sandi untuk safeuser
- Anda akan diminta untuk mengetiknya dua kali setelah Anda memasukkan perintah berikut:
passwd safeuser
Berikan izin kepada pengguna yang aman untuk menggunakan perintah level root:
usermod -aG sudo username
Masuk sebagai Pengguna Aman
Keluar dari sesi root server Anda dengan menekan ctrl-D.
Harap dicatat bahwa perintah untuk masuk sebagai pengguna aman adalah perintah yang sama yang Anda gunakan sebelumnya, tetapi nama pengguna telah berubah. Setelah Anda masuk sebagai pengguna yang aman, setiap kali Anda ingin menjalankan perintah yang memiliki hak akses root, Anda harus melanjutkan perintah dengan kata sudo . Dari baris perintah di komputer Anda sendiri, masuk menggunakan perintah yang muncul di bawah.
ssh [email protected]
Instal GIT
Setelah Anda masuk, instal GIT (kita akan menggunakan GIT untuk menginstal Node.js. Jika, karena alasan apa pun, Anda tidak terbiasa dengan GIT, ini adalah alat yang indah yang akan menjadi bagian besar dari hidup Anda. Bacalah buku GIT jika Anda ingin tahu lebih banyak. Menginstalnya di Ubuntu mudah:
sudo apt-get install git
Kata sudo menunjukkan bahwa Anda ingin menjalankan perintah ini sebagai root. Anda akan diminta memasukkan kata sandi - misalnya kata sandi pengguna yang aman. Saat Anda memberikan kata sandi, perintah akan dijalankan.
Instal Node.JS Terbaru
Harap dicatat bahwa v0.10.24 adalah versi Node terbaru saat tulisan ini dibuat. Jika ada versi yang lebih baru, gunakan nomor versi itu sebagai gantinya.
Ketik perintah berikut, satu baris pada satu waktu, dan saksikan keajaiban saat droplet Anda mengunduh, mengkompilasi, dan menginstal Node.js:
sudo apt-get install build-essential
sudo apt-get install curl openssl libssl-dev
git clone https://github.com/joyent/node.git
cd node
git checkout v0.10.24
./configure
make
sudo make install
Saat Anda mengetik sudo make, banyak hal yang akan terjadi. Sabar.
Saat proses make install selesai, pastikan semuanya berjalan dengan baik dengan mengetik:
node -v
Jika semuanya berjalan dengan baik, Anda akan melihat: v0.10.24.
Berikan Izin Pengguna yang Aman Untuk Menggunakan Port 80
Ingat, kami TIDAK ingin menjalankan aplikasi Anda sebagai pengguna root, tetapi ada hambatan: pengguna aman Anda tidak memiliki izin untuk menggunakan port HTTP default (80) . Sasaran Anda adalah dapat memublikasikan situs web yang dapat digunakan pengunjung dengan menavigasi ke URL yang mudah digunakan seperti http://mysite.com.
Sayangnya, kecuali Anda masuk sebagai root, biasanya Anda harus menggunakan URL seperti http://mysite.com:3000 - perhatikan nomor port.
Banyak orang terjebak di sini, tetapi solusinya mudah. Ada beberapa pilihan tapi ini yang saya suka. Ketik perintah berikut:
sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep /usr/local/bin/node
Sekarang, ketika Anda memberi tahu aplikasi Node bahwa Anda ingin menjalankannya pada port 80, itu tidak akan mengeluh.
Gunakan NPM Untuk Menginstal Paket Yang Disebut PM2.
NPM adalah manajer paket yang akan Anda gunakan untuk menginstal kerangka kerja dan pustaka untuk digunakan dengan aplikasi Node.js Anda. NPM diinstal dengan Node.js. PM2 adalah alat kecil yang manis yang akan memecahkan dua masalah untuk Anda:
-
Ini akan membuat situs Anda tetap aktif dengan memulai ulang aplikasi jika macet. Crash ini TIDAK boleh terjadi, tetapi perlu diketahui bahwa PM2 mendukung Anda. (Beberapa orang mungkin mengetahui Forever.js, alat lain yang digunakan untuk menjaga situs berbasis node berjalan - saya pikir Anda akan menemukan bahwa PM2 memiliki banyak hal yang ditawarkan.)
-
Ini akan membantu Anda dengan memulai ulang aplikasi node Anda sebagai layanan setiap kali Anda memulai ulang server. Beberapa pengguna mengetahui cara lain untuk melakukan ini, tetapi pm2 membuatnya lebih mudah, dan memiliki beberapa fleksibilitas tambahan.
Instal PM2 dengan mengetikkan thr berikut pada baris perintah:
sudo npm install pm2 -g
Buat Aplikasi Simpul Sederhana
Di sinilah Anda dapat menguji lingkungan Anda untuk memastikan semuanya berfungsi sebagaimana mestinya. Dalam contoh ini, saya akan menggunakan alamat IP, tetapi tujuan Anda adalah menggunakan nama domain.
Pertama, buat aplikasi node sederhana hanya untuk pengujian. Pada jenis baris perintah:
nano app.js
Kemudian masukkan baris kode berikut ke dalam editor nano:
var http = require('http');
var server = http.createServer(function (request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.end("Hello World\n");
});
server.listen(80);
console.log("Server running at http://127.0.0.1:80/");
Tekan ctrl-X untuk keluar - ketika nano bertanya apakah Anda ingin menyimpan, jawab ya.
Sekarang Anda memiliki aplikasi berbasis node bernama app.js yang dapat Anda gunakan untuk menguji lingkungan Anda.
Anda dapat menjalankan app.js di baris perintah dengan mengetik: node app.js
Lakukan itu, dan Anda akan dapat melihat teks hello world Anda dengan menggunakan browser dan mengetik alamat IP Anda sebagai URL. Anda dapat menghentikan eksekusi dengan menekan crtl-C. Ini BUKAN cara kami ingin menjalankan aplikasi kami. Ada cara yang JAUH lebih baik. Kami akan menggunakan PM2 untuk menjalankannya daripada menggunakan Node secara langsung.
Jalankan aplikasi Anda menggunakan PM2, dan pastikan bahwa aplikasi node.js
Anda dimulai secara otomatis saat server Anda dimulai ulang
Ada beberapa keuntungan besar bagi Anda jika Anda menjalankan aplikasi menggunakan pm2. Alih-alih menjalankan aplikasi Anda seperti di atas, jalankan menggunakan perintah berikut:
pm2 start app.js
Anda harus melihat laporan ini:
Apa keuntungan menjalankan aplikasi Anda dengan cara ini?
-
PM2 akan secara otomatis memulai ulang aplikasi Anda jika macet.
-
PM2 akan menyimpan log pengecualian Anda yang tidak tertangani - dalam hal ini, dalam file di /home/safeuser/.pm2/logs/app-err.log.
-
Dengan satu perintah, PM2 dapat memastikan bahwa aplikasi apa pun yang dikelolanya dimulai ulang saat server melakukan boot ulang. Pada dasarnya, aplikasi node Anda akan dimulai sebagai layanan.
Jalankan perintah ini untuk menjalankan aplikasi Anda sebagai layanan dengan mengetik berikut ini:
sudo env PATH=$PATH:/usr/local/bin pm2 startup -u safeuser
Harap dicatat, Anda mungkin tidak menggunakan safeuser sebagai nama pengguna - gunakan nama yang sesuai dengan pengaturan Anda. Anda harus melihat laporan berikut:
Adding system startup for /etc/init.d/pm2-init.sh ...
/etc/rc0.d/K20pm2-init.sh -> ../init.d/pm2-init.sh
/etc/rc1.d/K20pm2-init.sh -> ../init.d/pm2-init.sh
/etc/rc6.d/K20pm2-init.sh -> ../init.d/pm2-init.sh
/etc/rc2.d/S20pm2-init.sh -> ../init.d/pm2-init.sh
/etc/rc3.d/S20pm2-init.sh -> ../init.d/pm2-init.sh
/etc/rc4.d/S20pm2-init.sh -> ../init.d/pm2-init.sh
/etc/rc5.d/S20pm2-init.sh -> ../init.d/pm2-init.sh
Sekarang tujuan kami telah tercapai!
- Anda tidak menjalankan sebagai root; oleh karena itu, aplikasi Anda lebih aman.
- Anda menggunakan port 80, yang biasanya hanya dapat digunakan oleh pengguna root.
- Aplikasi Anda akan dimulai ulang jika macet, dan akan menyimpan log pada pengecualian yang tidak tertangani.
- Aplikasi Anda akan dimulai ulang saat server dimulai.
Selamat bersenang-senang! Ini adalah pengaturan yang cukup kuat untuk memulai.
- Setelah berpikir: * Anda mungkin melihat folder file bernama node di direktori safeuser. Itu digunakan selama instalasi, tetapi Anda tidak lagi membutuhkannya. Anda dapat menghapusnya dengan mengetik berikut ini:
rm -rf /home/safuser/node
Ada banyak hal yang bisa dipelajari tentang node, tapi tutorial ini akan menempatkan Anda di jalur yang benar. Untuk mempelajari lebih lanjut tentang pm2, kunjungi repo pm2
Klarifikasi Penting : Ada skrip startup yang memulai aplikasi Node Anda, tetapi Anda akan menghindari banyak kebingungan jika Anda memahami cara kerjanya. Skripnya bernama 'pm2-init.sh.' Itu tinggal di direktori 'etc / init.d /', tetapi TIDAK memulai app.js. Sebagai gantinya, ia memulai program yang berjalan di bawah PM2 saat terakhir kali server dimatikan.
Ini penting. Jika aplikasi node Anda tidak muncul dalam daftar saat Anda mengetik daftar pm2, aplikasi Anda tidak akan dimulai ulang saat server dimulai ulang. Ikuti instruksi yang tepat untuk memulai aplikasi Anda menggunakan pm2 untuk memastikan bahwa mereka akan restart:pm2 start app.js