Ghost – это легковесная и простая блог-платформа с открытым исходным кодом. Ghost легко приспособить к индивидуальным потребностям пользователей. Также платформа предоставляет множество тем.
Данное руководство поможет установить Ghost на сервер CentOS 7, настроить Nginx как прокси-сервер Ghost и перевести платформу в фоновый режим.
Требования
- Сервер CentOS 7 (1GB минимум).
- Пользователь с доступом к sudo (больше информации в руководстве по начальной настройке сервера).
- Node.js из репозитория EPEL (инструкции по установке можно найти здесь).
- Nginx (установка подробно описана здесь).
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
Читайте также: