Docker, Ghost · 7 min read · Feb 04, 2026
Руководство по Docker: Развертывание блога Ghost с MySQL и Traefik с помощью Docker

Ghost — это мощная платформа для публикации и ведения блогов с открытым исходным кодом, основанная на nodejs. Она хорошо спроектирована и проста в использовании. Платформа Ghost написана на JavaScript и использует node.js в качестве среды выполнения. Первая версия Ghost была выпущена в 2013 году под лицензией MIT.
Traefik — это современный HTTP обратный прокси и балансировщик нагрузки для микросервисов. Traefik упрощает развертывание всех микросервисов, интегрируясь с существующими компонентами инфраструктуры, такими как Docker, Swarm Mode, Kubernetes, Amazon ECS, Rancher, Etcd, Consul и т. д.
В этом руководстве мы шаг за шагом покажем, как установить и настроить Ghost в качестве контейнера Docker. Мы установим и настроим Ghost под последней версией Docker CE, используем MySQL в качестве базы данных и используем Traefik в качестве обратного прокси.
Предварительные требования
- Ubuntu 18.04 LTS
- Привилегии root
Что мы будем делать
- Установить Docker CE на Ubuntu 18.04 LTS
- Настроить Docker для пользователя без прав root
- Установить Docker Compose
- Настроить стек Ghost - создать пользовательскую сеть
- Создать каталог проекта
- Создать и настроить контейнер MySQL
- Создать и настроить обратный прокси Traefik
- Создать и настроить контейнер Ghost
- Развернуть Ghost с MySQL и Traefik
- Тестирование
Шаг 1 - Установить Docker CE на Ubuntu 18.04 LTS
Первый шаг, который мы сделаем в этом руководстве, — установить последнюю версию docker-ce на систему. Версию docker-ce можно установить из официального репозитория docker.
Добавьте ключ docker и репозиторий docker-ce.
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 \
$(lsb_release -cs) \
stable"Команда автоматически обновит все репозитории в системе.
Теперь установите docker, используя команду apt ниже.
sudo apt install docker-ce -yПосле завершения установки запустите службу docker и включите ее для автоматического запуска при каждом запуске системы.
systemctl start docker
systemctl enable dockerПоследняя версия docker-ce была установлена на систему Ubuntu 18.04.

Шаг 2 - Настроить Docker для пользователя без прав root
В этом руководстве все контейнерные микросервисы будут работать под обычным/не root пользователем. Поэтому нам нужно настроить пользователя, чтобы он мог запускать контейнер Docker и выполнять команду sudo для получения привилегий root.
Создайте нового пользователя с именем ‘hakase’ и задайте пароль.
useradd -m -s /bin/bash hakase
passwd hakaseТеперь добавьте пользователя ‘hakase’ в группы ‘sudo’ и ‘docker’.
usermod -a -G root hakase
usermod -a -G docker hakaseИ перезапустите службу docker.
systemctl restart dockerТеперь ‘hakase’ может запускать контейнер docker и выполнять команду sudo для получения привилегий root.

Войдите как пользователь ‘hakase’ и запустите контейнер hello-world docker.
su - hakase
docker run -it hello-worldИ вот результат.

Шаг 3 - Установить Docker Compose
В этом руководстве мы установим docker compose 1.21 из двоичного файла в репозитории Github.
Скачайте двоичный файл docker-compose в каталог ‘/usr/local/bin’.
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-composeИ сделайте файл ‘docker-compose’ исполняемым, изменив разрешение файла.
sudo chmod +x /usr/local/bin/docker-composeDocker compose был установлен - проверьте это, используя команду ниже.
docker-compose version
docker version
Docker-compose 1.21 с Docker-ce 1.18 был установлен.
Шаг 4 - Настроить стек Ghost
На этом этапе мы настроим docker и создадим новый файл docker-compose для установки ghost.
Мы создадим новую пользовательскую сеть docker и создадим новый файл docker-compose yml, который содержит три основных сервиса, включая базу данных MySQL, обратный прокси Traefik и сам блог Ghost.
Создать пользовательскую сеть
Показать доступные сети docker с помощью команды docker network ниже.
docker network lsСоздайте новую пользовательскую сеть docker для обратного прокси traefik с именем ‘traefiknet’.
docker network create traefiknetТеперь снова проверьте доступные сети в системе docker.
docker network ls
Пользовательская сеть для Treafik с именем ‘traefiknet’ была создана.
Создать каталог проекта
После создания пользовательской сети docker мы создадим новый каталог проекта с именем ‘ghost’ и создадим новый файл docker-compose.yml.
Войдите в пользователя ‘hakase’.
su - hakaseСоздайте новый каталог ‘ghost’ и измените рабочий каталог на него.
mkdir ghost/
cd ghost/И создайте новый файл docker-compose.
touch docker-compose.ymlСоздать и настроить службу MySQL
MySQL — это первая служба, которую мы хотим создать, и мы хотим создать контейнер MySQL с конфигурациями ниже.
- Мы будем использовать образ MySQL 5.7 docker.
- Смонтируем каталог данных MySQL в локальный каталог хоста docker.
- Запустим службу MySQL в локальной внутренней сети.
- Настроим пользователя и пароль MySQL. - Пароль root MySQL: mypassword
- База данных для ghost с именем ‘ghostdb’ с пользователем ‘ghost’ и паролем ‘ghostdbpass’
- Контейнер MySQL будет называться ‘mysql’.
Внутри каталога ‘ghost’ создайте новый каталог с именем ‘data’ и отредактируйте файл ‘docker-compose.yml’.
mkdir -p data/
vim docker-compose.ymlВставьте конфигурацию ниже.
version: '3.3'
services:
mysql:
image: mysql:5.7
restart: always
volumes:
- ./data:/var/lib/mysql
labels:
- "traefik.enable=false"
networks:
- internal
environment:
MYSQL_ROOT_PASSWORD: mypassword
MYSQL_USER: ghost
MYSQL_PASSWORD: ghostdbpass
MYSQL_DATABASE: ghostdb
container_name: mysqlСохраните и выйдите.
Создать и настроить обратный прокси Traefik
После создания службы MySQL мы создадим и настроим контейнер обратного прокси traefik.
Перед редактированием скрипта ‘docker-compose.yml’ нам нужно создать новую конфигурацию traefik с именем ‘traefik.toml’.
vim traefik.tomlВставьте конфигурацию правил traefik ниже.
#Traefik Global Configuration
debug = false
checkNewVersion = true
logLevel = "ERROR"
#Define the EntryPoint for HTTP and HTTPS
defaultEntryPoints = ["https","http"]
#Define the HTTP port 80 and
#HTTPS port 443 EntryPoint
#Enable automatically redirect HTTP to HTTPS
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
#Enable Traefik Dashboard on port 8080
#with basic authentication method
#hakase and password
[entryPoints.dash]
address=":8080"
[entryPoints.dash.auth]
[entryPoints.dash.auth.basic]
users = [
"hakase:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi.",
]
[api]
entrypoint="dash"
dashboard = true
#Enable retry sending a request if the network error
[retry]
#Define Docker Backend Configuration
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "hakase-labs.io"
watch = true
exposedbydefault = false
#Letsencrypt Registration
#Define the Letsencrypt ACME HTTP challenge
[acme]
email = "[email protected]"
storage = "acme.json"
entryPoint = "https"
OnHostRule = true
[acme.httpChallenge]
entryPoint = "http"Сохраните и выйдите.
Теперь нам нужно создать новый файл для конфигурации SSL Letsencrypt ‘acme.json’. Он используется для хранения всех журналов, сгенерированных letsencrypt.
Создайте пустой файл ‘acme.json’ и измените разрешение на 600.
touch acme.json
chmod 600 acme.jsonДалее мы отредактируем скрипт ‘docker-compose.yml’ и добавим конфигурацию службы traefik.
- Мы будем использовать последний образ traefik docker.
- Контейнер будет называться ‘traefik’
- Он использует пользовательскую сеть ‘traefiknet’ и открывает порты HTTP и HTTPS.
- Смонтируем файл docker.sock и конфигурацию traefik ‘traefik.toml’ и ‘acme.json’
- Мы определили URL-адрес панели управления traefik и бэкенд через метки docker.
Отредактируйте ‘docker-compose.yml’.
vim docker-compose.ymlВставьте конфигурацию службы traefik ниже.
traefik:
image: traefik:latest
command: --docker
ports:
- 80:80
- 443:443
labels:
- "traefik.enable=true"
- "traefik.backend=dashboard"
- "traefik.frontend.rule=Host:traef.hakase-labs.io"
- "traefik.port=8080"
networks:
- traefiknet
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik.toml:/traefik.toml
- ./acme.json:/acme.json
container_name: traefik
restart: alwaysСохраните и выйдите.
Создать и настроить службу Ghost
После настройки обратного прокси traefik мы создадим основную конфигурацию службы ghost.
Детали конфигурации, которые мы хотим создать.
- Мы будем использовать ghost v1 и маленькую версию docker alpine.
- Мы смонтируем каталог контента ghost в локальный каталог с именем ‘blog’.
- Служба ghost будет работать на порту по умолчанию с доменным именем ‘gho.hakase-labs.io’, конфигурация через метки docker.
- Служба ghost будет использовать две сети docker: internal и traefiknet.
- Мы настраиваем детали базы данных MySQL из конфигурации контейнера mysql.
- И ghost будет запущен, когда контейнеры traefik и MySQL будут запущены и работать.
Создайте новый каталог с именем ‘blog’ и отредактируйте файл ‘docker-compose.yml’.
mkdir -p blog/
vim docker-compose.ymlВставьте конфигурацию ниже.
ghost:
image: ghost:1-alpine
restart: always
ports:
- 2368
volumes:
- ./blog:/var/lib/ghost/content
labels:
- "traefik.enabled=true"
- "traefik.backend=ghost"
- "traefik.frontend.rule=Host:gho.hakase-labs.io"
- "traefik.docker.network=traefiknet"
- "traefik.port=2368"
networks:
- internal
- traefiknet
environment:
database__client: mysql
database__connection__host: mysql
database__connection__user: ghost
database__connection__password: ghostdbpass
database__connection__database: ghostdb
container_name: ghost
depends_on:
- mysql
- traefik
networks:
traefiknet:
external: true
internal:
external: falseСохраните и выйдите.

И теперь у нас есть все каталоги и конфигурации, как показано ниже.
tree
Шаг 5 - Развернуть Ghost с MySQL и Traefik
Чтобы собрать и запустить все наши службы стека ghost, мы можем использовать команду ниже.
docker-compose up -d
Когда это завершится, проверьте все работающие службы.
docker-compose psИ вот результат.
Если у вас есть ошибка, проверьте журнал контейнера, используя команды ниже.
docker-compose logs mysql
docker-compose logs traefik
docker-compose logs ghost
Стек ghost с MySQL и обратным прокси Traefik запущен и работает.
Шаг 6 - Тестирование
Откройте панель управления Traefik по ее URL, мой http://traef.hakase-labs.io/
Войдите с именем пользователя и паролем из файла ‘traefik.toml’.
И вот панель управления Traefik.

Для установки Ghost введите URL-адрес ghost в адресной строке, мой http://gho.hakase-labs.io/
И вы получите домашнюю страницу ghost.

Теперь посетите страницу администратора, чтобы настроить и сконфигурировать нового администратора. Мой URL: http://gho.hakase-labs.io/admin/
Нажмите зеленую кнопку, чтобы создать нового администратора.

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

Чтобы пригласить нового участника или пользователя, нажмите ссылку ‘Я сделаю это позже..’.

Теперь вы получите панель управления Ghost.

И после создания образца поста результат будет следующим.

Установка блога Ghost с базой данных MySQL и обратным прокси Traefik в среде Docker была успешно завершена.
Ссылки
Get new posts in your inbox
No spam. Unsubscribe anytime.