Сайт на базе Joomla с БД PostgreSQL

Чтобы настроить статический веб-сайт на Joomla:

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

Перед тем, как создавать виртуальную машину и кластер БД:

  1. Перейдите в консоль управления Яндекс.Облака и выберите каталог, в котором будете выполнять операции.
  2. Убедитесь, что в выбранном каталоге есть сеть с подсетями в зонах доступности ru-cental1-a, ru-central1-b и ru-central1-c. Для этого на странице каталога нажмите плитку Yandex Virtual Private Cloud. Если в списке есть сеть — нажмите на нее, чтобы увидеть список подсетей. Если нужных подсетей или сети нет, создайте их.

Создать виртуальную машину для Joomla

Чтобы создать виртуальную машину:

  1. На странице каталога в консоли управления нажмите кнопку Создать ресурс и выберите Виртуальная машина.

  2. В поле Имя введите имя виртуальной машины — joomla-pg-tutorial-web.

  3. Выберите зону доступности, в которой будет находиться виртуальная машина.

  4. Выберите публичный образ Ubuntu или Centos.

  5. В блоке Вычислительные ресурсы выберите тип использования ядра (частичное или полное), укажите необходимое количество vCPU и объем RAM.

    Для функционального тестирования хватит минимальной конфигурации:

    • Гарантированная доля vCPU — 5%.
    • vCPU — 1.
    • RAM — 1 ГБ.
  6. В блоке Сетевые настройки выберите, к какой подсети необходимо подключить виртуальную машину при создании.

  7. Укажите данные для доступа на виртуальную машину:

    • В поле Логин введите имя пользователя.
    • В поле SSH ключ вставьте содержимое файла открытого ключа. Пару ключей для подключения по SSH необходимо создать самостоятельно. Для создания ключей используйте сторонние инструменты, например утилиты ssh-keygen в Linux и macOS или PuTTygen в Windows.
  8. Нажмите кнопку Создать ВМ.

Создание виртуальной машины может занять несколько минут.

При создании виртуальной машине назначаются IP-адрес и имя хоста (FQDN). Эти данные можно использовать для доступа по SSH.

Создать кластер баз данных PostgreSQL

  1. На странице каталога нажмите кнопку Создать ресурс и выберите Кластер PostgreSQL.
  2. В поле Имя введите имя кластера — joomla-pg-tutorial-db-cluster.
  3. В разделе Класс БД выберите s1.nano.
  4. В разделе Размер хранилища укажите 10 ГБ.
  5. В разделе База данных:
  6. В поле Имя БД введите joomla-pg-tutorial-db.
  7. В поле Имя пользователя введите joomla.
  8. В поле Пароль введите пароль, который вы будете использовать для доступа к базе.
  9. В списке Сеть выберите сеть, к которой подключена ваша виртуальная машина.
  10. В разделе Хосты добавьте еще два хоста в других зонах доступности. При создании хостов не включайте для них Публичный доступ.
  11. Нажмите кнопку Создать кластер.

Создание кластера БД может занять несколько минут.

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

После того как виртуальная машина joomla-pg-tutorial-web перейдет в статус RUNNING, выполните:

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

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

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

  3. Скачайте и распакуйте архив с 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
    
  4. Установите дополнительные компоненты:

    $ 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 ~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
    
    $ 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 ~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
    
    $ 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 ~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-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-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
    

Настроить веб-сервер Apache2

  1. Выполните базовую настройку Apache2:

    $ 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/
    
  2. Задайте настройки виртуального хоста в конфигурационном файле Apache2. Вы можете отредактировать файл с помощью утилиты nano:

    $ 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>
    
  3. Перезапустите веб-сервер:

    $ sudo service apache2 restart
    
    $ sudo service httpd restart
    
  4. Этот шаг нужно выполнять только на виртуальной машине с ОС 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 по инструкции на сайте проекта. В процессе настройки вам потребуются параметры подключения к базе данных. Чтобы узнать и правильно прописать параметры, выполните:

  1. Получите адреса хостов кластера БД в консоли управления:

    1. Откройте каталог, в котором создан кластер БД.
    2. Нажмите плитку Managed Service for PostgreSQL.
    3. Выберите кластер joomla-pg-tutorial-db-cluster.
    4. Откройте вкладку Хосты.
    5. В колонке Адрес (доменное имя) найдите адреса хостов.
  2. На шаге Database в веб-установщике Joomla заполните поля:

    • Тип базы данных: PostgreSQL.
    • Имя сервера базы данных:
      host=<адрес хоста 1>,<адрес хоста 2>,<адрес хоста 3> \
      port=6432 \
      sslmode=verify-full \
      target_session_attrs=read-write
      
    • Имя пользователя:joomla.
    • Пароль: укажите пароль пользователя БД.
    • Имя базы данных: joomla-pg-tutorial-db.

Загрузить файлы веб-сайта

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

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

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

  3. Выдайте права на запись для вашего пользователя на директорию /var/www/html:

    $ sudo setfacl -m u:<имя вашего пользователя>:w /var/www/html
    
  4. Загрузите на виртуальную машину файлы веб-сайта с помощью протокола SCP.

    Используйте утилиту командной строки 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-сервис, выполните:

  1. В блоке Сеть на странице виртуальной машины в консоли управления найдите публичный IP-адрес виртуальной машины.
  2. Войдите в панель управления внешнего DNS-сервиса. Перейдите в список ваших доменов и нажмите на имя нужного домена.
  3. Перейдите по ссылке Управление зоной в блоке Управление доменом.
  4. Создайте или отредактируйте A-запись:
    • IP Address — публичный IP-адрес вашей виртуальной машины.
    • Subdomain@ (указывает на основной домен).
  5. Создайте CNAME-запись со значениями полей:
    • Subdomainwww.
    • Canonical name@ или домен с точкой на концеexample.com..
  6. Подождите 15-20 минут, пока изменения DNS-записей вводятся в действие. Время ожидания может отличаться для вашего DNS-сервиса.