Как запустить WordPress в контейнере Docker с настройкой Nginx

Запуск WordPress в контейнере Docker — отличное решение для изоляции и удобного управления окружением сайта. Это позволяет быстро разворачивать тестовые и боевые версии, легко переносить сайт между серверами, а также автоматизировать обновления и резервное копирование.

Почему стоит использовать Docker для WordPress

Docker изолирует приложение и все его зависимости в контейнере, что избавляет от проблем с несовместимостью версий PHP, MySQL и других компонентов. Кроме того, контейнеры легко масштабировать и интегрировать в CI/CD процессы.

Использование Docker вместе с Nginx повышает производительность и безопасность: Nginx выступает обратным прокси-сервером, эффективно обрабатывающим запросы, отдающим статику и проксирующим динамические запросы к PHP.

Обзор архитектуры контейнеров

Минимально для работы WordPress в Docker нужны два контейнера:

  • WordPress — содержит PHP и саму CMS;
  • База данных — обычно MySQL или MariaDB;
  • Nginx — обратный прокси, который может запускаться в отдельном контейнере или на хосте.

Для удобства развертывания рекомендуем использовать docker-compose, который позволяет описать всю связку в одном YAML-файле.

Пример docker-compose.yml для WordPress с Nginx

Ниже пример конфигурации с тремя сервисами: wordpress, db и nginx.

version: '3.8'
services:
  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpressuser
      MYSQL_PASSWORD: wordpresspass
      MYSQL_ROOT_PASSWORD: rootpass
    volumes:
      - db_data:/var/lib/mysql

  wordpress:
    image: wordpress:php7.4-fpm
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpressuser
      WORDPRESS_DB_PASSWORD: wordpresspass
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - ./wordpress:/var/www/html
    depends_on:
      - db

  nginx:
    image: nginx:latest
    restart: always
    ports:
      - 8080:80
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./wordpress:/var/www/html
    depends_on:
      - wordpress

volumes:
  db_data:

Конфигурация Nginx для WordPress

Создайте файл ./nginx/conf.d/default.conf со следующим содержимым:

server {
    listen 80;
    server_name localhost;

    root /var/www/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass wordpress:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

Здесь Nginx отдаёт статику напрямую, а PHP-запросы передаёт в контейнер с WordPress (php-fpm) на порту 9000. Обратите внимание, что в fastcgi_pass используется имя сервиса wordpress, что позволяет Docker DNS разрешать адрес.

Запуск и проверка

В терминале в каталоге с docker-compose.yml выполните:

docker-compose up -d

Через пару секунд WordPress будет доступен по адресу http://localhost:8080. Перейдите по ссылке и пройдите стандартную установку CMS.

Оптимизация и безопасность

Для продакшена рекомендуем:

  • Разделять тома для данных WordPress и базы, делать регулярные бэкапы;
  • Использовать отдельный контейнер с Redis или Memcached для кеширования;
  • Настроить SSL (например, с помощью OmniVideo можно интегрировать видео с HTTPS);
  • Ограничить доступ по IP к базе данных;
  • Следить за обновлениями образов и своевременно обновлять их.

Пример кастомной функции для автоматического сброса кэша при обновлении записи

Если на сайте используется плагин кеширования, можно автоматически очищать кеш при обновлении поста через Docker-окружение. Вот пример функции в functions.php темы:

function wpsource_clear_cache_on_post_update($post_id) {
    if (defined('WP_CLI') && WP_CLI) return;
    // Пример: очистка кеша через вызов shell команды внутри контейнера
    exec('docker exec wordpress_container_name wp cache flush');
}
add_action('save_post', 'wpsource_clear_cache_on_post_update');

Замените wordpress_container_name на имя вашего контейнера WordPress.

Заключение

Использование Docker с Nginx — мощное и гибкое решение для работы с WordPress. Такой подход упрощает развертывание, повышает стабильность и позволяет быстро масштабировать проект. Следуйте рекомендациям по безопасности, чтобы избежать уязвимостей.

Как использовать REST API для создания кастомных эндпоинтов в WordPress
22.12.2025
Как использовать WP-Cron для автоматизации задач в WordPress: практические примеры
25.04.2026
Как отключить Emoji в WordPress эффективно и без плагинов
29.12.2025
Динамические отзывы с подтверждением покупателей в WordPress: практическое руководство
12.04.2026
WooCommerce: как отправлять уведомления о заказах по email без плагинов
29.04.2026