Поиск по сайту:

Как разместить несколько приложений Node.js на одном VPS с помощью nginx, forever и crontab


Требования для выполнения этого руководства

Вам необходимо установить nginx и Node.js, и на DigitalOcean уже есть хорошо написанные руководства по этим темам:

Как установить Node.js.

Кроме того, у вас уже должен быть домен, чтобы сопоставить работающую службу Node.js с доменным именем вместо перехода по адресу http://[your-vps-ip]:[port].

Запуск вашего приложения Node.js с Forever

Forever — это простой инструмент командной строки для обеспечения непрерывной работы приложения Node.js (т. е. вечно). Это означает, что если ваше приложение обнаружит ошибку и выйдет из строя, навсегда позаботится об этой проблеме и перезапустит ее для вас.

Просто установите навсегда глобально, и навсегда можно использовать за считанные секунды:

npm install forever -g

Чтобы запустить скрипт с навсегда, вам необходимо выполнить следующие шаги:

Перейдите к своему приложению Node.js:

cd /path/to/your/node/app/

и запустите сервер/основной файл JavaScript навсегда:

forever start --spinSleepTime 10000 main.js

Где --spinSleepTime 10000 относится к минимальному времени безотказной работы (в миллисекундах) между запусками сбойного скрипта. Эта команда будет работать почти во всех случаях.

Теперь укажите в браузере http://[your-vps-ip]:[port] и посмотрите, как работает ваше приложение.

Сопоставьте домен с вашим приложением Node.js

Теперь вам нужно добавить запись DNS в панель управления DigitalOcean, чтобы сопоставить ваше доменное имя с вашей каплей (VPS).

Следующие шаги:

    Примечание. Изменения вступят в силу не сразу, так как для распространения DNS может потребоваться до 24 часов.

    Сопоставьте домен со службой, работающей на вашем VPS, с помощью nginx

    В этом разделе вы узнаете, как настроить обратный прокси-сервер с помощью nginx за несколько простых шагов.

    Прежде всего, создайте файл для нужного домена в /etc/nginx/conf.d/ с помощью вашего любимого редактора (я буду использовать nano). Файл должен быть назван после имени домена из соображений согласованности.

    nano /etc/nginx/conf.d/example.com.conf
    

    Примечание: вы можете назвать файл как хотите, важной частью является расширение .conf.

    В этом файле вам нужно скопировать следующий фрагмент кода и вставить его в файл, созданный ранее:

    server {
        listen 80;
    
        server_name your-domain.com;
    
        location / {
            proxy_pass http://localhost:{YOUR_PORT};
            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;
        }
    }
    

    Теперь просто замените your-domain.com на домен, который вы зарегистрировали, и YOUR_PORT на порт, который ваше приложение Node.js прослушивает на вашем VPS.

    Примечание. Чтобы иметь возможность ссылаться на несколько доменов для одного приложения Node.js (например, example.com), вам необходимо добавить следующий код в файл /etc/nginx/nginx.conf в http раздел:

    server_names_hash_bucket_size 64;
    

    Если изменения DNS распространяются, вы можете указать свой веб-браузер на свой домен, и вы должны увидеть, что ваше приложение работает и доступно из Интернета.

    Перезапуск приложения Node.js при перезагрузке

    Forever хорош, когда речь идет о поддержании работоспособности вашего приложения в случае его сбоя и т. д., но что происходит, когда VPS перезагружается?

    Именно здесь простой cronjob может предотвратить неожиданное время простоя вашего приложения и ваших пользователей.

    Создайте файл с именем starter.sh в домашней папке вашего приложения и скопируйте следующий код:

    #!/bin/sh
    
    if [ $(ps -e -o uid,cmd | grep $UID | grep node | grep -v grep | wc -l | tr -s "\n") -eq 0 ]
    then
            export PATH=/usr/local/bin:$PATH
            forever start --sourceDir /path/to/your/node/app main.js >> /path/to/log.txt 2>&1
    fi
    
    

    где main.js следует заменить основным скриптом вашего приложения.

    Этот полезный фрагмент взят отсюда

    Чтобы запускать этот скрипт при каждой перезагрузке, вам нужно отредактировать crontab с помощью этой команды:

    crontab -e
    

    и добавьте следующий код в этот файл

    @reboot /path/to/starter.sh
    

    Теперь установите абсолютный путь к вашему файлу starter.sh.

    Совет. Перейдите к местоположению вашего файла starter.sh и распечатайте текущий каталог с помощью pwd.

    Повторите шаги, описанные выше, для каждого из ваших доменов/сервисов.

    Предоставлено: Кристианом Фей