Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
        • Обзор
        • Консоль управления
        • Terraform
      • Перенос WordPress сайта с хостинга в Yandex Cloud
      • Организация виртуального хостинга
      • Создание веб-приложения на Python с использованием фреймворка Flask
      • Хостинг статического сайта на фреймворке Gatsby
      • Миграция в Cloud CDN из стороннего CDN-провайдера
      • Получение статистики посещения сайта с использованием S3 Select

В этой статье:

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Создайте инфраструктуру
  • Настройте веб-сервер Nginx
  • Установите WordPress и дополнительные компоненты
  • Завершите настройку WordPress
  • Проверьте работу сайта
  • Как удалить созданные ресурсы
  1. Прикладные решения
  2. Создание сайта
  3. Сайт на WordPress с БД MySQL®
  4. Terraform

Создание сайта на WordPress с кластером базы данных MySQL® с помощью Terraform

Статья создана
Yandex Cloud
Улучшена
kvendingoldo
Обновлена 6 марта 2025 г.
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Создайте инфраструктуру
  • Настройте веб-сервер Nginx
  • Установите WordPress и дополнительные компоненты
  • Завершите настройку WordPress
  • Проверьте работу сайта
  • Как удалить созданные ресурсы

Чтобы создать инфраструктуру для сайта на WordPress с кластером базы данных MySQL® c помощью Terraform:

Чтобы настроить сайт на WordPress с кластером MySQL®:

  1. Подготовьте облако к работе.
  2. Создайте инфраструктуру.
  3. Настройте веб-сервер Nginx.
  4. Установите WordPress и дополнительные компоненты.
  5. Завершите настройку WordPress.
  6. Проверьте работу сайта.

Если созданные ресурсы вам больше не нужны, удалите их.

Подготовьте облако к работе

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

Необходимые платные ресурсы

В стоимость поддержки сайта на WordPress с кластером MySQL® входит:

  • плата за постоянно запущенную ВМ (см. тарифы Yandex Compute Cloud);
  • плата за кластер БД MySQL® (см. тарифы Yandex Managed Service for MySQL®);
  • плата за использование динамического или статического внешнего IP-адреса (см. тарифы Yandex Virtual Private Cloud);
  • плата за публичные DNS-запросы и зоны DNS (см. тарифы Yandex Cloud DNS).

Создайте инфраструктуру

Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.

Terraform распространяется под лицензией Business Source License, а провайдер Yandex Cloud для Terraform — под лицензией MPL-2.0.

Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform или в зеркале.

Для создания инфраструктуры c помощью Terraform:

  1. Установите Terraform, получите данные для аутентификации и укажите источник для установки провайдера Yandex Cloud (раздел Настройте провайдер, шаг 1).

  2. Подготовьте файлы с описанием инфраструктуры:

    Готовый архив
    Вручную
    1. Создайте папку для файлов.
    2. Скачайте архив (1 КБ).
    3. Разархивируйте архив в папку. В результате в ней должен появиться конфигурационный файл wordpress-mysql.tf.
    1. Создайте папку для файлов.

    2. Создайте в папке конфигурационный файл wordpress-mysql.tf:

      wordpress-mysql.tf
      terraform {
        required_providers {
          yandex = {
            source  = "yandex-cloud/yandex"
            version = ">= 0.47.0"
          }
        }
      }
      
      provider "yandex" {
        zone = "ru-central1-a"
      }
      
      resource "yandex_compute_disk" "boot-disk" {
        name     = "bootvmdisk"
        type     = "network-hdd"
        zone     = "ru-central1-a"
        size     = "20"
        image_id = "<идентификатор_образа>"
      }
      
      resource "yandex_compute_instance" "vm-wordpress-mysql" {
        name        = "wp-mysql-tutorial-web"
        platform_id = "standard-v3"
        zone        = "ru-central1-a"
      
        resources {
          core_fraction = 20
          cores         = 2
          memory        = 2
        }
      
        boot_disk {
          disk_id = yandex_compute_disk.boot-disk.id
        }
      
        network_interface {
          subnet_id          = yandex_vpc_subnet.subnet-1.id
          security_group_ids = ["${yandex_vpc_security_group.sg-1.id}"]
          nat                = true
        }
      
        metadata = {
          ssh-keys = "<имя_пользователя>:<содержимое_SSH-ключа>"
        }
      }
      
      resource "yandex_mdb_mysql_cluster" "wp-cluster" {
        name                = "wp-mysql-tutorial-db-cluster"
        environment         = "PRESTABLE"
        network_id          = yandex_vpc_network.network-1.id
        version             = "8.0"
        security_group_ids  = ["${yandex_vpc_security_group.sg-1.id}"]
      
        resources {
          resource_preset_id = "s2.small"
          disk_type_id       = "network-ssd"
          disk_size          = "10"
        }
      
        host {
          zone             = "ru-central1-a"
          subnet_id        = yandex_vpc_subnet.subnet-1.id
          assign_public_ip = false
        }
      
        host {
          zone             = "ru-central1-b"
          subnet_id        = yandex_vpc_subnet.subnet-2.id
          assign_public_ip = false
        }
      
        host {
          zone             = "ru-central1-d"
          subnet_id        = yandex_vpc_subnet.subnet-3.id
          assign_public_ip = false
        }
      }
      
      resource "yandex_mdb_mysql_database" "wp-db" {
        cluster_id = yandex_mdb_mysql_cluster.wp-cluster.id
        name       = "wp-mysql-tutorial-db"
      }
      
      resource "yandex_mdb_mysql_user" "wp-user" {
        cluster_id            = yandex_mdb_mysql_cluster.wp-cluster.id
        name                  = "wordpress"
        password              = "password"
        authentication_plugin = "MYSQL_NATIVE_PASSWORD"
        permission {
          database_name = yandex_mdb_mysql_database.wp-db.name
          roles         = ["ALL"]
        }
      }
      
      resource "yandex_vpc_security_group" "sg-1" {
        name        = "wordpress"
        description = "Description for security group"
        network_id  = yandex_vpc_network.network-1.id
      
        ingress {
          protocol       = "TCP"
          description    = "ext-http"
          v4_cidr_blocks = ["0.0.0.0/0"]
          port           = 80
        }
      
        ingress {
          protocol       = "TCP"
          description    = "ext-ssh"
          v4_cidr_blocks = ["0.0.0.0/0"]
          port           = 22
        }
      
        ingress {
          protocol       = "TCP"
          description    = "ext-msql"
          v4_cidr_blocks = ["0.0.0.0/0"]
          port           = 3306
        }
      
        ingress {
          protocol       = "TCP"
          description    = "ext-https"
          v4_cidr_blocks = ["0.0.0.0/0"]
          port           = 443
        }
      
        egress {
          protocol       = "ANY"
          description    = "any"
          v4_cidr_blocks = ["0.0.0.0/0"]
        }
      }
      
      resource "yandex_vpc_network" "network-1" {
        name = "network1"
      }
      
      resource "yandex_vpc_subnet" "subnet-1" {
        name           = "subnet1"
        zone           = "ru-central1-a"
        network_id     = yandex_vpc_network.network-1.id
        v4_cidr_blocks = ["192.168.1.0/24"]
      }
      
      resource "yandex_vpc_subnet" "subnet-2" {
        name           = "subnet2"
        zone           = "ru-central1-b"
        network_id     = yandex_vpc_network.network-1.id
        v4_cidr_blocks = ["192.168.2.0/24"]
      }
      
      resource "yandex_vpc_subnet" "subnet-3" {
        name           = "subnet3"
        zone           = "ru-central1-d"
        network_id     = yandex_vpc_network.network-1.id
        v4_cidr_blocks = ["192.168.3.0/24"]
      }
      
      resource "yandex_dns_zone" "zone-1" {
        name        = "example-zone-1"
        description = "Public zone"
        zone        = "example.com."
        public      = true
      }
      
      resource "yandex_dns_recordset" "rs-1" {
        zone_id = yandex_dns_zone.zone-1.id
        name    = "example.com."
        ttl     = 600
        type    = "A"
        data    = ["${yandex_compute_instance.vm-wordpress-mysql.network_interface.0.nat_ip_address}"]
      }
      
      resource "yandex_dns_recordset" "rs-2" {
        zone_id = yandex_dns_zone.zone-1.id
        name    = "www"
        ttl     = 600
        type    = "CNAME"
        data    = ["example.com"]
      }
      

    Более подробную информацию о параметрах используемых ресурсов в Terraform см. в документации провайдера:

    • Сеть — yandex_vpc_network.
    • Подсети — yandex_vpc_subnet.
    • Группы безопасности — yandex_vpc_security_group.
    • Виртуальная машина — yandex_compute_instance.
    • Кластер MySQL® — yandex_mdb_mysql_cluster.
    • БД PostgreSQL — yandex_mdb_mysql_database.
    • Пользователь БД — yandex_mdb_mysql_user.
    • Зона DNS — yandex_dns_zone.
    • Ресурсная запись DNS — yandex_dns_recordset.
  3. В блоке metadata укажите метаданные для создания ВМ <имя_пользователя>:<содержимое_SSH-ключа>. Указанное имя пользователя не играет роли, ключ будет присвоен пользователю, который задан в конфигурации образа. В разных образах это разные пользователи. Подробнее см. в разделе Ключи, обрабатываемые в публичных образах Yandex Cloud.

  4. В блоке boot_disk укажите идентификатор одного из образов ВМ с нужным набором компонентов:

    • Debian 11.
    • Ubuntu 20.04 LTS.
    • CentOS 7.
  5. Создайте ресурсы:

    1. В терминале перейдите в папку, где вы отредактировали конфигурационный файл.

    2. Проверьте корректность конфигурационного файла с помощью команды:

      terraform validate
      

      Если конфигурация является корректной, появится сообщение:

      Success! The configuration is valid.
      
    3. Выполните команду:

      terraform plan
      

      В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

    4. Примените изменения конфигурации:

      terraform apply
      
    5. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

После создания инфраструктуры, настройте веб-сервер Nginx.

Настройте веб-сервер Nginx

После того как ВМ wp-mysql-tutorial-web перейдет в статус RUNNING:

  1. В блоке Сеть на странице ВМ в консоли управления найдите публичный IP-адрес ВМ.

  2. Подключитесь к ВМ по протоколу SSH. Для этого можно использовать утилиту ssh в Linux и macOS и программу PuTTY для Windows.

    Рекомендуемый способ аутентификации при подключении по SSH — с помощью пары ключей. Не забудьте настроить использование созданной пары ключей: закрытый ключ должен соответствовать открытому ключу, переданному на ВМ.

  3. Установите Nginx, менеджер процессов PHP-FPM и дополнительные пакеты:

    Debian/Ubuntu
    CentOS
    sudo apt-get update
    sudo apt-get install -y nginx-full php-fpm php-mysql
    sudo systemctl enable nginx
    
    sudo yum -y install epel-release
    sudo yum -y install nginx
    sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
    sudo yum -y --enablerepo=remi-php74 install php php-mysql php-xml php-soap php-xmlrpc php-mbstring php-json php-gd php-mcrypt
    sudo yum -y --enablerepo=remi-php74 install php-fpm
    sudo systemctl enable nginx
    sudo systemctl enable php-fpm
    
  4. Задайте настройки веб-сервера в конфигурационных файлах Nginx:

    Debian/Ubuntu
    CentOS
    1. Вы можете отредактировать файл с помощью редактора nano:

      sudo nano /etc/nginx/sites-available/wordpress
      
    2. Приведите файл к виду:

      server {
        listen 80 default_server;
      
        root /var/www/wordpress;
        index index.php;
      
        server_name <DNS-имя_сервера>;
      
        location / {
          try_files $uri $uri/ =404;
        }
      
        error_page 404 /404.html;
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
          root /usr/share/nginx/html;
        }
      
        location ~ \.php$ {
          try_files $uri =404;
          fastcgi_split_path_info ^(.+\.php)(/.+)$;
          fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
          fastcgi_index index.php;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          include fastcgi_params;
        }
      }
      
    3. Разрешите запуск вашего сайта:

      sudo rm /etc/nginx/sites-enabled/default
      sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
      

    Вы можете отредактировать файлы nginx.conf и wordpress.conf с помощью редактора nano:

    1. Откройте файл nginx.conf:

      sudo nano /etc/nginx/nginx.conf
      
    2. Приведите файл к виду:

      user nginx;
      worker_processes auto;
      error_log /var/log/nginx/error.log;
      pid /run/nginx.pid;
      include /usr/share/nginx/modules/*.conf;
      
      events {
        worker_connections 1024;
      }
      
      http {
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
      
        access_log  /var/log/nginx/access.log main;
      
        sendfile            on;
        tcp_nopush          on;
        tcp_nodelay         on;
        keepalive_timeout   65;
        types_hash_max_size 2048;
      
        include             /etc/nginx/mime.types;
        default_type        application/octet-stream;
      
        include /etc/nginx/conf.d/*.conf;
      }
      
    3. Откройте файл wordpress.conf:

      sudo nano /etc/nginx/conf.d/wordpress.conf
      
    4. Приведите файл к виду:

      server {
        listen 80 default_server;
      
        root /usr/share/nginx/wordpress/;
        index index.php;
      
        server_name <DNS-имя_сервера>;
      
        location / {
          try_files $uri $uri/ =404;
        }
      
        error_page 404 /404.html;
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
          root /usr/share/nginx/html;
        }
      
        location ~ \.php$ {
          try_files $uri =404;
          fastcgi_split_path_info ^(.+\.php)(/.+)$;
          fastcgi_pass 127.0.0.1:9000;
          fastcgi_index index.php;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          include fastcgi_params;
        }
      }
      

Установите WordPress и дополнительные компоненты

  1. Загрузите и распакуйте последнюю версию WordPress:

    Debian/Ubuntu
    CentOS
    wget https://wordpress.org/latest.tar.gz
    tar -xzf latest.tar.gz
    mv wordpress/wp-config-sample.php wordpress/wp-config.php
    sudo mv wordpress /var/www/wordpress
    sudo chown -R www-data:www-data /var/www/wordpress
    
    curl https://wordpress.org/latest.tar.gz --output latest.tar.gz
    tar -xzf latest.tar.gz
    mv wordpress/wp-config-sample.php wordpress/wp-config.php
    sudo mv wordpress /usr/share/nginx/wordpress
    sudo chown -R nginx:nginx /usr/share/nginx/wordpress/
    

    Измените настройки SELinux:

    sudo semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/wordpress(/.*)?"
    sudo semanage fcontext -a -t httpd_sys_rw_content_t "/usr/share/nginx/wordpress(/.*)?"
    sudo restorecon -R /usr/share/nginx/wordpress
    sudo setsebool -P httpd_can_network_connect 1
    
  2. Получите ключи безопасности WordPress:

    curl --silent https://api.wordpress.org/secret-key/1.1/salt/
    

    Сохраните вывод команды — полученные ключи будут нужны на следующем шаге.

  3. Добавьте ключи безопасности в конфигурационный файл WordPress wp-config.php. Вы можете отредактировать файл с помощью редактора nano:

    Debian/Ubuntu
    CentOS
    sudo nano /var/www/wordpress/wp-config.php
    
    sudo nano /usr/share/nginx/wordpress/wp-config.php
    

    Замените блок конфигурации на значения, полученные на предыдущем шаге:

    define('AUTH_KEY',         't vz,|............R lZ5]');
    define('SECURE_AUTH_KEY',  '@r&pPD............dK-A%=');
    define('LOGGED_IN_KEY',    '%6TuLl............9>/dNE');
    define('NONCE_KEY',        'DO(u.H............$?ja-e');
    define('AUTH_SALT',        '|G Vo<............Xeb.~y');
    define('SECURE_AUTH_SALT', 'Y5tIYA............7Lxf8J');
    define('LOGGED_IN_SALT',   'gR]>WZ............<>|;YY');
    define('NONCE_SALT',       '=]nQIb............HLT2:9');
    
  4. Перейдите к блоку конфигурации подключения к кластеру wp-mysql-tutorial-db-cluster:

    // ** MySQL® settings - You can get this info from your web host. ** //
    /** The name of the database for WordPress. */
    
    define( 'DB_NAME', '<DB_NAME>' );
    /** MySQL® database username. */
    define( 'DB_USER', '<DB_USER>' );
    
    /** MySQL® database password. */
    define( 'DB_PASSWORD', '<DB_PASSWORD>' );
    
    /** MySQL® hostname. */
    define( 'DB_HOST', '<DB_HOST>' );
    

    Укажите в файле вместо:

    • <DB_NAME> — имя БД wp-mysql-tutorial-db.

    • <DB_USER> — имя пользователя wordpress.

    • <DB_PASSWORD> — пароль, заданный при создании кластера БД.

    • <DB_HOST> — имя хоста MySQL® вида XXXX-XXXXXXXXXX.mdb.yandexcloud.net.

      Чтобы узнать FQDN хоста MySQL®:

      Консоль управления
      CLI
      1. Перейдите на страницу кластера MySQL® в консоли управления.
      2. На вкладке Базы данных рядом с БД нажмите значок → Подключиться.
      3. Найдите строчку mysql --host=ХХХХ-ХХХХХХХХХХ.mdb.yandexcloud.net, где ХХХХ-ХХХХХХХХХХ.mdb.yandexcloud.net — это FQDN хоста с ролью MASTER.

      Получите список хостов и скопируйте NAME хоста с ролью MASTER:

      yc managed-mysql host list --cluster-name <имя_кластера_MySQL®>
      
      +------------------------+----------------------+---------+--------+-------------------+-----------+
      |           NAME         |      CLUSTER ID      |  ROLE   | HEALTH |      ZONE ID      | PUBLIC IP |
      +------------------------+----------------------+---------+--------+-------------------+-----------+
      | rc1a-...mdb.yandexcloud.net | c9quhb1l32unm1sdn0in | MASTER  | ALIVE  | ru-central1-a | false     |
      | rc1b-...mdb.yandexcloud.net | c9quhb1l32unm1sdn0in | REPLICA | ALIVE  | ru-central1-b | false     |
      +------------------------+----------------------+---------+--------+-------------------+-----------+
      
  5. Перезапустите Nginx и PHP-FPM:

    Debian/Ubuntu
    CentOS
    sudo systemctl restart nginx.service
    sudo systemctl restart php7.4-fpm.service
    
    sudo systemctl restart nginx.service
    sudo systemctl restart php-fpm.service
    

Завершите настройку WordPress

  1. В блоке Сеть на странице ВМ в консоли управления найдите публичный IP-адрес ВМ.
  2. Перейдите по адресу ВМ в браузере.
  3. Выберите язык и нажмите кнопку Продолжить.
  4. Заполните информацию для доступа к сайту:
    • Укажите любое название сайта, например, wp-your-project.
    • Укажите имя пользователя, которое будет использоваться для входа в административную панель, например, admin.
    • Укажите пароль, который будет использоваться для входа в административную панель.
    • Укажите вашу электронную почту.
  5. Нажмите кнопку Установить WordPress.
  6. Если установка прошла успешно, нажмите кнопку Войти.
  7. Войдите на сайт, используя указанные на прошлых шагах имя пользователя и пароль. После этого откроется административная панель, в которой можно приступать к работе с вашим сайтом.

Проверьте работу сайта

Чтобы проверить работу сайта, введите в браузере его IP-адрес или доменное имя:

  • http://<публичный_IP-адрес_ВМ>.
  • http://www.example.com.

Для входа в панель управления WordPress используйте адрес http://www.example.com/wp-admin/.

Как удалить созданные ресурсы

Чтобы перестать платить за созданные ресурсы:

  1. Откройте конфигурационный файл single-node-file-server.tf и удалите описание создаваемой инфраструктуры из файла.

  2. Примените изменения:

    1. В терминале перейдите в папку, где вы отредактировали конфигурационный файл.

    2. Проверьте корректность конфигурационного файла с помощью команды:

      terraform validate
      

      Если конфигурация является корректной, появится сообщение:

      Success! The configuration is valid.
      
    3. Выполните команду:

      terraform plan
      

      В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

    4. Примените изменения конфигурации:

      terraform apply
      
    5. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

См. также

  • Создание сайта на WordPress с кластером базы данных MySQL® с помощью консоли управления.

Была ли статья полезна?

Предыдущая
Консоль управления
Следующая
Перенос WordPress сайта с хостинга в Yandex Cloud
Проект Яндекса
© 2025 ООО «Яндекс.Облако»