Инструкция по настройке и запуску сервера на Ubuntu для приложений, написанных на Node.js. Инструкция также описывает настройку Nginx и Let's Encrypt.
{REPO_URL} – URL нужного репозитория из GitHub.
{DIRNAME} – директория, в которой будет располагаться проект.
{REPO_NAME} – директория, созданная внутри {DIRNAME}. Называется так же, как и репозиторий.
{APP_NAME} – название приложения.
{DOMAIN} – домен приложения.
{WWW.DOMAIN} – домен приложения с www.
{PORT_NUMBER} – порт, который прослушивается приложением в файле index.js или index.ts.
sudo apt update– загрузить обновления пакетов Linux.sudo apt upgrade– установить загруженные обновления Linux.curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash– установить nvm manager.source ~/.bashrc– вернуться к чтению bash.nvm– проверить установку.nvm install node– установка Node.js.mkdir {DIRNAME}– создать папку, в которой будет храниться проект и его файлы/cd projects– перейти в папку проекта.git clone {REPO_URL}– клонирование репозитория.cd {REPO_NAME}– перейти в папку с репозиторием.npm install– установка зависимостей.npm start– запуск приложения и проверка.ctrl+c– нажать дважды, чтобы остановить приложение.npm install pm2 -g– глобальная установкаpm2(отвечает за автоматизацию и стабильность работы приложения).pm2 start index.js --name {APP_NAME}– программа для запуска нашего приложения.pm2 startup– программа для запуска нашего приложения в случае перезагрузки линукса.pm2 save– программа для сохранения конфигурации pm2.
Включение файрвола
sudo ufw status– проверить наличие файрвола.sudo ufw enable– включить файрвол, если он выключен.sudo ufw app list– список доступных сервисов для работы с файрволом.sudo ufw allow ssh– включение ssh.sudo ufw allow http– включение http.sudo ufw allow https– включение https.sudo ufw reload– перезапуск файрвола для обновления настроек.
Настройка Nginx
sudo apt install nginx– установка nginx.cd /etc/nginx/sites-available/– список доступных сайтов.ls– должно быть «default».cat default– просмотреть содержимое файла «default» (важно, чтобы там не было пусто).cd– вернуться в корневую директорию.nano /etc/nginx/sites-available/{APP_NAME}– создание конфигурации в отдельном файле с помощью редактора Nano. В конфигурации можно указать любое кол-во доменов.
Конфигурация:
server {
listen 80;
server_name {DOMAIN} {WWW.DOMAIN};
location / {
proxy_pass http://localhost:{PORT_NUMBER};
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;
}
}
Продолжение настройки Nginx
nginx -t– должно показать две строки. В конце первой: ok, в конце второй: successful.ln -s /etc/nginx/sites-available/{APP_NAME} /etc/nginx/sites-enabled/{APP_NAME}– скопировать созданный сервер в папку sites-enabled с именем{APP_NAME}.nginx -t– должно показать две строки. В конце первой: ok, в конце второй: successful.sudo service nginx restart– перезапуск Nginx.sudo service nginx status– в строке Active должно быть написано зелёным цветом active (running).
Установка SSL
curl -o- https://raw.githubusercontent.com/vinyll/certbot-install/master/install.sh | bash– установка certbot от Let’s Encrypt.certbot --version– проверить версию certbot (чтобы убедиться, что он действительно установился).sudo certbot --nginx -d {DOMAIN} -d {WWW.DOMAIN}– добавляем столько доменов, сколько нужно.
———Конец———
Полезные команды
pm2 restart {NAME}– перезапуск приложения после обновления (чтобы сбросить кэш).git stash– «сохранение» текущей версии проекта локально перед командойgit pull.git pull {REPO-URL}– получить обновление приложения из GitHub.sudo systemd-resolve --flush-caches– очистить локальный DNS кэш