WordPress в GitOps с Bedrock на VPS HMS
Это руководство объясняет, как разместить сайт WordPress на VPS HostMyServers и управлять им в стиле GitOps с помощью Bedrock — шаблона (boilerplate) WordPress от Roots. Ваш Git-репозиторий становится источником истины: ядро WordPress, плагины и темы декларируются в коде, версионируются, а затем автоматически развёртываются на вашем VPS при каждом git push.
VPS даёт вам root-доступ, SSH и полный контроль над стеком (Nginx, PHP-FPM, MariaDB), необходимый для такого способа развёртывания, — то, что не позволяет сделать shared-хостинг (виртуальный хостинг).
Обычный WordPress смешивает код (ядро, плагины, темы), конфигурацию (wp-config.php) и данные (загрузки) в одной папке и обновляется из панели администратора. Поэтому его сложно версионировать и воспроизводить. Bedrock даёт:
- Composer для управления ядром WordPress, плагинами и темами как зависимостями (версии фиксируются в
composer.lock) - Конфигурацию через переменные окружения (файл
.env) без секретов в Git - Файлы конфигурации для каждого окружения (разработка, staging, продакшн)
- Более безопасную структуру каталогов: сервер отдаёт наружу только папку
web/ - Отключение изменений из панели администратора в продакшне (
DISALLOW_FILE_MODS)
Заказать VPS HostMyServers
Это руководство рассчитано на VPS HostMyServers. Выберите тариф в зависимости от вашего трафика:
- VPS NVMe — отличное соотношение цены и качества, идеально для старта сайта-визитки или блога
- VPS Performance — рекомендуется для интернет-магазинов на WooCommerce и сайтов с высоким трафиком
| Использование | vCPU | RAM | Хранилище |
|---|---|---|---|
| Сайт-визитка / блог | 1-2 | 2 ГБ | 20 ГБ NVMe |
| Сайт со средним трафиком, несколько сайтов | 2-4 | 4 ГБ | 40 ГБ NVMe |
| WooCommerce / высокий трафик | 4+ | 8 ГБ+ | 80 ГБ NVMe+ |
При заказе выберите Ubuntu 24.04 LTS или Debian 12 в качестве операционной системы. После доставки VPS IP-адрес и root-данные для входа будут отправлены вам по электронной почте и доступны в вашем личном кабинете HostMyServers.
Для нескольких сайтов с высоким трафиком та же процедура применима к выделенным серверам Eco и Performance.
Принцип GitOps применительно к WordPress
| Элемент | Где живёт | Версионируется в Git? |
|---|---|---|
| Ядро WordPress, публичные плагины и темы | composer.json + composer.lock | Да (декларация + точные версии) |
| Тема и плагины, разработанные вами | web/app/themes/, web/app/plugins/ | Да (исходный код) |
| Конфигурация (константы, окружения) | config/ | Да |
| Секреты (пароли, ключи, соли) | .env на каждом сервере | Нет |
| Медиафайлы (загрузки) | web/app/uploads/ на сервере | Нет (нужно резервировать) |
| Контент (записи, страницы, настройки) | База данных MySQL/MariaDB | Нет (нужно резервировать) |
Жизненный цикл выглядит так:
- Вы изменяете код или обновляете зависимость локально
- Коммитите и отправляете (push) изменения в ветку
main - CI-пайплайн устанавливает зависимости и разворачивает новый релиз на сервере
- В случае проблемы вы возвращаетесь к предыдущему релизу (
git revertили переключение символической ссылки)
База данных и медиафайлы — это данные, а не код. Git ими не управляет: настройте регулярное резервное копирование (wp db export, резервная копия папки shared/uploads, снапшоты VPS).
Предварительные требования
На вашей машине разработки:
- Git
- PHP ≥ 8.1 (рекомендуется 8.3) и Composer 2
- Аккаунт GitHub (или GitLab) для размещения репозитория
На вашем VPS HMS (Ubuntu 24.04 LTS / Debian 12):
- SSH-доступ как root или пользователь с правами sudo
- Защищённый VPS (пользователь без root, SSH, файрвол): см. Защита сервера
- Доменное имя, чья DNS-запись
Aуказывает на IP-адрес VPS
В этом руководстве composer install выполняется CI-пайплайном. VPS получ ает только уже готовые файлы: ему не нужны ни Composer, ни Git, ни доступ к репозиториям пакетов.
Шаг 1: создать проект Bedrock локально
-
Создайте проект:
composer create-project roots/bedrock mon-sitecd mon-site -
Изучите структуру каталогов:
mon-site/├── composer.json # Ядро WordPress, плагины и темы декларируются здесь├── composer.lock # Точные установленные версии├── .env.example # Шаблон конфигурации├── wp-cli.yml # Указывает WP-CLI, где находится WordPress (web/wp)├── config/│ ├── application.php # Основная конфигурация (заменяет wp-config.php)│ └── environments/│ ├── development.php│ └── staging.php├── vendor/ # Зависимости Composer (не версионируется)└── web/ # Корень веб-сервера (document root)├── app/ # Аналог wp-content│ ├── mu-plugins/│ ├── plugins/│ ├── themes/│ └── uploads/├── wp/ # Ядро WordPress (не версионируется)├── wp-config.php└── index.phpинфоВ Bedrock панель администратора находится по адресу
https://your-domain.com/wp/wp-admin, аwp-contentзаменён наweb/app. -
Создайте локальный файл
.envна основе шаблона:cp .env.example .env.envDB_NAME='wordpress_dev'DB_USER='wordpress_user'DB_PASSWORD='local_password'DB_HOST='localhost'DB_PREFIX='wp_'WP_ENV='development'WP_HOME='http://mon-site.test'WP_SITEURL="${WP_HOME}/wp"AUTH_KEY='generateme'SECURE_AUTH_KEY='generateme'LOGGED_IN_KEY='generateme'NONCE_KEY='generateme'AUTH_SALT='generateme'SECURE_AUTH_SALT='generateme'LOGGED_IN_SALT='generateme'NONCE_SALT='generateme' -
Сгенерируйте уникальные ключи и соли (нужно делать для каждого окружения):
for k in AUTH_KEY SECURE_AUTH_KEY LOGGED_IN_KEY NONCE_KEY AUTH_SALT SECURE_AUTH_SALT LOGGED_IN_SALT NONCE_SALT; doecho "$k='$(openssl rand -base64 48 | tr -d '\n')'"doneСкопируйте результат в ваш
.envвместо строкgenerateme. Также можно воспользоваться генератором от Roots.
Чтобы запустить сайт локально, используйте любой удобный инструмент (DDEV, Lando, Laravel Valet, Docker…), указав в качестве корня веб-сервера папку web/.
Шаг 2: управление плагинами и темами через Composer
Bedrock уже настроен для работы с WPackagist — Composer-зеркалом всех плагинов и тем из официального каталога WordPress.org.
-
Установите плагин или тему:
composer require wpackagist-plugin/wordpress-seocomposer require wpackagist-plugin/wp-mail-smtpcomposer require wpackagist-theme/twentytwentyfiveИмя пакета соответствует slug на WordPress.org (
https://wordpress.org/plugins/<slug>/). -
Обновите зависимости:
# Обновить всё согласно ограничениям composer.jsoncomposer update# Обновить только ядро WordPresscomposer update roots/wordpress --with-all-dependencies# Посмотреть доступные обновленияcomposer outdated -
Удалите плагин:
composer remove wpackagist-plugin/wp-mail-smtp
Именно файл composer.lock гарантирует, что на продакшне установятся точно те же версии, что были протестированы локально. Он всегда должен быть версионирован.
Платные или приватные плагины
Платные пл агины отсутствуют на WPackagist. Есть два варианта:
-
Рекомендуется: использовать Composer-репозиторий, предоставляемый разработчиком плагина (ACF Pro, Gravity Forms, WPML… предлагают такой), с ключом аутентификации, хранящимся в
auth.json(не версионируется) и в секретах вашего CI. -
Альтернатива: версионировать плагин напрямую в репозитории, добавив исключение в
.gitignore:.gitignoreweb/app/plugins/*!web/app/plugins/.gitkeep!web/app/plugins/mon-plugin-premium
Ваша собственная тема (в web/app/themes/) версионируется по умолчанию.