Установка Express.js приложение на VPS с Nginx, PM2 и Ubuntu 18.04

603

0. Подготовка

Нам понадобится:

  • VPS с Ubuntu 18.04 и root доступом
  • Putty или другой SSH клиент
  • Шаблон простого Node.js + Express.js сервера (Я буду использовать этот)
  • Необязательно: домен с DNS записями с привязкой к вашему VPS

1. Создаем пользователя

Мы хотим создать нового пользователя с правами “sudo”, потому что это плохая практика использования root — пользователя в рабочей среде.

Я для примера создам пользователя с именем lukas.

# creating new user
adduser lukas# providing superuser rightsusermod -aG sudo lukas

Выйдем из терминала и залогинимся снова под новым пользователем. Так же отличная идея обновить систему

sudo apt-get update
sudo apt-get upgrade

2. Node.js

Есть много путей для установки node.js, но я предпочитаю  NVM (Node.js Version Manager). Мы установим node.js 10ой версии.

Примечание, на момент выхода перевода актуальная версия node.js 14 lts.

Мы загрузим установочный скрипт с curl (или альтернативно можно использовать wget). Так создастся папка .nvm в каталоге вашего пользователя. Внутри этой папки будут храниться ваши Node.js установки.

# this command will download install script with curl
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash# or use wget
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

Выйдем и залогинимся обратной. После этого надо убедится, что nvm стал доступен.

# check if installed
nvm --version
==> 0.33.11# list available Node.js versions
nvm ls-remote# choose one version and install it
# example of v10.4.1 installation
nvm install v10.4.1# check if installed properly
node --version
==> v10.4.1

NVM-это мощный инструмент, который позволяет устанавливать несколько версий node.js и переключаться между ними по своему усмотрению. Вы можете использовать команду “help” или обратится к документации  github page.

# check more nvm usage
nvm --help

Создаем простой сервер с Express.js

# go to your user's directory
cd /home/lukas# create folder simpleServer
mkdir simpleServer# go inside
cd simpleServer# create package.json
npm init -y# install Express.js
npm install express

Создайте файл с этим текстом внутри и сохраните его. Вы можете использовать nano или любой другой редактор.

# open nano
nano server.js# to save, press Ctrl + X ==> Y ==> Enter
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send("Hello World!");
});

const port = 3000;
const server = app.listen(port, () => {
  console.log(`Listening on http://localhost:${port}`);
});
# start server
node server.js
==> Listening on http://localhost:3000

Если вы зайдете на ваш сайт с портом 3000 (например http://dzen-code.ru:3000) , вы должны увидеть “Hello World!” в окне браузера.

3. PM2

Если вы сейчас закроете свой SSH-клиент, ваш веб-сайт перестанет работать. Нам понадобиться какой-то инструмент, который будет поддерживать наш сервер “живым”. Скажите привет PM2!

# globally install PM2
npm install pm2 -g# check if installed properly
pm2 -V
==> 2.10.4

PM2 будет поддерживать наш сервер в фоновом режиме, и если он упадет, PM2 автоматически перезапустит его.

# start our server with PM2
pm2 start server.js# check <YourVPSIpAddress>:3000 if your server is running

Сделаем запуск PM2 со стартом сервера

Если мы сейчас перезагрузим VPS, наш сервер не запустится. Сначала мы должны включить его. Документация тут.

pm2 startup
# this will generate another command that you need to run# We also need to save what processes
# should get started with pm2
pm2 save# reboot VPS and check if your website is up
sudo reboot

Как и NVM, PM2-это очень мощный инструмент, который может сделать гораздо больше, чем это. Можете ознакомится  с официальной документацие и “help” командой.

# get help!
pm2 help

4. Nginx

Установим Nginx:

sudo apt-get install nginx# check if installed
sudo nginx -v
==> nginx version: nginx/1.14.0 (Ubuntu)

Создадим конфигурационный файл нашего сервера

cd /etc/nginx/sites-availablesudo nano simpleServer

Внутрь файла поместим данный кусок кода

server {
listen 80;
server_name <YourVPSIpAddress>; location / {
proxy_pass http://localhost:3000/;
}
}

Если у вас установлен домен, то пропишите его таким образом:

# ...
server_name www.example.com example.com;
# ...

Более подробная информация Nginx documentation.

Финальные шаги

# check if your configuration is ok
sudo nginx -t# enable your configuration
sudo ln -s /etc/nginx/sites-available/simpleServer /etc/nginx/sites-enabled# restart nginx
sudo systemctl restart nginx

Ваш сервер должен быть доступен по вашему домену или ip <YourVPSIpAddress>.

Перевод https://medium.com/@panzelva/deploying-express-js-website-to-vps-with-nginx-pm2-and-ubuntu-18-04-8c5d32593211

+1