Сайт на базе Joomla с БД PostgreSQL
Чтобы настроить статический веб-сайт на Joomla:
- Создайте виртуальную машину для Joomla
- Создайте кластер БД PostgreSQL
- Установите Joomla и дополнительные компоненты
- Настройте веб-сервер Apache2
- Настройте Joomla
- Загрузите файлы веб-сайта
- Настройте DNS
Подготовка к работе
Перед тем, как создавать виртуальную машину и кластер БД:
- Перейдите в консоль управления Яндекс.Облака и выберите каталог, в котором будете выполнять операции.
- Убедитесь, что в выбранном каталоге есть сеть с подсетями в зонах доступности
ru-cental1-a
,ru-central1-b
иru-central1-c
. Для этого на странице каталога нажмите плитку Yandex Virtual Private Cloud. Если в списке есть сеть — нажмите на нее, чтобы увидеть список подсетей. Если нужных подсетей или сети нет, создайте их.
1. Создайте виртуальную машину для Joomla
Чтобы создать виртуальную машину:
-
На странице каталога в консоли управления нажмите кнопку Создать ресурс и выберите Виртуальная машина.
-
В поле Имя введите имя виртуальной машины —
joomla-pg-tutorial-web
. -
Выберите зону доступности, в которой будет находиться виртуальная машина.
-
Выберите публичный образ Ubuntu или Centos.
-
В блоке Вычислительные ресурсы:
- Выберите тип виртуальной машины (легкая или стандартная).
- Укажите необходимое количество vCPU и объем RAM.
Для функционального тестирования хватит минимальной конфигурации:
- Гарантированная доля vCPU — 5%.
- vCPU — 1.
- RAM — 1 ГБ.
-
В блоке Сетевые настройки выберите, к какой подсети необходимо подключить виртуальную машину при создании.
-
Укажите данные для доступа на виртуальную машину:
- В поле Логин введите имя пользователя.
- В поле SSH ключ вставьте содержимое файла открытого ключа.
Пару ключей для подключения по SSH необходимо создать самостоятельно. Для создания ключей используйте сторонние инструменты, например утилиты
ssh-keygen
в Linux и macOS или PuTTygen в Windows.
-
Нажмите кнопку Создать ВМ.
Создание виртуальной машины может занять несколько минут.
При создании виртуальной машине назначаются IP-адрес и имя хоста (FQDN). Эти данные можно использовать для доступа по SSH.
2. Создайте кластер баз данных PostgreSQL
- На странице каталога нажмите кнопку Создать ресурс и выберите Кластер PostgreSQL.
- В поле Имя введите имя кластера —
joomla-pg-tutorial-db-cluster
. - В разделе Класс БД выберите s1.nano.
- В разделе Размер хранилища укажите 10 ГБ.
- В разделе База данных:
- В поле Имя БД введите
joomla-pg-tutorial-db
. - В поле Имя пользователя введите
joomla
. - В поле Пароль введите пароль, который вы будете использовать для доступа к базе.
- В списке Сеть выберите сеть, к которой подключена ваша виртуальная машина.
- В разделе Хосты добавьте еще два хоста в других зонах доступности. При создании хостов не включайте для них Публичный доступ.
- Нажмите кнопку Создать кластер.
Создание кластера БД может занять несколько минут.
3. Установите 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
4. Настройте веб-сервер 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
5. Настройте 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
и удалите оттуда указанный файл.
6. Загрузите файлы веб-сайта
-
В блоке Сеть на странице виртуальной машины в консоли управления найдите публичный IP-адрес виртуальной машины.
-
Подключитесь к виртуальной машине по протоколу SSH. Для этого можно использовать утилиту
ssh
в Linux и macOS и программу PuTTy для Windows.Рекомендуемый способ аутентификации при подключении по 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
на виртуальной машине.
7. Настройте 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-сервиса.