Загрузка...
Загрузка...
Готовые конфигурации Docker Compose для WordPress, Node.js, PHP. Локальная разработка, базы данных, кэш. Копируй и адаптируй под свой проект.
Готовые cron-задачи для бэкапов, очистки кэша, рассылок, синхронизации. WordPress, Laravel, Node.js. Копируй и адаптируй под свой проект.
DevOpsПолное руководство по Docker Compose. Синтаксис YAML, сервисы, сети, volumes, переменные окружения. Практические примеры для разработки и продакшена.
DevOpsСравнение YAML и JSON: синтаксис, преимущества, конвертация. Примеры для Docker Compose, Kubernetes, CI/CD. Онлайн-конвертер YAML ↔ JSON.
РазработкаПодробное руководство по онлайн-тестированию PHP: инструменты, ограничения, безопасность и практические сценарии использования. Сравнение с локальной разработкой.
Поделитесь с коллегами или изучите другие материалы блога
Готовые стеки Docker Compose экономят часы настройки окружения. В этой статье — проверенные конфигурации для популярных технологий веб-разработки: WordPress, Node.js, PHP. Каждый пример можно скопировать и адаптировать под свой проект. Для генерации кастомных конфигураций используйте Docker Compose Builder на reChecker.
Классический стек: WordPress, MySQL 8, phpMyAdmin. Данные сохраняются в volumes.
services:
wordpress:
image: wordpress:6.4-php8.2-apache
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
depends_on:
- db
networks:
- wp
db:
image: mysql:8.0
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
MYSQL_ROOT_PASSWORD: rootpass
volumes:
- mysql_data:/var/lib/mysql
networks:
- wp
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 5s
timeout: 3s
retries: 5
phpmyadmin:
image: phpmyadmin:latest
ports:
- "8081:80"
environment:
PMA_HOST: db
PMA_USER: wordpress
PMA_PASSWORD: wordpress
depends_on:
db:
condition: service_healthy
networks:
- wp
volumes:
wordpress_data:
mysql_data:
networks:
wp:
driver: bridge
Запуск: docker compose up -d. WordPress доступен на http://localhost:8080, phpMyAdmin — на http://localhost:8081.
Подключите папки с плагинами и темами для разработки:
wordpress:
volumes:
- wordpress_data:/var/www/html
- ./plugins:/var/www/html/wp-content/plugins/custom
- ./themes:/var/www/html/wp-content/themes/custom
Стек для современного приложения: Node.js, PostgreSQL, Redis. Подходит для Express, NestJS, Fastify.
services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
environment:
NODE_ENV: development
DATABASE_URL: postgresql://app:apppass@db:5432/appdb
REDIS_URL: redis://redis:6379
volumes:
- .:/app
- /app/node_modules # исключить node_modules из sync
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
networks:
- appnet
command: npm run dev
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: apppass
POSTGRES_DB: appdb
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
networks:
- appnet
healthcheck:
test: ["CMD-SHELL", "pg_isready -U app -d appdb"]
interval: 5s
timeout: 3s
retries: 5
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
networks:
- appnet
volumes:
postgres_data:
redis_data:
networks:
appnet:
driver: bridge
Пример минимального Dockerfile для Node.js:
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
Volume .:/app монтирует исходники для hot-reload. Анонимный volume /app/node_modules предотвращает перезапись node_modules с хоста.
Стек для Laravel, Symfony или чистого PHP: PHP-FPM, Nginx, MySQL.
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- .:/var/www/html
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- php
networks:
- phpnet
php:
image: php:8.2-fpm-alpine
volumes:
- .:/var/www/html
environment:
- PHP_MEMORY_LIMIT=256M
networks:
- phpnet
depends_on:
db:
condition: service_healthy
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: appdb
MYSQL_USER: app
MYSQL_PASSWORD: apppass
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
networks:
- phpnet
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 5s
timeout: 3s
retries: 5
volumes:
mysql_data:
networks:
phpnet:
driver: bridge
Конфигурация Nginx для PHP-FPM (nginx.conf):
server {
listen 80;
server_name localhost;
root /var/www/html/public;
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_hide_header X-Powered-By;
}
}
Для Laravel замените root на /var/www/html/public. Установите расширения PHP в Dockerfile при необходимости (pdo_mysql, mbstring, opcache и т.д.).
Фронтенд и бэкенд в одном compose-файле. Фронтенд в dev-режиме с hot-reload.
services:
api:
build:
context: ./api
dockerfile: Dockerfile
ports:
- "4000:4000"
environment:
NODE_ENV: development
DATABASE_URL: postgresql://app:pass@db:5432/appdb
volumes:
- ./api:/app
- /app/node_modules
depends_on:
db:
condition: service_healthy
networks:
- fullstack
frontend:
image: node:20-alpine
working_dir: /app
ports:
- "5173:5173"
volumes:
- ./frontend:/app
- /app/node_modules
command: sh -c "npm install && npm run dev -- --host"
networks:
- fullstack
environment:
- VITE_API_URL=http://localhost:4000
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: pass
POSTGRES_DB: appdb
volumes:
- pgdata:/var/lib/postgresql/data
networks:
- fullstack
healthcheck:
test: ["CMD-SHELL", "pg_isready -U app"]
interval: 5s
retries: 5
volumes:
pgdata:
networks:
fullstack:
driver: bridge
Структура проекта:
.
├── api/
│ ├── Dockerfile
│ └── ...
├── frontend/
│ ├── package.json
│ └── ...
├── docker-compose.yml
└── nginx.conf
Дополнение к PHP-стеку — Redis для сессий, кэша и очередей (Laravel Queue, Symfony Messenger).
services:
php:
# ... как в примере выше
environment:
REDIS_HOST: redis
REDIS_PORT: 6379
SESSION_DRIVER: redis
CACHE_DRIVER: redis
QUEUE_CONNECTION: redis
depends_on:
- redis
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
networks:
- phpnet
command: redis-server --appendonly yes
queue:
build:
context: .
dockerfile: Dockerfile
command: php artisan queue:work --sleep=3 --tries=3
volumes:
- .:/var/www/html
depends_on:
- php
- redis
networks:
- phpnet
volumes:
redis_data:
Отдельный контейнер queue обрабатывает фоновые задачи. Для Laravel Horizon замените команду на php artisan horizon.
.env, добавьте его в .gitignorepostgres:16-alpine лучше, чем postgres:latestБазовые концепции Docker Compose описаны в полном руководстве по Docker Compose. Для быстрой сборки конфигурации под ваш стек используйте Docker Compose Builder на reChecker.