Развертывание Node.js приложения на сервере — важный этап в разработке любого веб-приложения. После того как вы завершили работу над проектом локально, приходит время сделать его доступным для пользователей в интернете. Но работа в продакшене требует не только запуска приложения, но и обеспечения его стабильности, безопасности и высокой доступности.
В этой статье мы разберем весь процесс развертывания Node.js приложения на удаленном сервере: от подготовки сервера и переноса файлов до настройки автозапуска с помощью PM2 и настройки обратного прокси через Nginx. Мы также уделим внимание безопасности, настроив SSL-сертификат, чтобы ваше приложение соответствовало современным стандартам защиты данных.
Часть 1: Подготовка сервера к деплою
Прежде чем приступить к делу, убедитесь, что у вас есть:
- Доступ к серверу с Ubuntu (будь то облачный сервер или локальная виртуальная машина).
- Node.js и npm на вашей машине.
Если вы только рассматриваете платформу для размещения, то попробуйте Timeweb Cloud.
Шаг 1: Обновите сервер
Первое, что нужно сделать на любом сервере, – это обновить систему. Убедитесь, что вы подключились к серверу по SSH:
ssh user@your-server-ip
Введите пароль или используйте ключ SSH, если настроили его ранее. Далее обновляем пакеты:
sudo apt update && sudo apt upgrade -y
Эта команда загрузит обновления списка пакетов и установит последние версии программного обеспечения. Это основа безопасности и стабильности вашего сервера.
Шаг 2: Установите Node.js и npm
Теперь установим Node.js. Рекомендуется использовать nvm (Node Version Manager), так как он позволяет управлять версиями Node.js:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
После установки перезапустите терминал или загрузите nvm:
source ~/.bashrc
Теперь установите последнюю версию Node.js:
nvm install node
Эта команда установит последнюю стабильную версию Node.js вместе с npm. Чтобы убедиться, что все работает, выполните:
node -v
npm -v
Вы увидите версии Node.js и npm.
Шаг 3: Установите процесс-менеджер (PM2)
Для управления вашим приложением в продакшене используем PM2. Это инструмент, который позволяет запускать приложение в фоновом режиме, перезапускать его в случае сбоя и мониторить его работу.
Установите PM2 через npm:
npm install -g pm2
Чтобы убедиться, что PM2 установлен, проверьте его версию:
pm2 -v
Шаг 4: Настройка брандмауэра (UFW)
Теперь защитим сервер. Убедитесь, что ваш брандмауэр настроен правильно. Если вы планируете работать через HTTP/HTTPS, откройте соответствующие порты:
sudo ufw allow OpenSSH
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
Команда ufw enable активирует брандмауэр, а порты останутся открытыми для SSH и веб-трафика.
На этом подготовительный этап завершен. Ваш сервер готов принять Node.js приложение. В следующей части мы займемся переносом проекта и его запуском.
Часть 2: Перенос проекта на сервер и его настройка
Теперь, когда сервер готов, пора переходить к следующему этапу – переносить ваше Node.js приложение и настраивать его для работы в продакшене. Этот процесс может показаться сложным, но с четким планом все получится быстро и без проблем. Итак, давайте приступим!
Шаг 1: Копирование проекта на сервер
Если у вас уже есть локальная версия вашего приложения, вам нужно будет перенести его на сервер. Есть несколько способов это сделать, но наиболее популярный — использовать Git для клонирования репозитория.
Установите Git, если он еще не установлен:
sudo apt install git
Перейдите в папку, в которой хотите разместить проект:
cd /var/www
Клонируйте репозиторий с помощью Git:
git clone https://github.com/your-username/your-repo.git
Замените your-username и your-repo на название вашего репозитория.
Если проект находится на локальной машине, вы можете воспользоваться scp или rsync для передачи файлов, например:
scp -r /path/to/local/project user@your-server-ip:/var/www/your-project
Шаг 2: Установка зависимостей
После того как проект будет скопирован на сервер, необходимо установить все зависимости, указанные в файле package.json. Для этого перейдите в директорию проекта:
cd /var/www/your-project
Затем установите зависимости с помощью npm:
npm install
Этот процесс может занять некоторое время в зависимости от количества зависимостей вашего приложения.
Шаг 3: Настройка переменных окружения
Если ваше приложение использует переменные окружения (например, для подключения к базе данных или использования секретных ключей), вам нужно будет создать файл .env или настроить их напрямую на сервере. Обычно такие файлы содержат конфиденциальную информацию, поэтому обязательно следите за их безопасностью.
Чтобы создать файл .env, выполните:
nano .env
Пример содержания файла .env:
DB_HOST=localhost
DB_USER=myuser
DB_PASS=mypassword
SECRET_KEY=mysecretkey
Шаг 4: Тестирование приложения
Прежде чем переходить к запуску в продакшене, стоит убедиться, что ваше приложение работает локально на сервере. Запустите его с помощью команды:
npm start
Если ваше приложение использует другой скрипт для запуска, например server.js, можно запустить его так:
node server.js
Затем откройте браузер и зайдите по IP-адресу вашего сервера:
http://your-server-ip
Если приложение работает, вы увидите его на экране. Если возникли ошибки, обратитесь к логам или настройкам. Когда все будет настроено, мы перейдем к следующему шагу.
В следующей части мы настроим запуск приложения в фоновом режиме с использованием PM2, чтобы оно продолжало работать даже после перезагрузки сервера и обеспечивало надежную работу в продакшене.
Часть 3: Запуск приложения в продакшене с помощью PM2
Теперь, когда ваше приложение успешно установлено и протестировано на сервере, пришло время настроить его для работы в продакшене. Мы будем использовать PM2 — процесс-менеджер, который обеспечит надежную работу вашего приложения в фоновом режиме, его перезапуск в случае сбоя и автоматическое восстановление после перезагрузки сервера. Давайте разберем, как это сделать.
Шаг 1: Запуск приложения с помощью PM2
Для начала запустим ваше приложение с помощью PM2. Перейдите в директорию вашего проекта, если вы еще не там:
cd /var/www/your-project
Чтобы запустить приложение, выполните команду:
pm2 start server.js --name "my-app"
Замените server.js на имя вашего основного файла (например, app.js или index.js). Опция —name задает имя вашему процессу в PM2, чтобы проще было управлять им.
PM2 будет следить за приложением и перезапускать его, если оно выйдет из строя. Чтобы убедиться, что приложение работает, выполните команду:
pm2 list
Она покажет список всех запущенных процессов. Вы должны увидеть ваше приложение в списке.
Шаг 2: Настройка автозапуска при перезагрузке сервера
Одним из самых полезных свойств PM2 является возможность настроить автозапуск приложения после перезагрузки сервера. Для этого используем команду:
pm2 startup
Эта команда сгенерирует команду для вашего системного менеджера (например, systemd), которую нужно будет выполнить. Просто скопируйте ее и вставьте в терминал. После этого сохраните текущие процессы в автозагрузку:
pm2 save
Теперь ваше приложение будет автоматически запускаться при перезагрузке сервера.
Шаг 3: Мониторинг приложения
PM2 предоставляет удобные инструменты для мониторинга работы приложения. Чтобы увидеть логи в реальном времени, выполните команду:
pm2 logs
Это откроет поток логов, где вы можете отслеживать ошибки или другое поведение приложения. Если хотите посмотреть логи для конкретного приложения, можно указать его имя:
pm2 logs "my-app"
PM2 также позволяет отслеживать метрики и производительность вашего приложения. Для этого используйте команду:
pm2 monit
Она откроет панель мониторинга, где вы увидите различные статистики, такие как загрузка CPU, память и другие параметры.
Шаг 4: Настройка обратного прокси с помощью Nginx
На этом этапе приложение работает, но оно доступно только по порту сервера (например, http://your-server-ip:3000). Чтобы сделать его доступным через стандартный порт 80 (HTTP), нужно настроить Nginx как обратный прокси. Это позволяет вам использовать доменное имя и обеспечивать доступность приложения через стандартные порты.
Установите Nginx:
sudo apt install nginx
Создайте конфигурационный файл для вашего приложения:
sudo nano /etc/nginx/sites-available/my-app
Вставьте следующую конфигурацию:
server {
listen 80;
server_name your-domain.com; # Замените на ваше доменное имя
location / {
proxy_pass http://localhost:3000; # Укажите порт, на котором работает ваше приложение
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;
}
}
Создайте символическую ссылку в sites-enabled, чтобы активировать конфигурацию:
sudo ln -s /etc/nginx/sites-available/my-app /etc/nginx/sites-enabled/
Проверьте конфигурацию Nginx:
sudo nginx -t
Перезагрузите Nginx:
sudo systemctl reload nginx
Теперь ваше приложение будет доступно через HTTP по адресу вашего домена, и Nginx будет проксировать запросы на ваш Node.js сервер.
Шаг 5: Обеспечение безопасности с помощью SSL
Для дополнительной безопасности рекомендуется настроить SSL-сертификат. Самый простой способ — использовать Let’s Encrypt. Это бесплатный и автоматический сервис для получения SSL-сертификатов.
Установите Certbot:
sudo apt install certbot python3-certbot-nginx
Получите сертификат:
sudo certbot --nginx -d your-domain.com
Certbot автоматически настроит SSL для вашего домена и обновит конфигурацию Nginx.
Чтобы удостовериться, что сертификаты обновляются автоматически, выполните:
sudo systemctl enable certbot.timer
Шаг 6: Завершающие штрихи
Поздравляю! Теперь ваше приложение настроено и работает на сервере с использованием Node.js, PM2, Nginx и SSL. Чтобы удостовериться, что все работает, откройте браузер и зайдите по своему домену. Вы должны увидеть ваше приложение, работающее по защищенному HTTPS-соединению.
В этой статье мы прошли путь от установки Node.js на сервер до полноценного развертывания приложения с высокой доступностью и безопасностью. В случае необходимости не забывайте проверять логи и следить за производительностью через PM2. Удачи в работе с вашими Node.js проектами!
Комментарии
0