Сайт на базе Joomla с БД PostgreSQL
- Подготовьте облако к работе
- Создайте ВМ для Joomla
- Создайте кластер БД PostgreSQL
- Установите Joomla и дополнительные компоненты
- Настройте веб-сервер Apache2
- Настройте Joomla
- Загрузите файлы веб-сайта
- Настройте DNS
- Проверьте работу сайта
- Как удалить созданные ресурсы
- Как создать инфраструктуру с помощью Terraform
С помощью этой инструкции вы научитесь разворачивать сайт на базе CMS Joomla с базой данных под управлением СУБД PostgreSQL в инфраструктуре Yandex Cloud.
Чтобы настроить статический веб-сайт на Joomla:
- Создайте виртуальную машину для Joomla.
- Создайте кластер БД PostgreSQL.
- Установите Joomla и дополнительные компоненты.
- Настройте веб-сервер Apache2.
- Настройте Joomla.
- Загрузите файлы веб-сайта.
- Настройте DNS.
- Проверьте работу сайта.
Если сайт вам больше не нужен, удалите все используемые им ресурсы.
Также инфраструктуру для сайта на базе CMS Joomla с БД PostgreSQL можно развернуть через Terraform с помощью готового файла конфигурации.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Убедитесь, что в выбранном каталоге есть сеть с подсетями в зонах доступности ru-central1-a
, ru-central1-b
и ru-central1-d
. Для этого на странице каталога выберите сервис Virtual Private Cloud. Если в списке есть сеть — нажмите на нее, чтобы увидеть список подсетей. Если нужных подсетей или сети нет, создайте их.
Необходимые платные ресурсы
В стоимость поддержки сайта на Joomla входит:
- Плата за постоянно запущенную ВМ (см. тарифы Yandex Compute Cloud).
- Плата за использование динамического или статического внешнего IP-адреса (см. тарифы Yandex Virtual Private Cloud).
- Плата за кластер БД PostgreSQL (см. тарифы Yandex Managed Service for PostgreSQL).
- Стоимость исходящего трафика из Yandex Cloud в интернет (см. тарифы Compute Cloud).
Создайте ВМ для Joomla
-
На странице каталога в консоли управления
нажмите кнопку Создать ресурс и выберите Виртуальная машина. -
В поле Имя введите имя ВМ —
joomla-pg-tutorial-web
. -
Выберите зону доступности, в которой будет находиться ВМ.
-
В блоке Выбор образа/загрузочного диска перейдите на вкладку Cloud Marketplace и выберите публичный образ CentOS Stream.
-
В блоке Вычислительные ресурсы:
- Выберите платформу.
- Укажите необходимое количество vCPU и объем RAM.
Для функционального тестирования достаточно минимальной конфигурации:
- Платформа — Intel Ice Lake.
- Гарантированная доля vCPU — 20%.
- vCPU — 2.
- RAM — 1 ГБ.
-
В блоке Сетевые настройки выберите, к какой подсети необходимо подключить ВМ при создании.
-
Укажите данные для доступа на ВМ:
-
Нажмите кнопку Создать ВМ.
Создание ВМ может занять несколько минут.
При создании ВМ назначаются IP-адрес и имя хоста (FQDN). Эти данные можно использовать для доступа по SSH.
См. раздел Как создать инфраструктуру с помощью Terraform.
Создайте кластер БД PostgreSQL
- На странице каталога нажмите кнопку Создать ресурс и выберите Кластер PostgreSQL.
- В поле Имя введите имя кластера —
joomla-pg-tutorial-db-cluster
. - В разделе Класс хоста выберите подходящий вам класс хоста.
- В разделе Размер хранилища укажите 10 ГБ.
- В разделе База данных укажите:
- Имя БД —
joomla-pg-tutorial-db
. - Имя пользователя —
joomla
. - Пароль — пароль, который вы будете использовать для доступа к БД.
- Имя БД —
- В списке Сеть выберите сеть, к которой подключена ваша ВМ.
- В разделе Хосты добавьте еще два хоста в других зонах доступности. При создании хостов не включайте для них Публичный доступ.
- Нажмите кнопку Создать кластер.
Создание кластера БД может занять несколько минут.
См. раздел Как создать инфраструктуру с помощью Terraform.
Установите Joomla и дополнительные компоненты
После того как ВМ joomla-pg-tutorial-web
перейдет в статус RUNNING
, выполните:
-
В блоке Сеть на странице ВМ в консоли управления
найдите публичный IP-адрес ВМ. -
Подключитесь к ВМ по протоколу SSH. Для этого можно использовать утилиту
ssh
в Linux и macOS и программу PuTTY для Windows.Рекомендуемый способ аутентификации при подключении по SSH — с помощью пары ключей. Не забудьте настроить использование созданной пары ключей: закрытый ключ должен соответствовать открытому ключу, переданному на ВМ.
-
Скачайте и распакуйте архив с Joomla:
CentOS Streamsudo mkdir -p /var/www/html/ curl https://downloads.joomla.org/cms/joomla3/3-8-7/Joomla_3-8-7-Stable-Full_Package.tar.gz?format=gz -o Joomla_3-8-7-Stable-Full_Package.tar.gz -L sudo mv Joomla_3-8-7-Stable-Full_Package.tar.gz /var/www/html/ (cd /var/www/html/ && sudo tar -zxvf Joomla_3-8-7-Stable-Full_Package.tar.gz) sudo rm /var/www/html/Joomla_3-8-7-Stable-Full_Package.tar.gz sudo mv /var/www/html/htaccess.txt /var/www/html/.htaccess
-
Установите дополнительные компоненты:
CentOS Streamsudo dnf install epel-release sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm sudo yum -y install --enablerepo remi-modular httpd php php-pgsql php php-common php-mbstring php-zip php-xml nano wget php-json sudo dnf module enable postgresql:13 sudo dnf install postgresql-server
-
Получите и настройте использование SSL-сертификата:
CentOS Streamsudo mkdir ~apache/.postgresql sudo wget "https://crls.yandex.net/allCLCAs.pem" -O ~apache/.postgresql/root.crt sudo chmod 0600 ~apache/.postgresql/root.crt sudo chown -R apache:apache ~apache/.postgresql
Настройте веб-сервер Apache2
-
Выполните базовую настройку Apache2:
CentOS Streamsudo chown -R apache /var/www/html/
-
Задайте настройки виртуального хоста в конфигурационном файле Apache2. Вы можете отредактировать файл с помощью редактора
nano
:CentOS Streamsudo nano /etc/httpd/conf.d/joomla.conf
Приведите файл к виду:
<VirtualHost *:80 [::]:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html/ <Directory /var/www/html/> DirectoryIndex index.php index.html DirectorySlash off RewriteEngine on RewriteBase / AllowOverride all </Directory> </VirtualHost>
-
Перезапустите веб-сервер:
CentOS Streamsudo service httpd restart
-
Измените настройки:
CentOS Streamsudo restorecon -R /var/www/html sudo setsebool -P httpd_can_network_connect 1
Настройте Joomla
Настройте Joomla по инструкции
-
Получите адреса хостов кластера БД в консоли управления:
- Откройте каталог, в котором создан кластер БД, и выберите сервис Managed Service for PostgreSQL.
- Выберите кластер
joomla-pg-tutorial-db-cluster
. - Откройте вкладку Хосты.
- В колонке Имя хоста скопируйте адреса хостов.
-
На шаге Database в веб-установщике Joomla заполните поля:
-
Тип базы данных:
PostgreSQL
. -
Имя сервера базы данных:
<адрес хоста 1>,<адрес хоста 2>,<адрес хоста 3> port=6432 sslmode=verify-full target_session_attrs=read-write
-
Имя пользователя:
joomla
. -
Пароль: укажите пароль пользователя БД.
-
Имя базы данных:
joomla-pg-tutorial-db
.
-
-
Для проверки безопасности Joomla! может потребовать создать или удалить специальный тестовый файл. На ВМ перейдите в каталог
/var/www/html/installation
и создайте или удалите там указанный файл. -
Создайте пустой файл
configuration.php
для сохранения конфигурации и настройте права для записи в каталог:sudo touch /var/www/html/configuration.php sudo chmod 655 /var/www/html/configuration.php sudo chown -R apache:apache /var/www/html/ sudo restorecon -R /var/www/html
-
После завершения установки удалите директорию
installation
. Это требование безопасности Joomla!:sudo rm -rf /var/www/html/installation
Загрузите файлы веб-сайта
-
В блоке Сеть на странице ВМ в консоли управления
найдите публичный IP-адрес ВМ. -
Подключитесь к ВМ по протоколу SSH.
-
Выдайте права на запись для вашего пользователя на директорию
/var/www/html
:sudo chown -R "$USER":apache /var/www/html
-
Загрузите на ВМ файлы веб-сайта с помощью протокола SCP
.Linux/macOSWindowsИспользуйте утилиту командной строки
scp
:scp -r <путь_до_директории_с_файлами> <имя_пользователя_ВМ>@<IP-адрес_ВМ>:/var/www/html
С помощью программы WinSCP
скопируйте локальную директорию с файлами в директорию/var/www/html
на ВМ.
Настройте DNS
Доменное имя, которое вы хотите использовать для веб-сайта, нужно связать с IP-адресом созданной ВМ joomla-pg-tutorial-web
. Для управления доменом можно использовать сервис Yandex Cloud DNS.
В инструкции ниже описана настройка DNS для доменного имени example.com
.
Добавьте зону
Чтобы добавить публичную зону:
- Откройте раздел Cloud DNS в каталоге, где требуется создать зону DNS.
- Нажмите кнопку Создать зону.
- Задайте настройки зоны:
- Имя зоны:
example-zone-1
. - Зона:
example.com.
. Укажите ваш зарегистрированный домен. - Тип — Публичная.
- Имя зоны:
- Нажмите кнопку Создать.
Добавьте ресурсные записи
Создайте в публичной зоне записи DNS:
- В блоке Сеть на странице виртуальной машины в консоли управления
найдите публичный IP-адрес ВМ. - Создайте запись типа А:
- Откройте раздел Cloud DNS в каталоге, где находится зона
example.com
. - Выберите зону
example.com
из списка. - Нажмите кнопку Создать запись.
- Задайте параметры записи:
- Имя: оставьте пустым.
- Тип записи: оставьте значение
А
. - TTL (время кэширования записи): оставьте значение по умолчанию.
- Значение: введите публичный адрес вашей ВМ.
- Нажмите кнопку Создать.
- Откройте раздел Cloud DNS в каталоге, где находится зона
- Создайте запись типа CNAME:
- Выберите зону
example.com
из списка. - Нажмите кнопку Создать запись.
- Задайте параметры записи:
- Имя:
www
. - Тип записи: выберите значение
CNAME
. - TTL (время кэширования записи): оставьте значение по умолчанию.
- Значение: введите
example.com
.
- Имя:
- Нажмите кнопку Создать.
- Выберите зону
Делегируйте доменное имя
Делегирование — это перенос ответственности с серверов регистратора на ваши серверы. Для домена создаются ресурсные записи типа NS (ns1.yandexcloud.net
и ns2.yandexcloud.net
).
Чтобы делегировать домен, укажите для него DNS-серверы в личном кабинете регистратора.
Делегирование происходит не сразу. Серверы интернет-провайдеров обычно обновляют записи до 24 часов (86400 секунд). Это обусловлено значением TTL, в течение которого кэшируются записи для доменов.
Проверить делегирование домена можно с помощью сервиса Whoisdig
:
dig +short NS example.com
Результат:
ns2.yandexcloud.net.
ns1.yandexcloud.net.
См. раздел Как создать инфраструктуру с помощью Terraform.
Проверьте работу сайта
Чтобы проверить работу сайта, введите в браузере его IP-адрес или доменное имя:
http://<публичный_IP-адрес_ВМ>
.http://www.example.com
.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
- Удалите ВМ.
- Удалите статический публичный IP-адрес, если вы его зарезервировали.
- Удалите кластер Managed Service for PostgreSQL.
Как создать инфраструктуру с помощью Terraform
Terraform
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.
Чтобы создать инфраструктуру для сайта на базе CMS Joomla с БД PostgreSQL:
-
Установите Terraform и укажите источник для установки провайдера Yandex Cloud (раздел Настройте провайдер, шаг 1).
-
Подготовьте файл с описанием инфраструктуры:
Готовый архивВручную- Создайте папку для файла с описанием инфраструктуры.
- Скачайте архив
(2 КБ). - Разархивируйте архив в папку. В результате в ней должны появиться конфигурационный файл
joomla-postgresql-terraform.tf
и файл с пользовательскими даннымиjoomla-postgresql-terraform.auto.tfvars
.
-
Создайте папку для файла с описанием инфраструктуры.
-
Создайте в папке конфигурационный файл
joomla-postgresql-terraform.tf
:joomla-postgresql-terraform.tf# Объявление переменных для пользовательских параметров variable "folder_id" { type = string } variable "vm_user" { type = string } variable "ssh_key_path" { type = string } variable "db_user" { type = string } variable "db_password" { type = string sensitive = true } variable "dns_zone" { type = string } variable "dns_recordset_name" { type = string } # Добавление прочих переменных locals { network_name = "example-network" subnet_name1 = "subnet-1" subnet_name2 = "subnet-2" subnet_name3 = "subnet-3" sg_vm_name = "sg-vm" sg_pgsql_name = "sg-pgsql" vm_name = "joomla-pg-tutorial-web" cluster_name = "joomla-pg-tutorial-db-cluster" db_name = "joomla-pg-tutorial-db" dns_zone_name = "example-zone-1" } # Настройка провайдера terraform { required_providers { yandex = { source = "yandex-cloud/yandex" version = ">= 0.47.0" } } } provider "yandex" { folder_id = var.folder_id } # Создание облачной сети resource "yandex_vpc_network" "joomla-pg-network" { name = local.network_name } # Создание подсети в зоне доступности ru-central1-a resource "yandex_vpc_subnet" "joomla-pg-network-subnet-a" { name = local.subnet_name1 zone = "ru-central1-a" v4_cidr_blocks = ["10.128.0.0/24"] network_id = yandex_vpc_network.joomla-pg-network.id } # Создание подсети в зоне доступности ru-central1-b resource "yandex_vpc_subnet" "joomla-pg-network-subnet-b" { name = local.subnet_name2 zone = "ru-central1-b" v4_cidr_blocks = ["10.129.0.0/24"] network_id = yandex_vpc_network.joomla-pg-network.id } # Создание подсети в зоне доступности ru-central1-d resource "yandex_vpc_subnet" "joomla-pg-network-subnet-d" { name = local.subnet_name3 zone = "ru-central1-d" v4_cidr_blocks = ["10.130.0.0/24"] network_id = yandex_vpc_network.joomla-pg-network.id } # Создание группы безопасности для кластера БД PostgreSQL resource "yandex_vpc_security_group" "pgsql-sg" { name = local.sg_pgsql_name network_id = yandex_vpc_network.joomla-pg-network.id ingress { description = "PostgreSQL" port = 6432 protocol = "TCP" v4_cidr_blocks = ["0.0.0.0/0"] } } # Создание группы безопасности для ВМ resource "yandex_vpc_security_group" "vm-sg" { name = local.sg_vm_name network_id = yandex_vpc_network.joomla-pg-network.id egress { protocol = "ANY" description = "ANY" v4_cidr_blocks = ["0.0.0.0/0"] from_port = 0 to_port = 65535 } ingress { description = "HTTP" protocol = "TCP" v4_cidr_blocks = ["0.0.0.0/0"] port = 80 } ingress { description = "HTTPS" protocol = "TCP" v4_cidr_blocks = ["0.0.0.0/0"] port = 443 } ingress { description = "SSH" protocol = "ANY" v4_cidr_blocks = ["0.0.0.0/0"] port = 22 } } # Добавление готового образа ВМ resource "yandex_compute_image" "joomla-pg-vm-image" { source_family = "centos-stream-8" } resource "yandex_compute_disk" "boot-disk" { name = "bootvmdisk" type = "network-hdd" zone = "ru-central1-a" size = "10" image_id = yandex_compute_image.joomla-pg-vm-image.id } # Создание ВМ resource "yandex_compute_instance" "joomla-pg-vm" { name = local.vm_name platform_id = "standard-v3" zone = "ru-central1-a" resources { cores = 2 memory = 1 core_fraction = 20 } boot_disk { disk_id = yandex_compute_disk.boot-disk.id } network_interface { subnet_id = yandex_vpc_subnet.joomla-pg-network-subnet-a.id nat = true security_group_ids = [ yandex_vpc_security_group.vm-sg.id ] } metadata = { user-data = "#cloud-config\nusers:\n - name: ${var.vm_user}\n groups: sudo\n shell: /bin/bash\n sudo: 'ALL=(ALL) NOPASSWD:ALL'\n ssh-authorized-keys:\n - ${file("${var.ssh_key_path}")}" } } # Создание кластера БД PostgreSQL resource "yandex_mdb_postgresql_cluster" "joomla-pg-cluster" { name = local.cluster_name environment = "PRODUCTION" network_id = yandex_vpc_network.joomla-pg-network.id security_group_ids = [ yandex_vpc_security_group.pgsql-sg.id ] config { version = "14" resources { resource_preset_id = "b2.medium" disk_type_id = "network-ssd" disk_size = 10 } } host { zone = "ru-central1-a" subnet_id = yandex_vpc_subnet.joomla-pg-network-subnet-a.id } host { zone = "ru-central1-b" subnet_id = yandex_vpc_subnet.joomla-pg-network-subnet-b.id } host { zone = "ru-central1-d" subnet_id = yandex_vpc_subnet.joomla-pg-network-subnet-d.id } } # Создание БД resource "yandex_mdb_postgresql_database" "joomla-pg-tutorial-db" { cluster_id = yandex_mdb_postgresql_cluster.joomla-pg-cluster.id name = local.db_name owner = var.db_user } # Создание пользователя БД resource "yandex_mdb_postgresql_user" "joomla-user" { cluster_id = yandex_mdb_postgresql_cluster.joomla-pg-cluster.id name = var.db_user password = var.db_password } # Создание зоны DNS resource "yandex_dns_zone" "joomla-pg" { name = local.dns_zone_name zone = var.dns_zone public = true } # Создание ресурсной записи типа А resource "yandex_dns_recordset" "joomla-pg-a" { zone_id = yandex_dns_zone.joomla-pg.id name = var.dns_recordset_name type = "A" ttl = 600 data = [ yandex_compute_instance.joomla-pg-vm.network_interface.0.nat_ip_address ] } # Создание ресурсной записи типа CNAME resource "yandex_dns_recordset" "joomla-pg-cname" { zone_id = yandex_dns_zone.joomla-pg.id name = "www" type = "CNAME" ttl = 600 data = [ var.dns_zone ] }
-
Создайте в папке файл с пользовательскими данными
joomla-postgresql-terraform.auto.tfvars
:joomla-postgresql-terraform.auto.tfvarsfolder_id = "<идентификатор_каталога>" vm_user = "<имя_пользователя_ВМ>" ssh_key_path = "<путь_к_публичному_SSH-ключу>" db_user = "<имя_пользователя_БД>" db_password = "<пароль_для_доступа_к_БД>" dns_zone = "<зона_DNS>" dns_recordset_name = "<имя_ресурсной_записи>"
Подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера
. -
В файле
joomla-postgresql-terraform.auto.tfvars
задайте пользовательские параметры:folder_id
— идентификатор каталога.vm_user
— имя пользователя ВМ.ssh_key_path
— путь к файлу с открытым SSH-ключом для аутентификации пользователя на ВМ. Подробнее см. Создание пары ключей SSH.db_user
— имя пользователя БД, напримерjoomla
.
db_password
— пароль для доступа к БД. Длина пароля должна составлять от 8 до 128 символов.dns_zone
— зона DNS. Укажите ваш зарегистрированный домен, напримерexample.com.
.dns_recordset_name
— имя ресурсной записи, напримерexample-recordset
.
-
Создайте ресурсы:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-