Добавить в корзинуПозвонить
Найти в Дзене

Быстрая установка Wordpress + PHP-FPM + Caddy с кешированием Redis в Docker

Сегодня заказчик поставил вопрос – а можно ли сделать сайт на Wordpress «нормально», без постоянной свистопляски с версиями PHP и прочего. Потому как не все хостеры предоставляют VPS на свежих версиях системы, а ручное обновление PHP часто приводит к проблемам. Можно, конечно, только придется пойти другим путем, с использованием Docker, который все свое носит с собой. И не важно какие там версии в репозиториях. В качестве веб-сервера вместо привычного NGINX мы давно выбираем Caddy, за более простую и прозрачную работу с шифрованием, которая снимает с администратора эту головную боль. Ну и раз мы решили все делать по-современному, то почему бы сразу не добавить объектный кеш на Redis? В итоге получился такой файл docker-compose.yml: services: db: image: mariadb:10.11 container_name: wp_db restart: always environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} volumes: - db_data:/var/lib/m

Быстрая установка Wordpress + PHP-FPM + Caddy с кешированием Redis в Docker

Сегодня заказчик поставил вопрос – а можно ли сделать сайт на Wordpress «нормально», без постоянной свистопляски с версиями PHP и прочего. Потому как не все хостеры предоставляют VPS на свежих версиях системы, а ручное обновление PHP часто приводит к проблемам.

Можно, конечно, только придется пойти другим путем, с использованием Docker, который все свое носит с собой. И не важно какие там версии в репозиториях.

В качестве веб-сервера вместо привычного NGINX мы давно выбираем Caddy, за более простую и прозрачную работу с шифрованием, которая снимает с администратора эту головную боль.

Ну и раз мы решили все делать по-современному, то почему бы сразу не добавить объектный кеш на Redis?

В итоге получился такой файл docker-compose.yml:

services:

db:

image: mariadb:10.11

container_name: wp_db

restart: always

environment:

MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}

MYSQL_DATABASE: ${MYSQL_DATABASE}

MYSQL_USER: ${MYSQL_USER}

MYSQL_PASSWORD: ${MYSQL_PASSWORD}

volumes:

- db_data:/var/lib/mysql

redis:

image: redis:alpine

container_name: wp_redis

restart: always

command: redis-server --maxmemory 256mb --maxmemory-policy allkeys-lru

wordpress:

image: wordpress:fpm

container_name: wp_app

restart: always

environment:

WORDPRESS_DB_HOST: db

WORDPRESS_DB_USER: ${MYSQL_USER}

WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}

WORDPRESS_DB_NAME: ${MYSQL_DATABASE}

WORDPRESS_CONFIG_EXTRA: |

define('WP_REDIS_HOST', 'redis');

volumes:

- wp_data:/var/www/html

- ./php.ini:/usr/local/etc/php/conf.d/php.ini

depends_on:

- db

- redis

caddy:

image: caddy:latest

container_name: wp_caddy

restart: always

ports:

- "80:80/tcp"

- "443:443/tcp"

- "443:443/udp"

environment:

MY_DOMAIN: ${MY_DOMAIN}

volumes:

- ./Caddyfile:/etc/caddy/Caddyfile

- wp_data:/var/www/html

- caddy_data:/data

- caddy_config:/config

depends_on:

- wordpress

volumes:

db_data:

wp_data:

caddy_data:

caddy_config:

Там же создаем файл с переменными окружения .env:

MYSQL_ROOT_PASSWORD=your_secure_root_password

MYSQL_DATABASE=wordpress

MYSQL_USER=wp_user

MYSQL_PASSWORD=wp_password

MY_DOMAIN=example.com

Файл конфигурации веб-сервера Caddyfile, если для тестирования нужен самоподписанный сертификат, то раскомментируйте опцию tls internal:

{$MY_DOMAIN} {

#tls internal

root * /var/www/html

php_fastcgi wordpress:9000

file_server

# Сжатие

encode zstd gzip

# Кэширование статики (картинки, шрифты, стили, скрипты)

@static {

file

path *.ico *.css *.js *.gif *.jpg *.jpeg *.png *.svg *.woff *.woff2 *.webp

}

header @static Cache-Control "public, max-age=31536000, must-revalidate"

header {

X-Frame-Options "SAMEORIGIN"

X-Content-Type-Options "nosniff"

Referrer-Policy "strict-origin-when-cross-origin"

}

}

И файл кастомных параметров PHP-FPM php.ini, в котором мы переопределили лимиты загрузки файлов и лимит памяти.

upload_max_filesize = 64M

post_max_size = 64M

memory_limit = 256M

Запускаем все это командой:

docker compose up -d

Ждем пока все соберется и поднимется, потом переходим по доменному имени и выполняем стандартную установку Wordpress, чтобы заработал объектный кеш – установите плагин Redis Object Cache и активируйте его.

На этом все, мы получили быстрый и современный Wordpress, который будет всегда использовать последние версии PHP рекомендуемые разработчиками вне зависимости от вашей хостовой системы.

-2
-3
-4