Современная разработка требует автоматизации. Если вы до сих пор вручную перекидываете файлы через FileZilla или правите код прямо на сервере, вы тратите драгоценное время и рискуете «уронить» проект. Сегодня мы разберем, как настроить полноценный пайплайн CI/CD для WordPress-проекта, используя GitHub Actions, Docker для локальной разработки и протокол FTP для деплоя на продакшн.
Почему автоматизация деплоя — это важно?
Основная идея CI/CD (Continuous Integration / Continuous Deployment) заключается в том, что каждое ваше изменение в коде проходит через автоматизированную цепочку действий перед тем, как попасть к конечному пользователю.
Преимущества такого подхода:
- Исключение человеческого фактора: Вы не забудете обновить зависимости или скомпилировать ассеты.
- Скорость: Деплой происходит в фоновом режиме сразу после
git push. - Версионность: Если что-то пошло не так, вы всегда видите, какой именно коммит вызвал проблему.
Структура проекта и локальная среда
Для эффективной работы мы разделяем проект на исходники и результат сборки. В нашем примере используется структура, где в папке src хранятся исходные файлы темы и плагина, а папка dist (или destination) содержит уже скомпилированный код, готовый к работе на сервере.
Использование Docker
Для локальной разработки идеально подходит Docker. Это позволяет поднять идентичную серверной среду (PHP, MySQL, phpMyAdmin, WordPress) одной командой docker-compose up. Это гарантирует, что если код работает у вас локально, он будет работать и на продакшене.
Node.js и компиляция ассетов
Многие современные темы WordPress используют препроцессоры (например, LESS или SASS) и сборщики JS. Важно помнить, что серверу не нужны исходники — ему нужны готовые CSS и минифицированные JS-файлы. В нашем пайплайне за это отвечает Node.js.
Настройка Workflow в GitHub Actions
GitHub Actions позволяет описать все шаги деплоя в одном YAML-файле, который должен располагаться по пути .github/workflows/deploy.yml.
Шаг 1: Определение триггера
Мы настраиваем запуск экшена на событие push в ветку main. Это значит, что как только вы закончили работу над фичей и запушили код в основную ветку, процесс запустится автоматически.
Шаг 2: Подготовка окружения
На виртуальной машине (например, Ubuntu) нам необходимо:
- Склонировать репозиторий.
- Установить нужную версию Node.js (например, 12-ю для старых проектов).
- Настроить кэширование
npmзависимостей, чтобы ускорить последующие сборки.
Шаг 3: Сборка проекта
Запускаем стандартные команды:
npm install
npm run build # или npm run prod
После этого в рабочем каталоге GitHub Actions появляется папка с готовыми файлами темы и плагина.
Деплой через FTP с помощью lftp
Многие хостинги до сих пор ограничивают доступ только протоколом FTP/SFTP. Вместо поиска сложных плагинов, мы воспользуемся мощной консольной утилитой lftp. Она позволяет создавать «зеркало» локальной папки на удаленном сервере.
Ключевые преимущества lftp:
- Параллельная загрузка: Можно передавать несколько файлов одновременно.
- Удаление лишнего: Флаг
--deleteпозволяет удалять на сервере те файлы, которых больше нет в репозитории, поддерживая чистоту. - Надежность: Утилита отлично справляется с обрывами соединения.
Безопасность прежде всего
Никогда не храните пароли от FTP прямо в коде! Используйте GitHub Secrets. В настройках репозитория добавьте секреты для хоста, логина и пароля, а в YAML-файле обращайтесь к ним через конструкцию ${{ secrets.FTP_PASSWORD }}.
Пример логики деплоя плагина и темы
Важно разделять потоки загрузки. Тема должна отправляться в /wp-content/themes/, а плагин — в /wp-content/plugins/. В workflow это выглядит как два последовательных шага сборки и отправки.
- Build & Deploy Theme: Компилируем стили темы и зеркалим папку на сервер.
- Build & Deploy Plugin: Компилируем логику плагина и отправляем в соответствующую директорию.
Заключение
Настройка CI/CD один раз сэкономит вам сотни часов в будущем. Теперь ваш процесс разработки выглядит так: вы вносите изменения в src, проверяете их в Docker-контейнере, делаете git push, и через пару минут изменения уже на сайте.
Этот подход делает разработку профессиональной, предсказуемой и безопасной. Начинайте внедрять автоматизацию в свои WordPress-проекты уже сегодня!
