Как установить и настроить Ghost на Ubuntu 16.04

Ghost – это легкая платформа для блогинга, которая ну очень проста в использовании. В этой статье я покажу как установить Ghost и все правильно настроить. И все это на Ubuntu 16.04.

Что нужно

1 GB памяти на сервере с Ubuntu 16.04. Если хотите узнать как правильно настроить сервер, включая пользователя non-root  и брандмауэр.

Node.js, установленный с использованием  официального PPA.

Ну и куда без Nginx… И опять в помощь вам туториал Как установить Nginx на Ubuntu 16.04.

Шаг 1 – Установка Ghost

Во-первых, нам нужно установить Ghost. Мы поместим Ghost в каталог var/www/ghost, который является рекомендуемым местом установки.

Качаем последнюю версию Ghost с GitHub при помощи wget:

$ wget https://ghost.org/zip/ghost-latest.zip

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

$ sudo apt-get install unzip

Затем разархивируйте загруженный пакет в каталог /var/www/ghost:

$ sudo unzip -d /var/www/ghost ghost-latest.zip

Перейдите в каталог /var/www/ghost/:

$ cd /var/www/ghost/

Затем установите зависимости Ghost, но только те, которые нам действительно необходимы. Мы пропусти зависимости, которые нужны только людям, разрабатывающим Ghost:

$ sudo npm install –production

После этой команды Ghost полностью установится, но нам этого мало. Для корректной работы нам еще нужно покопаться  в настройках.

Шаг 2 – Настройка Ghost

Ghost использует конфигурационный файл, расположенный по адресу /var/www/ghost/config.js.

Этот файл не появится при установке, но установка Ghost даст нам файл config.example.js, который мы будем использовать в качестве основы.

Скопируйте пример файла конфигурации в /var/www/ghost/config.js. Мы не просто переместим, а скопируем, на всякий случай. Вдруг придется “откатываться” назад:

$ sudo cp config.example.js config.js

Откройте файл для редактирования:

$ sudo nano config.js

Во-первых, мы должны изменить URL, который использует Ghost. Если мы этого не сделаем, ссылки в блоге будут отправлять посетителей на my-ghost-blog.com. Измените значение поля url на ваше доменное имя или IP-адрес вашего сервера, если вы не хотите использовать домен прямо сейчас:

/var/www/ghost/config.js


config = {
// ### Production
// When running Ghost in the wild, use the production environment
// Configure your URL and mail settings here
production: {
url: ‘http://your_domain_or_ip_address‘,
mail: {},

Значение URL должно быть в виде URL-адреса, например http://example.com или http://11.11.11.11. Если это значение отформатировано неправильно, то Ghost не запустится.

Ghost может работать без настроек почты; Они необходимы только в том случае, если вам необходимо поддерживать восстановление пароля для пользователей Ghost.

Но если вы хотите идите по ссылке и настраивайте дальше. Инструкции можете найти на официальном сайте.

Сохраняйте файл и закрывайте редактор.

И находясь в каталоге /var/www/ghost, запустите Ghost с помощью следующей команды:

$ sudo npm start –production

Если все сделали правильно, о результат будет такой:

Output
> [email protected] start /var/www/ghost
> node index
WARNING: Ghost is attempting to use a direct method to send email.
It is recommended that you explicitly configure an email service.
Help and documentation can be found at http://support.ghost.org/mail.
Migrations: Creating tables…

Ghost is running in production…
Your blog is now available on http://your_domain_or_ip_address
Ctrl+C to shut down

Ghost прослушивает порт 2368, и если вы включили брандмауэр UFW, как указано в статьях предварительной готовности, вы не сможете получить к нему доступ. Ну а теперь можно приступать к настройке Nginx.

Шаг 3 – настройка Nginx

Следующий шаг – это настройка нашего Nginx, который будет “обслуживать” наш блог.  Это позволит подключиться через порт 80 к порту, на котором работает Ghost, чтобы люди могли получить доступ к вашему блогу. А также добавит функциональности в том случае, если вы захотите расширить свой блог.

Если Ghost все еще запущен в вашем терминале, нажмите CTRL + C, чтобы закрыть Ghost, а уже потом  продолжайте дальше.

Теперь давайте настроим Nginx.  Перейдите в каталог /etc/ nginx и удалите конфигурационный файл Nginx (по умолчанию) в /etc/nginx/sites-enabled:

$ cd /etc/nginx/
$ sudo rm sites-enabled/default

Создайте новый файл в /etc/nginx/sites-available/ с именем ghost:

$ sudo nano /etc/nginx/sites-available/ghost

Поместите следующую конфигурацию в файл и измените your-domain-name на ваше доменное имя или IP-адрес вашего сервера, если у вас нет домена:

/etc/nginx/sites-available/ghost

server {
listen 80;
server_name your_domain_or_ip_address;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:2368;
}
}

Эта базовая конфигурация перенаправляет все запросы с этого сервера на блог Ghost, который запущен на порту 2368. Вы можете узнать больше о конфигурации в мануале Understanding Nginx HTTP Proxying, Load Balancing, Buffering, and Caching.

Сохраните файл, выйдите из редактора и включите эту конфигурацию,  просто создав символическую ссылку для этого файла в каталоге /etc/nginx/sites:

$ sudo ln -s /etc/nginx/sites-available/ghost /etc/nginx/sites-enabled/ghost

Затем проверьте конфигурацию, чтобы убедиться в отсутствии проблем:

$ sudo nginx -t

Если все правильно, то вы увидите следующий результат:

Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Если вы видите какие-либо ошибки, исправьте их и снова протестируйте конфигурацию.

С уже рабочим файлом конфигурации перезапустите Nginx, чтобы изменения вступили в силу:

$ sudo service nginx restart

Прежде чем снова запустить Ghost, давайте создадим новую учетную запись пользователя.

Шаг 4 – Запуск Ghost в качестве отдельного пользователя

Мы же ведь думаем о безопасности ) Поэтому мы запустим Ghost под отдельной учетной записью.У этого пользователя будет доступ только к директории /var/www/ghost и ее домашней папке. Следовательно, если ваш блог Ghost подвергается опасности, вы минимизируете потенциальный ущерб вашей системе.

Создайте нового пользователя с помощью следующей команды:

$ sudo adduser –shell /bin/bash –gecos ‘Ghost application’ ghost

Затем сделайте этого нового пользователя владельцем каталога /var/www/ghost:

$ sudo chown -R ghost:ghost /var/www/ghost/

Теперь давайте убедимся, что этот пользователь может запустить Ghost. Войдите в систему как ghost:

$ su – ghost

Теперь запустите Ghost под этим пользователем и убедитесь, что он работает:

$ cd /var/www/ghost

$ npm start –production

Теперь у  вас есть доступ к своему блогу по адресу http: // your_domain_or_ip_address.

Шаг 5 – Запуск Ghost в качестве системного сервиса

В настоящий момент Ghost запущен в нашем терминале. Если мы выйдем из системы, наш блог будет закрыт. Давайте запустим Ghost в фоновом режиме. А после убедимся что  Ghost будет работать, если мы перезагрузимся. Для этого мы создадим файл unitd, который определяет, как systemd должен управлять Ghost.

Создайте новый файл для хранения определения файла unitd:

$ nano /etc/systemd/system/ghost.service

Ну а после добавьте следующую конфигурацию, которая определяет имя службы, группу и пользователя для службы, а также информацию о том, как она должна запускаться:

/etc/systemd/system/ghost.service

[Unit]
Description=Ghost
After=network.target
[Service]
Type=simple
WorkingDirectory=/var/www/ghost
User=ghost
Group=ghost
ExecStart=/usr/bin/npm start –production
ExecStop=/usr/bin/npm stop –production
Restart=always
SyslogIdentifier=Ghost
[Install]
WantedBy=multi-user.target

Если вы не знакомы с файлами unitd, то смотрите  учебник Understanding Systemd Units and Unit Files, который поможет вам разобраться во всем этом.

Сохраните файл и выйдите из редактора. Затем включите и запустите службу:

$ systemctl enable ghost.service

$ systemctl start ghost.service

Еще раз, посетите http: // your_domain_or_ip_address, и вы увидите свой блог ))