Установка Ghost на Ubuntu 16.04 с Node.js и Apache и подключением SSL
Что такое Ghost и Node.js
- Ghost — лёгкая и современная платформа для публикаций и блогов, написанная на JavaScript. Подходит для персональных и корпоративных блогов.
- Node.js — среда выполнения JavaScript на стороне сервера, основана на движке V8; даёт событийную модель и неблокирующий ввод/вывод, полезна для веб-приложений в реальном времени.
Короткое определение: Node.js — это серверная среда выполнения JavaScript. Ghost — блог-платформа на Node.js.
Важно: руководство ориентировано на Ubuntu 16.04 и Node.js v4.x, как в исходном примере. На современных серверах рекомендуется использовать актуальные LTS‑версии Ubuntu и Node.js, но ниже показана установка для указанной конфигурации.
Основные задачи этого руководства
- Установить Node.js (из репозитория NodeSource v4.x)
- Скачать и развернуть Ghost в /var/www/ghostblog
- Настроить пользователя и права для безопасного запуска
- Сделать Ghost сервисом systemd
- Установить Apache и настроить VirtualHost с проксированием на Ghost
- Включить SSL (самоподписанный сертификат) и указать альтернативы
Требования
- Сервер под управлением Ubuntu 16.04
- root-права или sudo
- Базовые навыки работы в терминале
Шаг 1 — Установка Node.js на Ubuntu
В этом руководстве используется Node.js v4.x через репозиторий NodeSource. Репозиторий облегчит обновление Node.js в будущем.
Установите ключ репозитория:
curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add -Добавьте репозитории NodeSource для Xenial (Ubuntu 16.04):
sudo echo 'deb https://deb.nodesource.com/node_4.x xenial main' > /etc/apt/sources.list.d/nodesource.list
sudo echo 'deb-src https://deb.nodesource.com/node_4.x xenial main' >> /etc/apt/sources.list.d/nodesource.listОбновите список пакетов и установите nodejs:
sudo apt-get update
sudo apt-get install -y nodejsПроверьте версии:
node --version
npm --versionПримечание: npm — менеджер пакетов для Node.js; он нужен для установки зависимостей Ghost.
Важно: если на сервере уже установлены другие версии Node.js, убедитесь, что вы не ломаете критичные для системы компоненты. На современных системах стоит использовать nvm или актуальную LTS‑версию Node.js.
Шаг 2 — Установка Ghost в /var/www
Создайте каталог и перейдите в него:
mkdir -p /var/www/
cd /var/www/Скачайте архив последней стабильной версии Ghost (в оригинале используется ссылка ghost-latest.zip) и распакуйте в каталог ghostblog:
wget https://ghost.org/zip/ghost-latest.zip
unzip -d ghostblog ghost-latest.zipПерейдите в каталог и установите зависимости через npm в режиме production:
cd ghostblog/
sudo npm install --productionЗамечание: флаг –production исключает установку dev-зависимостей и уменьшает размер установки.
Шаг 3 — Конфигурация Ghost и пользователь для запуска
Скопируйте пример конфигурации в реальный файл:
cd /var/www/ghostblog/
cp config.example.js config.jsСоздайте системного пользователя, под которым будет работать Ghost. Этот пользователь ограничит права процесса:
useradd -d /var/www -s /bin/bash ghost
passwd ghostВвод нового пароля для пользователя ghost будет произведён вручную.
Примеры параметров:
- -d задаёт домашнюю директорию (/var/www)
- -s задаёт shell (/bin/bash)
Измените владельца каталога с файлами Ghost на пользователя ghost:
chown -R ghost:ghost /var/www/ghostblogЗапустите Ghost от имени пользователя ghost для теста:
su - ghost
cd ghostblog/
npm start --productionGhost по умолчанию слушает localhost:2368. Проверить ответ можно командой curl:
curl -I localhost*:2368
*
Вы должны увидеть ответ вида HTTP/1.1 200 OK.
Если всё работает, выйдите из пользователя ghost (команда exit) и создайте systemd‑юнит для автозапуска.
Создайте файл /lib/systemd/system/ghost.service и вставьте следующее:
[Unit]
Description=ghost
After=network.target
[Service]
Type=simple
# Ghost installation Directory
WorkingDirectory=/var/www/ghostblog
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 и включите автозапуск:
systemctl daemon-reload
systemctl enable ghost
systemctl start ghostПроверьте, что процесс слушает порт 2368:
netstat -plntu
Шаг 4 — Установка Apache и виртуального хоста для Ghost
Установите Apache:
sudo apt-get install apache2Создайте файл виртуального хоста в /etc/apache2/sites-available/ (например, ghostblog.conf):
sudo cd /etc/apache2/sites-available/
sudo vim ghostblog.confВставьте конфигурацию проксирования HTTP в Ghost:
#Domain Name
ServerName ghostblog.me
ServerAlias www.ghostblog.me
#HTTP proxy/gateway server
ProxyRequests off
ProxyPass / http://127.0.0.1:2368/
ProxyPassReverse / http:/127.0.0.1:2368/
Активируйте модули proxy и proxy_http:
sudo a2enmod proxy proxy_httpАктивируйте сайт и перезапустите Apache, затем перезапустите Ghost:
sudo a2ensite ghostblog
sudo systemctl restart apache2
sudo systemctl restart ghostТест: откройте http://ghostblog.me в браузере или используйте curl.

Шаг 5 — Включение SSL для Ghost (Apache)
Чтобы включить HTTPS, можно использовать самоподписанный сертификат или получить сертификаты от CA (рекомендуется Let’s Encrypt для публичных сайтов). В этом руководстве показано создание самоподписанного сертификата и конфигурация Apache.
Создайте каталог для сертификатов и сгенерируйте ключ и crt:
sudo mkdir -p /etc/apache2/certs
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/certs/ghostblog.key -out /etc/apache2/certs/ghostblog.crtОграничьте права на файлы сертификатов:
sudo cd /etc/apache2/certs/
sudo chmod 600 *Отредактируйте конфигурацию виртуального хоста, чтобы добавить перенаправление на HTTPS и секцию для 443 порта:
sudo cd /etc/apache2/sites-available/
sudo vim ghostblog.confВставьте или обновите конфигурацию на следующую:
ServerName ghostblog.me
ServerAlias www.ghostblog.me
# Force http to https
Redirect permanent / https://ghostblog.me/
# ProxyRequests off
# ProxyPass / http://127.0.0.1:2368/
# ProxyPassReverse / http:/127.0.0.1:2368/
ServerName ghostblog.me
SSLEngine on
SSLCertificateFile /etc/apache2/certs/ghostblog.crt
SSLCertificateKeyFile /etc/apache2/certs/ghostblog.key
ProxyPass / http://127.0.0.1:2368/
ProxyPassReverse / http:/127.0.0.1:2368/
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto "https"
Активируйте модули ssl и headers, затем перезапустите Apache:
sudo a2enmod ssl headers
sudo systemctl restart apache2Проверьте в браузере: при заходе на http://ghostblog.me вы будете перенаправлены на https://ghostblog.me.

Проверка и отладка
- Логи systemd: journalctl -u ghost -f
- Логи Apache: /var/log/apache2/error.log и /var/log/apache2/access.log
- Проверка доступа к порту: ss -plntu | grep 2368
- Если страница не открывается по HTTPS, убедитесь, что порты 80 и 443 открыты в фаерволе (UFW/iptables).
Пример разрешения через UFW:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reloadАльтернативы и когда этот подход не подходит
Когда выбрать Nginx вместо Apache:
- Нужно более простое и эффективное обратное проксирование для больших нагрузок.
- Nginx часто предпочтительнее по производительности и по использованию как статического прокси.
Когда отдавать предпочтение Docker:
- Если вы хотите изолировать окружение и упростить деплой и обновления.
- Docker удобен для CI/CD и многоконтейнерных развёртываний.
Когда не использовать самоподписанный сертификат:
- Для публичных сайтов следует использовать доверенный CA (Let’s Encrypt), чтобы избежать предупреждений браузера.
Модель принятия решения (короткая)
- Нужно быстро запустить блог для личного использования на старом сервере? Подойдёт этот набор (Ubuntu 16.04 + Apache + самоподписанный SSL).
- Планируется публичный трафик и рост? Используйте более новую Ubuntu, актуальный Node.js LTS и сертификаты Let’s Encrypt. Рассмотрите Nginx или Docker.
Рекомендации по безопасности и жёсткому хардению
- Запускайте Ghost от непользовательского аккаунта (ghost), ограничьте права файлов.
- Закройте лишние порты в фаерволе.
- Используйте регулярные обновления ОС и Node.js (по возможности планируйте миграцию с Ubuntu 16.04).
- Для публичных сайтов используйте Let’s Encrypt или коммерческий сертификат.
- Включите логирование и мониторинг процесcа (systemd + внешние инструменты).
Краткая пошаговая методология (чеклист для админа)
- Проверить систему и права root/sudo.
- Добавить репозиторий NodeSource и установить nodejs.
- Скачать и распаковать Ghost в /var/www/ghostblog.
- Создать пользователя ghost и выставить владение на каталог.
- Установить зависимости npm и протестировать локально.
- Создать systemd‑юнит для автозапуска и включить сервис.
- Установить Apache, настроить VirtualHost и активировать proxy модули.
- Настроить SSL (Let’s Encrypt предпочтительнее самоподписанного).
- Проверить доступность и логи, настроить фаервол.
Критерии приёмки
- Ghost отвечает по локальному порту 2368 и возвращает HTTP/1.1 200.
- Apache корректно проксирует запросы с порта 80 на 127.0.0.1:2368.
- HTTPS доступен без ошибок сертификата (для самоподписанного — ожидается предупреждение браузера).
- Сервис ghost включён в systemd и автоматически стартует после перезагрузки.
Советы по миграции и совместимости
- Ubuntu 16.04 — устаревшая версия для современных производств; при возможности планируйте переход на Ubuntu 18.04/20.04/22.04 и соответствующую версию Node.js.
- Новые версии Ghost и пакетов могут требовать более новых версий Node.js. Перед обновлением проверьте совместимость в официальной документации Ghost.
Краткое резюме
Ghost легко разворачивается на сервере с Node.js. В этом руководстве показан классический путь: NodeSource → npm → systemd → Apache (обратный прокси) → SSL. Для публичных и производственных окружений рекомендуется использовать актуальные версии ОС и Node.js, автоматическое обновление сертификатов (Let’s Encrypt) и продуманную политику безопасности.
Важное: если вы разворачиваете блог для публичной аудитории, замените самоподписанный сертификат на доверенный и рассмотрите использование Nginx или контейнеризации для упрощения деплоя.
Спасибо за внимание. Если нужна конкретная помощь с обновлением до более новой версии Ubuntu, миграцией Ghost или настройкой Let’s Encrypt — могу подготовить пошаговое руководство.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента