Как развернуть блог-призрак с помощью Docker
Ghost — это популярная платформа для создания контента, написанная на JavaScript с помощью Node.js. Программное обеспечение с открытым исходным кодом поставляется со всем необходимым для создания, оформления, публикации и ведения собственного блога.
Ghost — это программное обеспечение с открытым исходным кодом, поддерживаемое официальной службой Ghost(Pro). Вы можете установить его на свой собственный сервер, добавив Node.js и используя Ghost CLI для настройки своего стека. Ghost также доступен в виде образа Docker, который объединяет все зависимости для вас.
В этом руководстве мы будем использовать Docker, чтобы быстро запустить новый блог Ghost. Прежде чем продолжить, установите Docker и Docker Compose на свой хост. Хотя вы можете развернуть Ghost, используя только Docker, Compose упрощает предоставление и управление значениями конфигурации, которые потребуются вашему сайту для начала работы.
Запуск контейнера-призрака
Вы можете запустить базовый сайт Ghost с помощью одной команды Docker:
docker run -d -p 2368:2368 --name simple-ghost ghost:4
При этом Ghost будет подключен к порту по умолчанию 2368. Посетите http://localhost:2368
, чтобы просмотреть свой сайт, или http://localhost:2368/ghost
, чтобы получить доступ панель администратора Ghost. Вам нужно будет указать некоторые настройки первого запуска, чтобы завершить установку Ghost и создать начальную учетную запись пользователя.
Этот подход отлично подходит для быстрых экспериментов, если вы только пробуете Ghost. Однако мы еще не настроили постоянное хранилище, поэтому ваши данные будут потеряны при остановке контейнера.
Вот более полный пример, в котором Docker Compose используется для настройки Ghost с томом Docker. Смонтируйте том в каталог /var/lib/ghost/content
, чтобы хранить данные Ghost вне контейнера.
version: "3" services: ghost: image: ghost:4 ports: - 8080:2368 environment: url: https://ghost.example.com volumes: - ghost:/var/lib/ghost/content restart: unless-stopped volumes: ghost:
Этот файл Compose демонстрирует несколько других изменений в конфигурации контейнера. Порт 2368, предоставляемый контейнером, сопоставляется с портом 8080 на вашем хосте, что позволяет вам использовать localhost:8080
для доступа к Ghost. Политика перезапуска изменена на unless-stopped
, чтобы ваш сайт автоматически открывался после перезагрузки хоста.
Теперь используйте Compose, чтобы открыть свой сайт:
docker-compose up -d
Настройка призрака
Ghost поддерживает несколько параметров конфигурации для настройки его работы и настройки вашего сайта. Когда вы используете Docker, вы можете указать эти значения как переменные среды.
Файлы конфигурации Ghost используют вложенные объекты JSON для хранения значений. Вы можете преобразовать ключи JSON в их аналоги переменных среды, заменив каждый уровень дерева символами __
(двойное подчеркивание):
# in a JSON config file
{
"mail": {
"transport": "SMTP"
}
}
# as an environment variable
mail__transport=SMTP
Используйте поле environment
в файле docker-compose.yml
, чтобы указать следующие параметры для контейнера Ghost:
version: "3" services: ghost: environment: mail__transport: SMTP
Обратитесь к документации Ghost за исчерпывающим списком поддерживаемых опций. Вы можете настроить почтовую систему, использовать отдельный URL-адрес для доступа к панели администратора, переопределить пути к каталогам и переключить параметры конфиденциальности с помощью доступных переменных среды.
Параметр url
особенно важен, поскольку он требуется для рабочих сайтов. Это определяет URL-адрес, который внешние посетители будут использовать для доступа к вашему сайту. Установите это на доменное имя вашего сайта в вашем docker-compose.yml
:
environment: url: https://ghost.example.com
Использование внешней базы данных
По умолчанию Ghost использует базу данных SQLite, которая хранится в виде файла в каталоге содержимого вашего сайта. Он будет сохранен как часть тома Docker, созданного выше. Вместо этого вы можете использовать внешнюю базу данных MySQL, указав сведения о подключении через переменные среды с префиксом database
:
services: ghost: # ... environment: database__client: mysql database__connection__host: ghost_mysql database__connection__user: root database__connection__password: databasePw database__connection__database: ghost ghost_mysql: image: mysql:5.7 expose: - 3306 environment: MYSQL_DATABASE: ghost MYSQL_ROOT_PASSWORD: databasePw volumes: - mysql:/var/lib/mysql restart: unless-stopped volumes: mysql:
Этот файл Compose включает другую службу, которая запускает MySQL в дополнительном контейнере. Переменные среды устанавливаются в службе Ghost для предоставления сведений о соединении с MySQL. Для сохранения файлов хранилища базы данных создается отдельный том mysql
.
Compose автоматически связывает сервисы с сетью Docker. Ghost может получить доступ к контейнеру ghost_mysql
, используя имя службы в качестве имени хоста. Если вы хотите использовать существующую базу данных MySQL без Dockerized, вы можете удалить определение службы ghost_mysql
и указать вместо него IP-адрес вашего сервера MySQL, имя схемы базы данных и учетные данные пользователя.
Проксирование трафика в ваш контейнер
Теперь ваш сайт Ghost должен работать, но он по-прежнему доступен через порт 8080. Если вы не будете запускать что-либо еще на своем хосте, вы можете вместо этого привязать порт 80 или 443, чтобы сделать его напрямую доступным через доменное имя вашего сервера. В других ситуациях используйте обратный прокси-сервер, например NGINX, для перенаправления трафика из Интернета в контейнер Ghost.
Добавьте NGINX на свой хост:
sudo apt update
sudo apt install nginx
# Allow HTTP/HTTPS traffic through the firewall
sudo ufw allow 80
sudo ufw allow 443
Определите хост NGINX для своего сайта в /etc/nginx/sites-available/ghost.example.com
:
server {
server_name ghost.example.com;
index index.html;
access_log /var/log/nginx/ghost_access.log
error_log /var/log/nginx/ghost_error.log error;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Original-IP $remote_addr;
}
}
Этот файл настраивает NGINX для перенаправления трафика на ghost.example.com
через порт 8080 на localhost
, который ранее был привязан к вашему контейнеру Ghost. Включите новый файл конфигурации, связав его с каталогом sites-enabled
NGINX:
sudo ln -s /etc/nginx/sites-available/ghost.example.com /etc/nginx/sites-enabled/ghost.example.com
Перезапустите NGINX, чтобы применить изменения:
sudo service nginx restart
Теперь вы можете настроить SSL с помощью бесплатного сервиса Let’s Encrypt. Добавьте Certbot от Let’s Encrypt для автоматизации выдачи и обновления сертификатов:
sudo apt install certbot
Используйте Certbot для получения сертификатов для вашего сайта NGINX:
sudo certbot --nginx
Certbot прочитает ваши сайты NGINX и сгенерирует сертификаты для их полей конфигурации server_name
. Он автоматически перенастроит NGINX для обслуживания сертификата на вашем сайте. Теперь вы сможете получить доступ к своему блогу Ghost, посетив свое доменное имя через HTTPS.
Хотя в этой статье мы сосредоточились на NGINX, существуют и другие варианты проксирования веб-трафика через ваш контейнер Ghost. Traefik — ведущий претендент, получивший первоклассную поддержку Docker. Развертывание экземпляра Traefik позволит вам настроить маршрутизацию и автоматический SSL с помощью меток Docker, которые вы установили в своем контейнере Ghost.
Управление обновлениями Ghost
Вы можете обновить Ghost, заменив контейнер Docker вашего сайта на новый с обновленной версией образа Ghost. Поскольку содержимое вашего сайта безопасно хранится в отдельном томе Docker, оно будет сохранено при повторном подключении тома к новому контейнеру.
Если вы помечаете основную версию образа в файле docker-compose.yml
, например ghost:4
, вы можете выполнить обновление до последней дополнительной версии, запустив docker-compose up
с флагом --pull
:
docker-compose up -d --pull
Это указывает Compose проверять наличие изменений в теге изображения и извлекать обновленную версию, когда она доступна. Он заменит ваши контейнеры новыми экземплярами, используя последнюю версию образа, соответствующую тегу.
Если вы хотите изменить используемый тег, обновите ссылку image
в файле docker-compose.yml
. Повторите docker-compose up -d
, чтобы извлечь образ и запустить новые контейнеры. Например, если Ghost v5 выйдет в будущем, вы можете изменить свой docker-compose.yml
на image: ghost:5
, чтобы перейти на новую основную версию.
Docker упрощает получение обновлений Ghost, загружая последний образ и заменяя ваши контейнеры. Тем не менее, вы все равно должны обращать внимание на изменения, которые вы применяете. Проконсультируйтесь с журналом изменений Ghost, прежде чем приступать к серьезному обновлению, если вам нужно предпринять дополнительные шаги для завершения миграции.
Использование Ghost-Cli
ghost-cli
доступен в образе Ghost Docker. Эта утилита используется для настройки и обслуживания Ghost, когда он установлен в традиционных неконтейнерных средах.
Вы можете получить доступ к ghost-cli
через Docker, используя команду ghost
с docker exec
. Вот пример, который использует подкоманду version
, чтобы показать версию Ghost, которую вы используете:
docker exec -it my-ghost-container ghost version
Хотя многие компоненты ghost-cli
будут работать, некоторые из них не поддерживаются в Dockerized средах. Такие команды, как install
, setup
, update
и uninstall
, либо не работают, либо бессмысленны, либо противоречат рекомендациям. при использовании с образом Ghost Docker. Ghost и все его зависимости встроены в образ, и их не нужно «устанавливать»; обновления следует применять, запуская новый контейнер, как показано выше.
Краткое содержание
Ghost — это современная платформа для ведения блогов, которая предлагает чистую панель инструментов, широкие возможности для создания контента, а также расширенную поддержку тем и настроек. Использование Docker для размещения Ghost упрощает процедуру установки, уменьшает количество необходимых пакетов ОС и помогает сделать ваш сайт более переносимым в разных средах.
Как только ваш Dockerized блог заработает, используйте стандартную документацию по разработке Ghost для управления своим сайтом и его содержимым. Вы можете настроить членство, информационные бюллетени, пользовательские темы и интеграцию API, используя встроенные функции платформы.