Docker для WordPress: установка WordPress в контейнерах - Компьюти
Logo КОМПЬЮТИ

Docker для WordPress: установка WordPress в контейнерах

Время на прочтение: 2 мин.

Docker удобно использовать для запуска WordPress вместе с базой данных. Такой подход позволяет изолировать компоненты сайта и описать инфраструктуру в Docker Compose.

Типовая архитектура:

Internet
   |
 Nginx
   |
WordPress
   |
MySQL/MariaDB

При этом файлы WordPress и база данных должны храниться вне эфемерного слоя контейнеров.

Что понадобится

Минимальный стек:

  • WordPress;
  • MariaDB или MySQL;
  • Docker;
  • Docker Compose;
  • volumes.

При необходимости перед WordPress можно добавить Nginx.

Пример compose.yaml

services:
  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: change-me
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wordpress-data:/var/www/html
    depends_on:
      - db
    restart: unless-stopped

  db:
    image: mariadb:latest
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: change-me
      MYSQL_ROOT_PASSWORD: change-root-password
    volumes:
      - db-data:/var/lib/mysql
    restart: unless-stopped

volumes:
  wordpress-data:
  db-data:

Для production нельзя оставлять демонстрационные пароли и желательно фиксировать проверенные версии образов.

Запуск

Создаем каталог:

mkdir wordpress
cd wordpress

Создаем:

compose.yaml

Запускаем:

docker compose up -d

Проверяем:

docker compose ps

Логи:

docker compose logs -f

После запуска сайт будет доступен по адресу:

http://localhost:8080

Как WordPress подключается к базе

В Compose сервис базы называется:

db

Поэтому:

WORDPRESS_DB_HOST: db

WordPress обращается к MariaDB по внутренней Docker-сети.

Использовать localhost здесь неправильно.

Подробнее о сетях — в статье «Docker networks».

Почему нужны volumes

WordPress хранит данные на файловой системе:

/var/www/html

Если не сохранить их отдельно, пересоздание контейнера может привести к потере файлов.

Поэтому:

volumes:
  - wordpress-data:/var/www/html

Для базы:

volumes:
  - db-data:/var/lib/mysql

Volumes существуют отдельно от контейнера. Подробнее — в статье «Docker volumes».

Backup WordPress

Нужно резервировать две основные категории данных:

  1. файлы WordPress;
  2. база данных.

Backup только файлов сайта недостаточен.

Например, базу можно выгрузить средствами СУБД, а пользовательские файлы — архивировать отдельно.

Подробнее — в статье «Docker backup».

WordPress и Nginx

Для production часто используется схема:

Internet
   |
 Nginx
   |
WordPress/PHP
   |
MariaDB

Nginx может отвечать за:

  • TLS;
  • HTTP;
  • статические файлы;
  • проксирование;
  • ограничения запросов.

Подробнее — в статье «Docker для Nginx».

HTTPS

Для production-сайта нужен HTTPS.

Обычно TLS завершается на reverse proxy — например, Nginx — либо используется внешний балансировщик/прокси.

Не стоит выставлять административные сервисы и базу данных непосредственно в интернет.

Обновление WordPress

Перед обновлением:

  1. сделать backup;
  2. проверить доступность backup;
  3. обновить WordPress;
  4. проверить плагины и тему;
  5. проверить сайт.

В Docker также необходимо отдельно контролировать обновление образа.

Использование latest

Для production не стоит бездумно использовать:

image: wordpress:latest

Новая версия образа может изменить поведение приложения.

Лучше заранее выбрать поддерживаемую версию и обновлять ее контролируемо.

Типичные ошибки

Нет volume

Данные могут быть потеряны при пересоздании контейнера.

База доступна из интернета

Не публикуйте порт базы без необходимости.

Пароли записаны в Git

Используйте защищенное хранение секретов и не коммитьте реальные credentials.

Нет backup

Docker не является системой резервного копирования.

Итог

Docker позволяет собрать WordPress в воспроизводимый стек и быстро развернуть его на другом сервере.

Для production необходимо отдельно продумать:

  • версии образов;
  • volumes;
  • backup;
  • HTTPS;
  • Nginx;
  • безопасность;
  • обновления;
  • мониторинг.

Читайте также:


Читайте также:

Приглашаем поучаствовать в обсуждении статьи:

Комментариев 0