Гид по технологиям

Установка Ghost на Ubuntu 16.04 с Node.js и Apache и подключением SSL

• 6 min read • DevOps • Обновлено 23 Nov 2025
Установка Ghost на Ubuntu 16.04 с Node.js и Apache SSL
Установка 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 --production

Ghost по умолчанию слушает localhost:2368. Проверить ответ можно командой curl:

curl -I localhost*:2368  
*

Проверка работы Ghost через curl

Вы должны увидеть ответ вида 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

Проверка Ghost через netstat

Шаг 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.

Стартовая страница Ghost

Шаг 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.

Ghost установлен с SSL

Проверка и отладка

  • Логи 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 + внешние инструменты).

Краткая пошаговая методология (чеклист для админа)

  1. Проверить систему и права root/sudo.
  2. Добавить репозиторий NodeSource и установить nodejs.
  3. Скачать и распаковать Ghost в /var/www/ghostblog.
  4. Создать пользователя ghost и выставить владение на каталог.
  5. Установить зависимости npm и протестировать локально.
  6. Создать systemd‑юнит для автозапуска и включить сервис.
  7. Установить Apache, настроить VirtualHost и активировать proxy модули.
  8. Настроить SSL (Let’s Encrypt предпочтительнее самоподписанного).
  9. Проверить доступность и логи, настроить фаервол.

Критерии приёмки

  • 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 — могу подготовить пошаговое руководство.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро