WordPress в Docker: Nginx, MariaDB и Redis на Ubuntu

Стек WordPress + Nginx + MariaDB + Redis в Docker удобен для изолированной среды: один docker compose, тома с данными, быстрый подъём на Ubuntu. Ниже рабочий каркас: compose-файл, конфиг Nginx, Redis Object Cache. Пароли в примере учебные: на проде замените и не коммитьте секреты в открытый git.

Docker и Compose на Ubuntu

Проверка:

docker --version
docker compose version

Если Docker ещё не стоит, на современной Ubuntu проще официальный репозиторий Docker (пакет docker-ce и плагин Compose v2). Старый бинарь docker-compose 1.x тоже встречается; команды ниже совместимы с вызовом docker compose (через пробел) или docker-compose.

sudo apt update
sudo apt install docker.io -y
# при необходимости Compose v1:
# sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# sudo chmod +x /usr/local/bin/docker-compose

docker-compose.yml

Четыре сервиса: PHP-FPM WordPress, Nginx, MariaDB, Redis. Образы лучше зафиксировать тегами (не только latest). Пример для старта:

services:
  wordpress:
    image: wordpress:php8.2-fpm
    volumes:
      - wordpress_data:/var/www/html
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
    depends_on:
      - db
      - redis

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
      - wordpress_data:/var/www/html:ro
    depends_on:
      - wordpress

  db:
    image: mariadb:11
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  redis:
    image: redis:alpine

volumes:
  wordpress_data:
  db_data:
  • wordpress: PHP-FPM, без встроенного Apache; статика и proxy у Nginx.
  • nginx: порт 80 наружу, конфиг и файлы сайта с тома.
  • db: MariaDB, данные в named volume.
  • redis: object cache (после плагина в WP).

nginx.conf

Файл рядом с compose. В alpine-образе нет snippets/fastcgi-php.conf как на Debian, параметры fastcgi задаём явно:

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$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass wordpress:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

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

Запуск

docker compose up -d
# или: docker-compose up -d

Флаг -d запускает в фоне. Логи при проблемах:

docker compose logs -f
docker compose ps

Проверка

Откройте http://localhost (или IP сервера). Должен появиться мастер установки WordPress. Если 502: смотрите, поднялся ли FPM и совпадает ли имя сервиса в fastcgi_pass с compose.

Redis Object Cache

В админке: «Плагины» → найти Redis Object Cache → установить и активировать. Хост Redis в этой схеме: имя сервиса redis, порт 6379. Включите object cache в настройках плагина; при ошибке подключения проверьте, что контейнер redis в той же сети compose (по умолчанию так и есть).

На прод

  • Сложные пароли и переменные из .env, не из открытого yaml в репозитории.
  • HTTPS: reverse proxy на хосте или контейнер с certbot / traefik / caddy.
  • Бэкап томов db_data и wordpress_data (дамп MariaDB + rsync/снапшоты).
  • Периодически обновляйте образы и ядро WP, следите за CVE.

Итог: compose поднимает полный контур WordPress с Nginx и MariaDB, Redis подключается плагином object cache. Для локалки и стейджа схемы достаточно; на проде добавьте секреты, TLS и бэкапы томов.

Источники и ссылки


Комментарии загружаются…