TGViewer
Записки IT специалиста Записки IT специалиста @interface31 · 8.99K subscribers
Post #5913 2.83K
Быстрая установка 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 рекомендуемые разработчиками вне зависимости от вашей хостовой системы.
  • 👍 24
  • 🔥 6
  • ⚡ 1
More from @interface31
  1. Sep 29, 2026Как легко и просто «сломать» информационную базу 1С:Предприятие, не снимая «замочка» и нич…
  2. Sep 29, 2026👆 AI-сервисы развиваются быстрее, чем способы их оплачивать. Если вы используете зарубежн…
  3. Sep 29, 2026Старое железо – путь в никуда Каждый раз при разговоре о старых системах приходится слышат…
  4. Sep 29, 2026Что крупные заказчики проверяют на пилоте NGFW Чем крупнее сеть, тем выше требования к NGF…
  5. Sep 28, 2026Как провайдер определит, что у меня Mikrotik Таким вопросом задаются многие читатели и оче…
  6. Sep 28, 2026Ностальгия… Ностальгия… - Мы тут тебе старенький компьютер привезем… Старенький, что сейча…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →