Классическая Docker-структура для WordPress с указанными компонентами:
- Nginx: 1.26.3
- PHP: 8.2.28-fpm
- MySQL: 5.7
- WordPress: 6.6.2 (актуальная стабильная версия)
- Docker: 27.4.0
- Docker Compose: 2.31.0
www/
├── docker-compose.yml # Основная конфигурация Docker
├── .env # Переменные окружения
├── .cursorrules # Инструкции для Copilot (Docker v27.4.0, Compose v2.31.0)
├── .gitignore # Исключаемые файлы из git
├── deployment-scripts/ # 🚀 Скрипты деплоя (запускаются с хоста!)
│ ├── deploy-dev.sh # Деплой на DEV
│ ├── deploy-prod.sh # Деплой на PROD
│ ├── rollback.sh # Откат
│ ├── hotfix.sh # Срочный hotfix
│ ├── pre-deployment-checklist.sh
│ ├── smoke-tests.sh
│ └── utils/
├── docs/ # 📚 Документация
│ ├── DEPLOYMENT_GUIDE.md # Полный гайд по деплою
│ ├── CI_CD_DEPLOYMENT_PLAN.md
│ └── GIT_HOOKS_SETUP.md
├── nginx/
│ ├── nginx.conf # Основная конфигурация Nginx
│ └── default.conf # Конфигурация виртуального хоста
├── php/
│ ├── Dockerfile # Кастомный образ PHP с расширениями
│ └── php.ini # Конфигурация PHP
├── mysql/
│ └── my.cnf # Конфигурация MySQL
├── wordpress/ # Файлы WordPress
└── logs/ # Логи всех сервисов
├── nginx/
├── php/
└── mysql/
Важно: В проекте используется Docker версии 27.4.0 и Docker Compose версии 2.31.0. Все команды должны выполняться с docker compose (с пробелом), а не docker-compose.
Проект поддерживает развертывание на два сервера: DEV (dev.maslovka.org) и PROD (maslovka.org).
Все настройки серверов (адреса, credentials, пути) хранятся в файле deployment-scripts/config.sh. Этот файл не коммитится в Git для безопасности.
Структура конфигурации:
- DEV сервер: dev.maslovka.org
- PROD сервер: maslovka.org
- Параметры включают SSH доступ, пути к файлам, настройки базы данных
Первоначальная настройка:
cd deployment-scripts
cp config.example.sh config.sh
# Отредактируйте config.sh с реальными данными
chmod 600 config.sh-
Initial Deploy (первый раз на сервере)
- Загружает полный WordPress через rsync
- Инициализирует Git на сервере
- Команды:
./initial-deploy.sh devили./initial-deploy.sh prod
-
Regular Deploy (обновления)
- Инкрементальные обновления через Git
- Быстрый деплой с проверками
- Команды:
./deploy-dev.shили./deploy-prod.sh
# Первый деплой на DEV
./deployment-scripts/initial-deploy.sh dev
# Первый деплой на PROD
./deployment-scripts/initial-deploy.sh prod
# Регулярный деплой на DEV
./deployment-scripts/deploy-dev.sh
# Регулярный деплой на PROD
./deployment-scripts/deploy-prod.sh
# Откат к предыдущей версии
./deployment-scripts/rollback.sh
# Быстрый хотфикс
./deployment-scripts/hotfix.sh📚 Подробная документация:
- DEPLOYMENT_GUIDE.md — полное руководство
- DEPLOYMENT_CHEATSHEET.md — шпаргалка
- INITIAL_DEPLOY_GUIDE.md — первоначальный деплой
Файл .cursorrules содержит инструкции для Copilot и других AI-ассистентов по работе с проектом. Он определяет:
- Версии Docker (27.4.0) и Docker Compose (2.31.0)
- Правильный синтаксис команд (
docker composeвместоdocker-compose) - Структура проекта и компоненты
- Рекомендации по рабочему процессу
Всегда следуйте инструкциям из .cursorrules при работе с проектом.
Файл .gitignore определяет файлы и папки, которые не должны попадать в систему контроля версий:
.envфайлы с паролями- Архивы WordPress
- Логи и временные файлы
- Системные файлы ОС
- ❌
.env— реальные пароли для Docker - ❌
deployment-scripts/config.sh— credentials для деплоя - ❌ Все файлы защищены через
.gitignore
- ✅
.env.example— шаблон для локальной разработки - ✅
deployment-scripts/config.example.sh— шаблон для деплоя
# 1. Создать .env для Docker
cp .env.example .env
nano .env # Изменить пароли
# 2. Создать config.sh для деплоя (если нужен)
cd deployment-scripts
cp config.example.sh config.sh
nano config.sh # Вставить credentials
chmod 600 config.sh📚 Подробнее: См. docs/ENVIRONMENT_FILES.md
-
Убедитесь, что Docker и Docker Compose установлены
-
Перейдите в директорию проекта:
cd www -
Запустите контейнеры:
docker compose up -d --build
-
Проверьте статус контейнеров:
docker compose ps
-
Откройте браузер и перейдите по адресу:
http://localhost
# Все логи
docker compose logs
# Логи определенного сервиса
docker compose logs nginx
docker compose logs php
docker compose logs mysql# Остановить контейнеры
docker compose stop
# Запустить контейнеры
docker compose start
# Перезапустить контейнеры
docker compose restart
# Полностью остановить и удалить контейнеры
docker compose downПараметры подключения:
- Хост: localhost
- Порт: 3306
- База данных: wordpress_db
- Пользователь: wordpress_user
- Пароль: wordpress_password
- Root пароль: root_password_123
Для удобного управления базой данных через веб-интерфейс доступен phpMyAdmin.
URL: http://pma.localhost:8080
Логин: wordpress_user (или root для полного доступа)
Пароль: wordpress_password (или root_password_123 для root)
# Войти в контейнер PHP
docker exec -it wordpress_php bash
# Войти в контейнер MySQL
docker exec -it wordpress_mysql mysql -u root -p
# Обновить права на файлы WordPress
docker exec wordpress_php chown -R phpuser:phpuser /var/www/html
# Просмотр использования ресурсов
docker statsПосле запуска контейнеров WordPress будет доступен по адресу http://localhost.
Первоначальная настройка включает:
- Выбор языка
- Создание администратора
- Настройку сайта
Все настройки базы данных уже предварительно сконфигурированы в wp-config.php.
В продакшн-среде рекомендуется:
- Изменить все пароли в
.envфайле - Использовать SSL сертификаты
- Настроить файрвол
- Регулярно обновлять компоненты
У нас есть два типа деплоя:
Полная загрузка WordPress на чистый сервер:
- Git clone репозитория на сервере
- Загрузка ядра WordPress (исключая wp-content из git)
- Отдельная загрузка wp-content/uploads
- Настройка прав доступа
# Первый деплой на PROD
./deployment-scripts/initial-deploy.sh prod
# Первый деплой на DEV (с автоматической настройкой HTTP-авторизации)
./deployment-scripts/initial-deploy.sh devЧто делает:
- Git clone репозитория на сервере
- Загрузка ядра WordPress (исключая wp-content из git)
- Отдельная загрузка wp-content/uploads
- Настройка прав доступа
- DEV only: Создание HTTP Basic Authentication (test/test)
Когда использовать:
- ✅ Первое развертывание на новом сервере
- ✅ После переезда на новый хостинг
- ✅ Полное восстановление сайта
Инкрементальное обновление через Git:
- Только измененные файлы
- Быстро (git pull)
- Автоматический откат при ошибках
# Обычный деплой на PROD
./deployment-scripts/deploy-prod.sh
# Обычный деплой на DEV
./deployment-scripts/deploy-dev.shКогда использовать:
- ✅ Все последующие обновления после initial deploy
- ✅ Обновление кода, тем, плагинов
- ✅ Регулярные релизы
# 1. Настроить конфигурацию деплоя
cd deployment-scripts
cp config.example.sh config.sh
nano config.sh # Заполнить credentials
chmod 600 config.sh
# 2. ПЕРВЫЙ деплой (только один раз!)
./initial-deploy.sh prod
# 3. Все последующие деплои
./deploy-prod.shСкрипты автоматически определяют, нужен ли initial deploy:
# Если запустить deploy-prod.sh на чистом сервере:
./deploy-prod.sh
# Вы увидите:
# ⚠️ First deployment detected!
# You should use the initial-deploy.sh script instead.- Деплой запускается С ХОСТА (вашего MacBook), НЕ из Docker контейнера
- Docker используется только для локальной разработки
- Initial deploy использует
rsyncдля полной загрузки - Regular deploy использует
git pullдля инкрементальных обновлений
✅ Загружается:
- Git репозиторий клонируется на сервере
- Ядро WordPress (wp-admin, wp-includes) из локального архива
- wp-content/uploads из отдельного архива
- wp-config.php, .htaccess, index.php
ℹ️ Откуда:
- wp-content (темы, плагины) → из Git репозитория
- Ядро WordPress → из локального архива (чтобы не было конфликтов с .gitignore)
- uploads → из отдельного архива (обычно не в git)
❌ НЕ загружается (см. .deployignore):
- node_modules/
- .git/ (локальный)
- docker-compose.yml
- deployment-scripts/
- logs/
- .env файлы
- 📋 DEPLOYMENT_CHEATSHEET.md — быстрая справка
- 📘 INITIAL_DEPLOYMENT.md — детальный гайд по первому деплою
- 📖 DEPLOYMENT_GUIDE.md — полный гайд по всем типам деплоя
- ⚙️ CI_CD_DEPLOYMENT_PLAN.md — автоматизация через GitHub Actions
- 📦 .deployignore — список исключаемых файлов
При каждом git commit автоматически билдятся CSS/JS файлы:
- Проверяется, изменились ли SCSS/JS исходники
- Запускается
npm run build - Собранные файлы добавляются в коммит
- При ошибке билда — коммит отменяется
Преимущества:
- ✅ Не нужен Node.js на сервере
- ✅ Быстрый деплой (только
git pull) - ✅ Всегда свежие ассеты в git
- DEPLOYMENT_GUIDE.md — полный гайд по деплою
- CI_CD_DEPLOYMENT_PLAN.md — CI/CD стратегия
- GIT_HOOKS_SETUP.md — настройка git hooks
- DEV_SECURITY.md — безопасность DEV-окружения
При первом деплое на DEV (./initial-deploy.sh dev) автоматически настраивается базовая HTTP-аутентификация:
Учётные данные по умолчанию:
- Username:
test - Password:
test
Это защищает dev-сайт от индексации поисковыми системами и случайного доступа.
Если нужно изменить пароль:
# Подключиться к серверу
ssh user@dev-server
# Перейти в webroot
cd /path/to/webroot
# Создать новый пароль (замените username и password)
htpasswd -c .htpasswd username
# Или добавить пользователя без перезаписи файла
htpasswd .htpasswd newuserЕсли нужно временно отключить защиту:
# На сервере
cd /path/to/webroot
mv .htaccess .htaccess.backup- Изменить пароли по умолчанию в
.env - Обновить соли безопасности в
wp-config.php - Настроить SSL сертификаты
- Ограничить доступ к административным файлам
# Создать дамп базы данных
docker exec wordpress_mysql mysqldump -u root -p wordpress_db > backup.sql
# Архивировать файлы WordPress
tar -czf wordpress_files_backup.tar.gz wordpress/