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