Юзеркейс: YC CLI → ВМ + Managed PostgreSQL → WordPress+Nginx в Docker Compose (и типовая ошибка PG4WP)

· Практика

Контекст

Нужно было быстро развернуть демо-стенд в Yandex Cloud через CLI:

  • 1 ВМ: 1 vCPU, 1 GB RAM, 30 GB диск
  • 1 Managed PostgreSQL (самый бюджетный)
  • на ВМ поднять Docker Compose со стеком nginx + wordpress
  • подключить WordPress к созданной Managed PostgreSQL
  • все ресурсы создать с префиксом demo8, а после эксперимента — удалить

Важно: WordPress «из коробки» поддерживает MySQL/MariaDB, а не PostgreSQL. Для PostgreSQL нужен drop-in/плагин (например PG4WP). https://rutube.ru/video/24fb356ca94a410f129219d8151746b8/


1) Подготовка: YC CLI и SSH-ключ

Использовали установленный yc и публичный ключ на машине-инициаторе:

  • ~/.ssh/id_ed25519.pub

Промт

На этой машинке есть яндекс кли
надо создать через кли
1 одну ВМ какую-то 1 цпу и 1 гб, 30 гб веника
1 инстасн базы данных с постгресмо. какой-то самый не дорогой 
ssh ключ публчиный для ВМ лежит в на этой же машине ~/.ssh/id_ed25519.pub 
Делай префикс у ресурсов demo8

2) Создание ресурсов через YC CLI

ВМ

Создали ВМ demo8-vm1 в ru-central1-a. Практический нюанс: на платформах standard-* нельзя выбрать ровно 1 core, поэтому сделали эквивалент 1 vCPU как 2 cores с core-fraction 50%.

Параметры:

  • cores: 2
  • core-fraction: 50 (эквивалент 1 vCPU)
  • memory: 1 GB
  • boot disk: 30 GB, network-hdd
  • NAT IPv4 включен
  • SSH ключ добавлен в metadata

Managed PostgreSQL

Создали кластер demo8-pg:

  • preset: b1.medium (самый бюджетный из доступных)
  • disk: network-hdd
  • PostgreSQL: 16
  • DB: demo8db
  • User: demo8user
  • пароль сгенерирован и сохранён локально для дальнейшей настройки

pasted-image-1769300855836.png


3) Развёртывание Docker Compose на ВМ

На ВМ установили Docker Engine + Docker Compose plugin. Затем подняли стек в /opt/demo8-wp:

  • nginx:1.27-alpine (проксирует PHP на FPM)
  • wordpress:6.4-php8.2-fpm

Так как база — PostgreSQL, WordPress-контейнер собрали с расширениями:

  • pdo_pgsql
  • pgsql

В docker-compose.yml прокинули переменные подключения к БД через .env, использовали pooler порт 6432 у Managed PostgreSQL.


4) Подключение WordPress к PostgreSQL: PG4WP

Для работы WordPress с PostgreSQL подключили drop-in PG4WP:

  • в контейнер WordPress кладётся wp-content/db.php (drop-in), который подменяет драйвер базы
  • дополнительно нужен каталог wp-content/pg4wp/*

Типовая ошибка

На первом запуске получили ошибку на сайте:

PG4WP file directory not found

Причина: был скопирован только db.php, но не была добавлена директория wp-content/pg4wp.

Исправление

Решение простое:

  1. скопировать всю директорию pg4wp внутрь контейнера в wp-content/pg4wp
  2. выставить права на www-data
  3. перезапустить контейнеры

После этого WordPress корректно редиректил на мастер-установку:

  • /wp-admin/install.php

pasted-image-1769300898709.png

5) Проверка

Проверяли:

  • docker compose ps — оба контейнера Up
  • curl http://<public_ip>/ — получали ответ от nginx
  • логи WordPress (php-fpm) — без критичных ошибок

6) Очистка ресурсов

По завершении эксперимента удалили все ресурсы с префиксом demo8:

  • ВМ demo8-vm1
  • Managed PostgreSQL demo8-pg

Итоги

Этот кейс хорошо показывает «быстрый путь» к демо-стенду через CLI:

  • инфраструктура (ВМ + Managed DB) создаётся за минуты
  • приложение поднимается docker-compose’ом без ручной настройки nginx/php
  • при использовании PostgreSQL с WordPress нужно помнить про PG4WP: одного db.php недостаточно, требуется и директория wp-content/pg4wp.

Открыть чат ExecAI

Ещё в блоге