Как запустить Ghost блог на постоянное выполнение


Для запуска ваших NodeJs приложений в фоне существует отличный модуль — forever. Этот модуль позволяет вам запустить приложение и освободить командную строку, ну и конечно же когда вы закроете терминал ваше приложение не отвалится а продолжит выполняться. Так же при падениях приложения модуль будет заботливо его перезапускать.

Установка Forever

Forever как и прочие модули для ноды устанавливаются одной командой через менеджер пакетов, вот так:

npm install -g forever

Запуск Ghost

Для начала перейдите в каталог вашего установленного Ghost. Если вы установили его как завещает официальная документация то у вас получится вот такой путь cd /var/www/ghost. Теперь отсюда выполните следующую команду:

forever start index.js

Обратите внимание это запустит Ghost в режиме разработки "Developer mode" для запуска продакшен версии используйте вот такую команду:

NODE_ENV=production forever start index.js

Запуск Ghost на основном домене

Для того что бы ваш блог стал доступен на вашем домене без указания порта :2368 вам нужно всего лишь проксировать порт на домен через Nginx.

Ниже я приведу простейшую конфигурацию виртуального хоста (бокса) который будет проксировать Ghost с :2368 на :80й порт

<code>server {  
    listen 80;
    server_name yourdomain.com;
    location / {
        proxy_pass http://localhost:2368;
        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;
    }
}
</code>

Не забудьте перезапустить Nginx sudo service nginx restart и в config.js вашего блога указать домен как для продакшена так и для разработки, иначе ваш блог не будет видно из интернета.

Вот пример моей конфигурации для продакшена:

<code>var path = require('path'),  
    config;
config = {  
    production: {
        url: 'http://blog.mysite.com',
        mail: {},
        database: {
            client: 'sqlite3',
            connection: {
                filename: path.join(__dirname, '/content/data/ghost.db')
            },
            debug: false
        },
        server: {
            host: '193.170.170.70',
            port: '2368'
        }
    },
...
</code>

Полезные команды для с модуля Forever:

start Запуск приложения

stop Остановка выполнения приложения

stopall Остановка выполнения всех приложений

restart Перезапуск демона приложения

restartall Перезапуск всех приложений

list Показать все запущенные приложения

На случай отказа или перезапуска

В реальной жизни бывают такие ситуции как отказ оборудования, банальные сбои у хостера итд. И тут наш модуль Forever уже не всесилен. Что бы ваше приложение снова запустилось после перезагрузки вашего сервера или VPS нужно выполнить несколько нехитрых действий.

Для начала в папке вашего блога /var/www/ghost создайте файл starter.sh и поместите туда следующий код

<code>#!/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
        NODE_ENV=production forever start index.js
</code>

Теперь необходимо добавить этот файл в список кронтаба. Если он до сих пор не установлен у вас на сервере, выполните данную команду sudo apt-get install gnome-schedule что бы редактировать записи в кронтабе используйте следующую команду: crontab -e и добавьте туда вот такую запись:

@reboot /var/www/ghost/starter.sh