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

Что мы будем делать

  1. Установить Docker CE на Ubuntu 18.04 LTS
  2. Настроить Docker для пользователя без прав root
  3. Установить Docker Compose
  4. Настроить стек Ghost - создать пользовательскую сеть
  • Создать каталог проекта
  • Создать и настроить контейнер MySQL
  • Создать и настроить обратный прокси Traefik
  • Создать и настроить контейнер Ghost
  1. Развернуть Ghost с MySQL и Traefik
  2. Тестирование

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

Установка Docker CE

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

Настройка Docker для пользователя без прав root

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

su - hakase  
docker run -it hello-world

И вот результат.

Тестирование docker как пользователя без прав root

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

Docker compose был установлен - проверьте это, используя команду ниже.

docker-compose version  
docker version

Установка Docker Compose

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

Сохраните и выйдите.

Создание и настройка службы Ghost

И теперь у нас есть все каталоги и конфигурации, как показано ниже.

tree

конфигурационные файлы

Шаг 5 - Развернуть Ghost с MySQL и Traefik

Чтобы собрать и запустить все наши службы стека ghost, мы можем использовать команду ниже.

docker-compose up -d

Развертывание Ghost с MySQL и Traefik

Когда это завершится, проверьте все работающие службы.

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.

панель управления Traefik

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

И вы получите домашнюю страницу ghost.

Блог Ghost, работающий на Docker

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

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

Установщик Ghost

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

Создать вход администратора

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

Пригласить пользователей

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

Панель управления Ghost

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

Блог Ghost, работающий в контейнере Docker

Установка блога Ghost с базой данных MySQL и обратным прокси Traefik в среде Docker была успешно завершена.

Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.