Site icon 8HOST.COM

Установка и настройка Ghost в CentOS 7

Ghost – это легковесная и простая блог-платформа с открытым исходным кодом. Ghost легко приспособить к индивидуальным потребностям пользователей. Также платформа предоставляет множество тем.

Данное руководство поможет установить Ghost на сервер CentOS 7, настроить Nginx как прокси-сервер Ghost и перевести платформу в фоновый режим.

Требования

1: Установка Ghost

Ghost рекомендуется установить в каталог var/www/ghost.

Загрузите последнюю версию Ghost из репозитория GitHub:

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

Обновите пакеты системы. Чтобы распаковать архив, установите инструмент unzip:

sudo yum update -y
sudo yum install unzip -y

Флаг -y обновляет и устанавливает пакеты автоматически, не запрашивая подтверждения у пользователя.

Распакуйте загруженный архив в каталог /var/www/ghost, предварительно создав каталог /var/www:

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

Откройте /var/www/ghost/:

cd /var/www/ghost/

Установите зависимости Ghost, необходимые на этапе производства.

sudo npm install --production

2: Настройка Ghost

Конфигурационный файл Ghost – /var/www/ghost/config.js. Этот файл не поставляется по умолчанию, но Ghost предоставляет шаблон конфигурации, файл config.example.js.

Скопируйте файл config.example.js в /var/www/ghost/config.js (у вас останется копия исходного файла).

sudo cp config.example.js config.js

Откройте конфигурационный файл:

sudo vi config.js

Сначала нужно изменить URL (в противном случае ссылки на блог будут перенаправлять пользователей на my-ghost-blog.com). В поле url укажите свой домен или IP-адрес.

...
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 записывается в формате http://example.com или http://11.11.11.11 (если использовать неправильный формат, Ghost не запустится).

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

Больше о пользовательской настройке Ghost можно узнать на официальном сайте проекта.

Сохраните и закройте файл.

Запустите Ghost из каталога /var/www/ghost.

sudo npm start --production

Команда должна вернуть:

> ghost@0.11.7 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. Он не прослушивает открытый сетевой интерфейс, потому вы не сможете получить прямой доступ к блогу. Настройте прокси-сервер Nginx.

3: Nginx как прокси-сервер для Ghost

Теперь нужно настроить Nginx для обслуживания блога Ghost. Это позволит подключиться через порт 80 к тому порту, на котором работает Ghost (тогда пользователям не придётся указывать порт : 2368 в конце адреса). Также прокси-сервер добавляет ещё один уровень и в дальнейшем упростит масштабирование блога.

Остановите Ghost (CTRL+C).

Настройте Nginx. Откройте каталог /etc/nginx и удалите стандартный конфигурационный файл Nginx из каталога /etc/nginx/sites-enabled:

cd /etc/nginx/

Если вы устанавливали Nginx из репозитория EPEL, у вас не будет каталогов sites-available and sites-enabled. Эти каталоги используются для управления настройками сайта, потому их нужно создать.

sudo mkdir sites-available
sudo mkdir sites-enabled

Создайте новый файл ghost в каталоге /etc/nginx/sites-available/.

sudo vi /etc/nginx/sites-available/ghost

Вставьте в конфигурационный файл следующие параметры (вместо your_domain_or_ip_address укажите свой домен или IP).

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. Также эти настройки устанавливают соответствующие HTTP-заголовки, благодаря чему в логах вы увидите IP-адреса посетителей.

Сохраните и закройте файл. Чтобы активировать эти настройки, создайте символьную ссылку на файл в каталоге /etc/nginx/sites-enabled:

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

Nginx не сможет использовать этот файл, пока вы не откорректируете конфигурационный файл Nginx по умолчанию и не добавите файлы конфигурации в sites-enabled. Кроме того, нужно отключить сайт по умолчанию. Откройте файл nginx.conf в редакторе:

sudo vi nginx.conf

Добавьте следующую строку в блок http, чтобы добавить конфигурационные файлы в каталог sites-enabled.

http {
...
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

Полностью закомментируйте блок server внутри блока http:

...
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
#    server {
#       listen       80 default_server;
#       listen       [::]:80 default_server;
#       server_name  _;
#       root         /usr/share/nginx/html;
#
#       # Load configuration files for the default server block.
#       include /etc/nginx/default.d/*.conf;
#
#       location / {
#       }
#
#       error_page 404 /404.html;
#           location = /40x.html {
#       }
#
#       error_page 500 502 503 504 /50x.html;
#           location = /50x.html {
#       }
...
...

Сохраните и закройте файл. Проверьте файл на наличие ошибок:

sudo nginx -t

Если ошибок нет, вы увидите:

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

Если команда обнаружила ошибки, исправьте их и повторите проверку.

После этого перезапустите Nginx:

sudo systemctl restart nginx

4: Пользователь для Ghost

Чтобы повысить безопасность сервиса, нужно создать отдельного пользователя для Ghost, у которого будет доступ только к /var/www/ghost и домашнему каталогу. Даже если блог Ghost будет взломан, злоумышленник не сможет сильно повредить систему.

Создайте пользователя ghost:

sudo adduser --shell /bin/bash ghost

Передайте ему права на каталог /var/www/ghost:

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

Убедитесь, что новый пользователь может запускать Ghost. Войдите как пользователь ghost:

sudo su - ghost

Запустите Ghost и запросите состояние сервиса:

cd /var/www/ghost
npm start --production

Теперь блог Ghost должен быть доступен по ссылке http://your_domain_or_ip_address. Nginx отправит запросы экземпляру Ghost.

5: Ghost как сервис системы

На данный момент Ghost работает в терминале. Если вы прервёте сессию, блог прекратит работу. Чтобы блог Ghost продолжал работать в фоновом режиме, создайте unit-файл systemd. Остановите Ghost, нажав CTRL+C, и выйдите из учётной записи пользователя ghost, нажав CTRL+D.

Создайте новый unit-файл:

sudo vi /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

Читайте также: Основы Systemd: управление сервисами и журналирование

Сохраните и закройте файл. Включите и запустите сервис:

sudo systemctl enable ghost.service
sudo sytemctl start ghost.service

Чтобы убедиться, что всё работает, откройте ссылку:

http://your_domain_or_ip_address

Читайте также: