Руководство по бесплатному развертыванию собственного блога Ghost с помощью Google Cloud Platform Compute Engine.

Ghost — это популярная платформа для ведения блогов с открытым исходным кодом, которую я активно поддерживаю. Вот так выглядит блог, размещенный на Ghost. Платформа безопасна, легка и очень проста в использовании и настройке. У команды Ghost есть пост о том, как их платформа сравнивается с WordPress здесь.

Существует плата за управляемый хостинг, если вы хотите, чтобы Ghost размещал для вас блог, но в этой статье я проведу вас через настройку блога-призрака Dockerized на Google Cloud Platform (GCP). При таком подходе ваш блог может быть размещен абсолютно бесплатно, а установка займет не более 15 минут. Вы можете прочитать о Ghost здесь и почему я использую GCP в качестве своей облачной платформы здесь.

Наличие учетной записи GCP является обязательным условием, и вы можете создать ее здесь бесплатно. Если вы используете AWS, Azure или другого поставщика облачных услуг, вы можете выполнить те же действия для всего, кроме настройки вычислительного экземпляра.

Давайте начнем!

Настройка экземпляра Compute Engine

Compute Engine от Google — это сервис для развертывания частных виртуальных машин в облаке. Всегда бесплатный уровень GCP предоставляет одну из этих виртуальных машин бесплатно для использования, и мы будем использовать эту услугу для размещения нашего блога Ghost.

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

Процесс создания Compute Engine можно запустить здесь или нажав кнопку создать экземпляр в представлении Экземпляры ВМ.

  1. Укажите имя для вашего экземпляра (я буду использовать ghost-blog)
  2. В разделе «Конфигурация машины», оставив семейство машин как Общее назначение, выберите N1 для серии и f1-micro для типа машины (уровень бесплатного пользования).
  3. Измените загрузочный диск на общедоступный образ Ubuntu 20.10 или Ubuntu 20.10 Minimal с типом загрузочного диска Стандартный постоянный диск.
  4. Убедитесь, что установлены флажки Разрешить HTTP-трафик и Разрешить HTTPS-трафик.
  5. Обратите внимание на сообщение в правом верхнем углу, указывающее, что первые 744 часа использования экземпляра f1-micro в этом месяце бесплатны — если вы не видите это сообщение, возможно, вы выбрали неправильный тип машины или неправильный регион (должен быть us-west1, us-central1, us-east1)

Вот как должна выглядеть ваша конфигурация:

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

Обратите внимание на внешний IP-адрес, так как в этом руководстве мы продолжим настраивать Ghost.

Нажмите кнопку SSH в разделе «Подключение», чтобы запустить сеанс и получить доступ к новому экземпляру Compute Engine.

Подготовьте свой экземпляр для Ghost

Как упоминалось выше, в этом пошаговом руководстве я буду использовать Ubuntu 20.10. Если вы используете другую ОС, вам придется настроить свои команды.

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

sudo apt-get update 
sudo apt-get install nano

Добавить пространство подкачки

Небольшие вычислительные экземпляры, такие как f1-micro, имеют ограниченный объем памяти (600 МБ в нашем случае), что может замедлять тяжелые процессы и перегружать ЦП. Если вы используете более крупный вычислительный экземпляр с достаточным объемом памяти, вы можете пропустить этот шаг, но я начну с добавления хранилища подкачки для повышения производительности. Вы хотите добавить в пространство подкачки удвоенное количество доступной оперативной памяти — в моем случае это 1,2 ГБ подкачки на 600 МБ оперативной памяти. Создайте файл подкачки:

sudo fallocate -l 1.2G /swapfile

Измените разрешения, чтобы разрешить только root-доступ:

sudo chmod 600 /swapfile

Настройте область подкачки Linux в файле:

sudo mkswap /swapfile

Убедитесь, что изменения являются постоянными, изменив таблицу файловой системы:

sudo nano /etc/fstab

Добавьте /swapfile swap swap defaults 0 0 в конец файла. Это должно выглядеть так:

LABEL=cloudimg-rootfs / ext4 defaults 0 1 
LABEL=UEFI /boot/efi vfat defaults 0 1 
/swapfile swap swap defaults 0 0

*Если вы никогда раньше не использовали nano, вы можете использовать ctrl+x, чтобы закрыть файл — введите y+enter, когда вас спросят, хотите ли вы сохранить измененный буфер .

Теперь у вашего экземпляра есть дополнительные 1,2 ГБ памяти подкачки.

Установить Докер

Мы будем использовать образ Ghost Docker для развертывания нашего блога. У Docker есть пошаговое руководство по установке, которому вы можете следовать здесь, но я включу соответствующие инструкции в этот раздел.

Обновите список пакетов и запустите обновление, чтобы убедиться, что все обновлено:

sudo apt-get update 
sudo apt-get upgrade

Установите необходимые пакеты:

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release \
    software-properties-common

Добавьте официальный GPG-ключ Docker:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Настройте стабильный репозиторий:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu groovy stable"

Запустите обновление еще раз и установите докер:

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

Вы можете проверить, установлен ли Docker с помощью команды sudo docker --version и увидеть что-то подобное в выводе Docker version 20.10.5, build 55c4c88 .

Теперь вы готовы загрузить и настроить образ Ghost!

Настройка и развертывание Ghost

Существует несколько различных способов развертывания Ghost, но, как уже упоминалось, мы будем использовать Docker. В хабе Docker хранится образ Ghost Docker, что очень упрощает нам задачу.

Извлеките последний образ докера Ghost:

sudo docker pull ghost:latest

Создайте каталог для размещения вашего контента и файла конфигурации Docker, а затем создайте указанный файл конфигурации (не забудьте изменить свой IP/домен):

mkdir ghost_blog
echo '{
  "url": "http://yourdomain-or-ip",
  "server": {
    "port": 2368,
    "host": "0.0.0.0"
  },
  "database": {
    "client": "sqlite3",
    "connection": {
      "filename": "/var/lib/ghost/content/data/ghost.db"
    }
  },
  "mail": {
    "transport": "Direct"
  },
  "logging": {
    "transports": [
      "file",
      "stdout"
    ]
  },
  "process": "systemd",
  "paths": {
    "contentPath": "/var/lib/ghost/content"
  }
}' >> ghost_blog/config.json

*Заменитеhttp://yourdomain-or-ipвнешним IP-адресом, который мы указали в разделе Настройка экземпляра Compute Engine. раздел. Если у вас есть домен, указывающий на IP-адрес, вы можете использовать вместо этого домен.

Создайте файл сценария оболочки для быстрого запуска контейнера Docker (не забудьте изменить свой IP/домен):

echo '# Set path variables
DATA_DIR="$PWD/ghost_blog"
CONTAINER_NAME="ghost_blog"
# Purge the existing container if running.
docker kill $CONTAINER_NAME
docker rm $CONTAINER_NAME
# Mount the volumes - content directory and config file
# and add the url variable for docker map as the public URL
docker run \
-d \
--restart=always \
-p 80:2368 \
-e url="http://yourdomain-or-ip" \
-v $DATA_DIR/content:/var/lib/ghost/content \
-v $DATA_DIR/config.json:/var/lib/ghost/config.production.json \
--name $CONTAINER_NAME \
ghost' >> run.sh

*Заменитеhttp://yourdomain-or-ipвнешним IP-адресом, который мы указали в разделе Настройка экземпляра Compute Engine. раздел. Если у вас есть домен, указывающий на IP-адрес, вы можете использовать вместо этого домен.

У вас не должно быть следующей структуры папок:

├── run.sh
├── ghost_blog
│ ├── config.json

Чтобы развернуть контейнер Docker, содержащий образ Ghost, запустите:

sudo sh ./run.sh

При первом запуске скрипта вы увидите ошибку «Невозможно убить контейнер». Это ожидаемо и не вызовет никаких проблем. Вот пример вывода:

Перейдите к своему внешнему IP-адресу, и теперь вы должны увидеть свой экземпляр блога (убедитесь, что вы используете HTTP, а не HTTPS).

Чтобы завершить настройку блога, вам нужно перейти на страницу http://yourdomain-or-ip/ghost и следовать инструкциям по созданию учетной записи администратора.

Поздравляем, теперь у вас есть собственная страница блога Ghost, которая работает!

Другие полезные темы

Обновление призрака

С помощью этой настройки вы можете обновить свой образ Ghost, просто запустив sudo docker pull ghost:latest

Настройка HTTPS для вашего блога

Если вы хотите вывести свой блог на новый уровень, вам необходимо настроить правильное доменное имя и SSL-сертификаты. У меня есть статья о том, как сделать это с помощью NGINX и Certbot.

Постоянное хранилище контента

С нашей настройкой весь ваш контент, конфигурация и публикации будут находиться в папке ghost_blog. Чтобы создать правильную резервную копию для вашего блога, я рекомендую использовать git. Вы можете инициализировать папку ghost_blog как репозиторий git, что позволяет легко выполнять резервное копирование и восстановление.

IP и управление доменами

Если ваша точка входа в блог изменится на новый IP-адрес или правильное доменное имя, вам потребуется обновить файлы ghost_blog/config.json и run.sh, указав новый IP-адрес/доменное имя. После этого просто перезапустите пакетный скрипт run.sh.

Удачи и удачного кодирования!

Первоначально опубликовано на https://theappliedarchitect.com 13 марта 2021 г.