Бесплатный хостинг для Ghost на Heroku

Использование Heroku как хостинга для вашего Ghost блога имеет ряд недостатков, с которыми придется мириться:

  • вы не сможете загружать изображения, нужно будет использовать сервис imgur или ему подобные, DropBox, тоже сойдет;
  • лучше не использовать Heroku для популярных блогов, так как бесплатная его версия (и его компонентов) имеет значительные ограничения, будь то коннекты к базе или сам размер БД.

Регистрация на Heroku

Первое, что нужно сделать это зарегистрироваться на heroku и ознакомиться с туториалом.

Скачать Ghost

Мы не сможем ничего написать в нашем блоге, без самого блога! Нужно скачать свежую версию Ghost с официального сайта, последняя на момент написания этой статьи 0.4.2.

После этого нужно распоковать архив, например в папку blog:

$ unzip ghost-0.4.2.zip -d blog && blog

Создание репозитария

Если вы прочитали руководство по Heroku, вам уже известно, что он тесно связан с Git-репозитариями, поэтому надеюсь, что git у вас уже установлен.

Создадим репозитарий:

$ git init

Добавим в исключения папку node_modules, это важно, иначе ваш блог не запуститься:

$ echo "node_modules/" > .gitignore

Зафиксируем изменения:

$ git add -A
$ git commit -m 'Init commit'

Создание Heroku-приложения

Войдем и создадим приложение:

$ heroku login
$ heroku create my-blog-name

База даных

По-умолчанию Ghost в качестве базы данных использует SQLite, нам она не подходит, так как она хранится локально, а Heroku, при каждом пуше, удаляет все что не храниться в репозитарии.

Самый подходящий вариант это PostgreSQL или MySQL. Со вторым сложнее так что будем использовать PostgreSQL:

$ heroku addons:add heroku-postgresql:dev
Adding heroku-postgresql:dev on my-blog... done, v3 (free)  
Attached as HEROKU_POSTGRESQL_RED_URL  
Database has been created and is available

В ответе heroku вернет идентификатор базы HEROKU_POSTGRESQL_RED_URL (у вас он возможно будет другим), чтобы не использовать его на прямую добавим его в глобальные переменные:

$ heroku pg:promote HEROKU_POSTGRESQL_RED_URL  
Promoting HEROKU_POSTGRESQL_RED_URL to DATABASE_URL... done

Почта

Для обсужевания почты установим нам понадобится еще один компонент - Mandrill:

$ heroku addons:add mandrill

Конфигурация и настройка

Зависимости

Использование PostgreSQL в качестве базы для Ghost требует установки node-postgres:

$ npm install pg --save

npm все поставит и изменит ваш package.json добавив новую зависимость, нужно зафиксировать это:

$ git add package.json
$ git commit -m 'Add node-postgres'

Настройки

Создадим файл настройки из приложенного примера:

$ cp config.example.js config.js

Внесем изменения в Production раздел:

// ### Production
production: {
    url: 'http://my-blog-name.herokuapp.com/',
        mail: {
          transport: 'SMTP',
          host: 'smtp.mandrillapp.com',
          options: {
            service: 'Mandrill',
            auth: {
              user: process.env.MANDRILL_USERNAME,
              pass: process.env.MANDRILL_APIKEY
            }
          }
        },
        database: {
          client: 'postgres',
          connection: process.env.DATABASE_URL,
          debug: false
        },
        server: {
          host: '0.0.0.0',
          port: process.env.PORT
        }
    },

Зафиксируем изменения:

$ git add config.js
$ git commit -m 'Configured'

Deploy!

Установка блога

Для начала укажем heroku, что он должен использовать production конфигурацию:

$ heroku config:set NODE_ENV=production

Все готово! Для размещения и запуска приложения выполните:

$ git push heroku master

Через некоторые время ваш блог станет доступен по адресу: http://my-blog-name.herokuapp.com/

Настройка блога

Чтобы настроить свой блог просто перейдите http://my-blog-name.herokuapp.com/ghost/ и укажите требуемые данные.

Еще раз про картинки

Важно отметить, что если вы хотите установить логотип для своего блога - то сделать это через админку не получиться! Так как после очередного $ git push heroku master все локальные изменения удалятся, включая ваш логотип. Так что самым безопасным вариантом будет добавить его в репозитарий и «зашить» в код шаблона.