Запускаем Ghost в контейнере Docker
Существует множество различных систем управления сайтами и блогами, самые популярные из них написаны на PHP и используют для хранения данных MySQL или аналогичную СУБД — что означает сравнительно высокие требования к ресурсам. Однако, не всегда для создания собственного блога требуется «прожорливый» WordPress — давайте попробуем буквально за 5-10 минут сделать блог на базе Ghost.
Итак, представляем нашего подопытного. Ghost — сравнительно новая и уже популярная система управления сайтом. Отметим, что Ghost написан на JavaScript, имеет возможность работать без MySQL-сервера, поддерживает современные языки разметки и, что немаловажно, имеет очень приятный и современный дизайн.
Мы запустим собственную инсталляцию Ghost с использованием Docker. Доступная в современных дистрибутивах ОС Linux инфраструктура Docker позволяет удобно, безопасно и достаточно просто использовать различные приложения. В отличие от привычной процедуры подготовки к использованию какого-либо приложения (установить нужные пакеты, настроить их, установить и настроить приложение), в случае с Docker загрузка и установка готового приложения делается буквально одной командой. Обратим внимание — в случае с Docker выполнение кода происходит в изолированном окружении, что очень важно с точки зрения безопасности.
Инфраструктура Docker также позволяет легко создавать собственные контейнеры — модифицируя существующие продукты или «с нуля». Этот современный, удобный путь позволяет системным администраторам легко масштабировать свои системы, обновлять их и так далее. Рекомендуем отличную статью «Понимая Docker» в качестве обзора основных возможностей этой инфраструктуры.
Итак, приступим. Для размещения нашего блога нам понадобится SSD VDS, а в качестве операционной системы выберем Centos 7. Установка происходит автоматически и очень быстро, в течение нескольких минут. Подключимся к нашему виртуальному серверу с помощью ssh и установим поддержку docker. Сделаем это в несколько шагов.
Добавим репозиторий в список доступных:
1 2 3 4 5 6 7 8 |
tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF |
Установим docker:
1 |
yum -y install docker-engine |
Включим автозагрузку docker и запустим его:
1 2 |
service docker start chkconfig docker on |
Приступим к установке Ghost. Создадим отдельную директорию, где будут расположены пользовательские файлы, загрузим и запустим нашу CMS:
1 2 |
mkdir /opt/ghost docker run -d -p 80:2368 -v /opt/ghost:/var/lib/ghost ghost |
Обратим внимание на указание путей (/opt/ghost:/var/lib/ghost). Первая часть указывает на месторасположение локального хранилища на файловой системе сервера, вторая — на путь внутри контейнера.
Собственно, на этом установка завершена 🙂 Можно открыть URL вида http://адрес-VDS/ и увидеть страницу нашей CMS. Однако для начала работы потребуется, как минимум, сменить значение url в конфигурационном файле ghost. Это нужно сделать по простой причине — Ghost проверяет URL, по которому производится доступ и в случае несовпадения с адресом в конфигурационном файле ряд функций будут недоступны.
Эту настройку сделать очень легко — с помощью любого текстового редактора откройте /opt/ghost/config.js и измените значение переменной url на URL-адрес блога.
После этого можно создать учетную запись в CMS и начать использование собственного блога. Откройте панель управления (http://ваш_блог/admin), укажите свою электронную почту и желаемый пароль и через несколько мгновений установка будет завершена.
Несмотря на простую установку, Ghost имеет множество настроек — рекомендуем обратиться к официальной документации.
В дальнейшем с помощью других docker-контейнеров можно расширять возможности как блога, так и доступных сервисов — например, установить nginx в качестве front-end’а, запустить изолированную почтовую систему и так далее. Отметим также простоту миграции или дублирования ресурсов — достаточно создать новую копию контейнера и, при необходимости, перенести нужные данные.