Домой / Руководители / Node.js

Скачать приложение Node.js За 15 минут

Нет Docker, нет PaaS, нет магии. Node.js plus systemd и Nginx - это стек, который выживает при перезагрузке, авариях и трафике, и вы можете прочитать все это.

1.Установка Node.js

apt update && apt install -y curl
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt install -y nodejs
node --version

2. Создать пользователя приложения

Никогда не запускайте веб-приложение как root. Отдельный пользователь ограничивает ущерб, если приложение когда-либо скомпрометировано.

adduser --system --group --home /opt/myapp app
mkdir -p /opt/myapp
chown app:app /opt/myapp

3. Загрузить приложение

С вашего ноутбука, с rsync над SSH — сервер Git не требуется:

rsync -avz --exclude node_modules ./app/ root@YOUR_SERVER_IP:/opt/myapp/

На сервере установите зависимости и проверьте один раз на переднем плане:

cd /opt/myapp
sudo -u app npm ci --omit=dev
sudo -u app PORT=3000 node server.js

Приложение должно слушать 127.0.0.1:3000 Не в публичном интерфейсе. Nginx столкнется с интернетом

4.Система сохраняет его живым

cat > /etc/systemd/system/myapp.service <<'EOF'
[Unit]
Description=My Node.js app
After=network-online.target
[Service]
User=app
WorkingDirectory=/opt/myapp
Environment=NODE_ENV=production
Environment=PORT=3000
ExecStart=/usr/bin/node server.js
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now myapp
systemctl status myapp

Авария? Он перезапускается через три секунды. Перезагрузка? Начинается автоматически. Развернуть новую версию? rsyncТогда systemctl restart myapp.

5 Нгинкс спереди

apt install -y nginx
cat > /etc/nginx/sites-available/myapp <<'EOF'
server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
EOF
ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/myapp
nginx -t && systemctl reload nginx

Затем направьте запись вашего домена A на сервер и добавьте HTTPS - полный проход находится в сервере. Руководство Nginx и HTTPS.

6.Проверь журналы

journalctl -u myapp -f --no-pager
tail -f /var/log/nginx/error.log

Консольный вывод из вашего приложения попадает в журнал автоматически — никаких файлов журнала для настройки.

Быстрые ответы

Нужен ли мне PM2?

Не совсем. Система делает все, что делает PM2 для одного сервера - автоперезагрузка, запуск загрузки, журналы - без дополнительной зависимости. PM2 имеет смысл, в основном, если вы запускаете несколько процессов узлов с кластеризацией.

Сколько ОЗУ нужно приложению Node?

Типичное приложение Express не работает около 80-150 МБ. Сервер на 2 ГБ запускает его удобно рядом с Nginx и PostgreSQL; шаги сборки, такие как webpack, являются частью, требующей памяти, поэтому встраивайте CI или на своем ноутбуке.

Как развернуть новую версию без простоя?

Перезагрузите новый код, затем перезагрузите — разрыв меньше секунды, потому что система перезапускает процесс немедленно. Для нулевого простоя вы запускаете два порта и переключаете Nginx вверх по течению, но большинству проектов это не нужно.

Этот стек удобно впишется в Buran-1 в €6.5/мес.

связанный