Lab / Ghost

Как запустить 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