Сайт на базе Joomla с БД PostgreSQL
С помощью этой инструкции вы научитесь разворачивать сайт на базе CMS Joomla с базой данных под управлением СУБД PostgreSQL в инфраструктуре Yandex.Cloud.
Чтобы настроить статический веб-сайт на Joomla:
- Создайте виртуальную машину для Joomla.
- Создайте кластер БД PostgreSQL.
- Установите Joomla и дополнительные компоненты.
- Настройте веб-сервер Apache2.
- Настройте Joomla.
- Загрузите файлы веб-сайта.
- Настройте DNS.
- Проверьте работу сайта.
Если сайт вам больше не нужен, удалите все используемые им ресурсы.
Подготовьте облако к работе
Перед тем, как разворачивать сервер, нужно зарегистрироваться в Yandex.Cloud и создать платежный аккаунт:
- Перейдите в консоль управления, затем войдите в Yandex.Cloud или зарегистрируйтесь, если вы еще не зарегистрированы.
- На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе
ACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша виртуальная машина, на странице облака.
Подробнее об облаках и каталогах.
Убедитесь, что в выбранном каталоге есть сеть с подсетями в зонах доступности ru-cental1-a
, ru-central1-b
и ru-central1-c
. Для этого на странице каталога выберите сервис Virtual Private Cloud. Если в списке есть сеть — нажмите на нее, чтобы увидеть список подсетей. Если нужных подсетей или сети нет, создайте их.
Необходимые платные ресурсы
В стоимость поддержки сайта на Joomla входит:
- плата за постоянно запущенную виртуальную машину (см. тарифы Yandex Compute Cloud);
- плата за использование динамического или статического внешнего IP-адреса (см. тарифы Yandex Virtual Private Cloud).
- плата за кластер баз данных PostgreSQL (см. тарифы Yandex Managed Service for PostgreSQL);
- стоимость исходящего трафика из Yandex.Cloud в интернет (см. тарифы Yandex Compute Cloud).
Создайте виртуальную машину для Joomla
Чтобы создать виртуальную машину:
-
На странице каталога в консоли управления нажмите кнопку Создать ресурс и выберите Виртуальная машина.
-
В поле Имя введите имя виртуальной машины —
joomla-pg-tutorial-web
. -
Выберите зону доступности, в которой будет находиться виртуальная машина.
-
Выберите публичный образ Ubuntu или Centos.
-
В блоке Вычислительные ресурсы:
- Выберите платформу.
- Укажите необходимое количество vCPU и объем RAM.
Для функционального тестирования хватит минимальной конфигурации:
- Платформа — Intel Cascade Lake.
- Гарантированная доля vCPU — 5%.
- vCPU — 2.
- RAM — 1 ГБ.
-
В блоке Сетевые настройки выберите, к какой подсети необходимо подключить виртуальную машину при создании.
-
Укажите данные для доступа на виртуальную машину:
- В поле Логин введите имя пользователя.
- В поле SSH ключ вставьте содержимое файла открытого ключа.
Пару ключей для подключения по SSH необходимо создать самостоятельно. Для создания ключей используйте сторонние инструменты, например утилитыssh-keygen
в Linux и macOS или PuTTYgen в Windows.
-
Нажмите кнопку Создать ВМ.
Создание виртуальной машины может занять несколько минут.
При создании виртуальной машине назначаются IP-адрес и имя хоста (FQDN). Эти данные можно использовать для доступа по SSH.
Создайте кластер баз данных PostgreSQL
- На странице каталога нажмите кнопку Создать ресурс и выберите Кластер PostgreSQL.
- В поле Имя введите имя кластера —
joomla-pg-tutorial-db-cluster
. - В разделе Класс БД выберите b2.medium.
- В разделе Размер хранилища укажите 10 ГБ.
- В разделе База данных:
- В поле Имя БД введите
joomla-pg-tutorial-db
. - В поле Имя пользователя введите
joomla
. - В поле Пароль введите пароль, который вы будете использовать для доступа к базе.
- В поле Имя БД введите
- В списке Сеть выберите сеть, к которой подключена ваша виртуальная машина.
- В разделе Хосты добавьте еще два хоста в других зонах доступности. При создании хостов не включайте для них Публичный доступ.
- Нажмите кнопку Создать кластер.
Создание кластера БД может занять несколько минут.
Установите Joomla и дополнительные компоненты
После того как виртуальная машина joomla-pg-tutorial-web
перейдет в статус RUNNING
, выполните:
-
В блоке Сеть на странице виртуальной машины в консоли управления найдите публичный IP-адрес виртуальной машины.
-
Подключитесь к виртуальной машине по протоколу SSH. Для этого можно использовать утилиту
ssh
в Linux и macOS и программу PuTTY для Windows.Рекомендуемый способ аутентификации при подключении по SSH — с помощью пары ключей. Не забудьте настроить использование созданной пары ключей: закрытый ключ должен соответствовать открытому ключу, переданному на виртуальную машину.
-
Скачайте и распакуйте архив с Joomla:
$ sudo 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
-
Установите дополнительные компоненты:
Ubuntu 14Ubuntu 16Ubuntu 18CentOS 6CentOS 7$ echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list $ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - $ sudo apt-get update $ sudo apt-get -q -y install php5-pgsql php5-curl php5-json php5-cgi php5 libapache2-mod-php5 php5-mcrypt apache2 php5-common cron debconf-utils sendmail unzip iptables postgresql-client-10 $ sudo mkdir ~www-data/.postgresql $ sudo wget "https://crls.yandex.net/allCLCAs.pem" -O ~www-data/.postgresql/root.crt $ sudo chmod 0600 ~www-data/.postgresql/root.crt $ sudo chown -R www-data:www-data ~www-data/.postgresql
$ echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list $ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - $ sudo apt-get update $ sudo apt-get -q -y install php7.0-pgsql php7.0-curl php7.0-json php7.0-cgi php7.0 libapache2-mod-php7.0 php7.0-mcrypt apache2 php-mail php7.0-common cron debconf-utils sendmail unzip iptables composer postgresql-client-10 $ sudo mkdir ~www-data/.postgresql $ sudo wget "https://crls.yandex.net/allCLCAs.pem" -O ~www-data/.postgresql/root.crt $ sudo chmod 0600 ~www-data/.postgresql/root.crt $ sudo chown -R www-data:www-data ~www-data/.postgresql
$ echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list $ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - $ sudo apt-get update $ sudo apt-get -q -y install php7.2-pgsql php7.2-curl php7.2-json php7.2-cgi php7.2 libapache2-mod-php7.2 apache2 php-mail php7.2-common cron debconf-utils sendmail unzip iptables composer postgresql-client-10 $ sudo mkdir ~www-data/.postgresql $ sudo wget "https://crls.yandex.net/allCLCAs.pem" -O ~www-data/.postgresql/root.crt $ sudo chmod 0600 ~www-data/.postgresql/root.crt $ sudo chown -R www-data:www-data ~www-data/.postgresql
$ sudo yum -y install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-6-x86_64/pgdg-centos10-10-2.noarch.rpm $ sudo yum -y install http://rpms.famillecollet.com/enterprise/remi-release-6.rpm $ sudo yum check-update $ sudo yum -y install --enablerepo remi-php72 httpd php php-pgsql php php-common php-mbstring php-zip php-xml nano wget postgresql10 $ sudo 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
$ sudo yum -y install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm $ sudo yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm $ sudo yum check-update $ sudo yum -y install --enablerepo remi-php72 httpd php php-pgsql php php-common php-mbstring php-zip php-xml nano wget postgresql10 $ sudo 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:
Ubuntu 14Ubuntu 16Ubuntu 18CentOS$ sudo a2enmod php5 $ sudo a2dismod mpm_event $ sudo a2enmod mpm_prefork $ sudo a2enmod rewrite $ sudo chown -R www-data /var/www/html/
$ sudo a2enmod php7.0 $ sudo a2dismod mpm_event $ sudo a2enmod mpm_prefork $ sudo a2enmod rewrite $ sudo chown -R www-data /var/www/html/
$ sudo a2enmod php7.2 $ sudo a2dismod mpm_event $ sudo a2enmod mpm_prefork $ sudo a2enmod rewrite $ sudo chown -R www-data /var/www/html/
$ sudo chown -R apache /var/www/html/
-
Задайте настройки виртуального хоста в конфигурационном файле Apache2. Вы можете отредактировать файл с помощью редактора
nano
:UbuntuCentOS$ sudo nano /etc/apache2/sites-enabled/000-default.conf
$ sudo 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>
-
Перезапустите веб-сервер:
UbuntuCentOS$ sudo service apache2 restart
$ sudo service httpd restart
-
Этот шаг нужно выполнять только на виртуальной машине с CentOS.
Измените настройки SELinux:
$ sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?" $ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html(/.*)?" $ sudo restorecon -R /var/www/html $ setsebool -P httpd_can_network_connect 1
-
Этот шаг нужно выполнять только на виртуальной машине с CentOS 6.
Откройте сетевые порты 80 и 443 с помощью утилиты
iptables
:$ sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT $ sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT $ sudo iptables-save | sudo tee /etc/sysconfig/iptables
Настройте 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
и удалите оттуда указанный файл.
Загрузите файлы веб-сайта
-
В блоке Сеть на странице виртуальной машины в консоли управления найдите публичный IP-адрес виртуальной машины.
-
Подключитесь к виртуальной машине по протоколу SSH.
-
Выдайте права на запись для вашего пользователя на директорию
/var/www/html
:UbuntuCentOS$ sudo chown -R "$USER":www-data /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
Доменное имя, которое вы хотите использовать для веб-сайта, нужно связать с созданной виртуальной машиной joomla-pg-tutorial-web
.
В инструкции ниже описана настройка внешнего DNS-сервиса на примере reg.ru для доменных имен www.example.com
и example.com
:
- Запись типа A позволяет сопоставить доменному имени
example.com
его IP-адрес. - Запись типа CNAME (Canonical Name — каноническое имя) для
www
позволит получить доступ к вашему веб-сайту через адресwww.example.ru
.
Чтобы настроить внешний DNS-сервис, выполните:
- В блоке Сеть на странице виртуальной машины в консоли управления найдите публичный IP-адрес виртуальной машины.
- Войдите в панель управления внешнего DNS-сервиса. Перейдите в список ваших доменов и нажмите на имя нужного домена.
- Перейдите по ссылке Управление зоной в блоке Управление доменом.
- Создайте или отредактируйте A-запись:
- IP Address — публичный IP-адрес вашей виртуальной машины.
- Subdomain —
@
(указывает на основной домен).
- Создайте CNAME-запись со значениями полей:
- Subdomain —
www
. - Canonical name —
@
или домен с точкой на концеexample.com.
.
- Subdomain —
- Подождите 15-20 минут, пока изменения DNS-записей вводятся в действие. Время ожидания может отличаться для вашего DNS-сервиса.
Проверьте работу сайта
Чтобы проверить работу сайта, откройте его адрес в браузере: http://<публичный IP-адрес виртуальной машины>
.
Проверить работу доменного имени аналогичным образом можно будет только через 15-20 минут после того, как вы изменили DNS-записи.
Как удалить созданные ресурсы
Чтобы перестать платить за развернутый сервер и базу данных, достаточно удалить созданную виртуальную машину joomla-pg-tutorial-web
и кластер Managed Service for PostgreSQL joomla-pg-tutorial-db-cluster
.
Если вы зарезервировали статический публичный IP-адрес специально для этой ВМ:
- Откройте сервис Virtual Private Cloud в вашем каталоге.
- Перейдите на вкладку IP-адреса.
- Найдите нужный адрес, нажмите значок и выберите пункт Удалить.