Метка: # Linux # Базы данных # Почта # Серверы

  • Astra Linux + Apache + PHP + PostgreSQL

    Используемые термины: Astra LinuxApachePHPPostgreSQL.

    В данной инструкции мы рассмотрим небольшой пример, как быстро поднять веб сервер на Astra Linux с использованием:

    • Веб-сервера Apache.
    • Интерпретатора PHP 7.
    • СУБД Postgres Pro / PostgreSQL (рассмотрим оба варианта) версии 14.
    • PhpPgAdmin для управления PostgreSQL.

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

    Предварительная настройка

    Прежде чем начать установку и настройку сервера, выполним следующие действия.

    1. Обновление списка пакетов в репозитории

    Для корректной установка пакетов из репозитория необходимо обновить его кэш. Для этого вводим команду:

    apt update

    На чистой системе также стоит обновить все пакеты:

    apt upgrade

    2. Настройка времени

    Для веб-сервера важно, чтобы системное время было правильное.

    Сначала зададим правильный часовой пояс:

    timedatectl set-timezone Europe/Moscow

    * в данном примере будет установлено московское время.

    Полный список часовых поясов можно посмотреть командой:

    timedatectl list-timezones

    Устанавливаем утилиту для синхронизации времени:

    apt install chrony

    3. Настройка брандмауэра

    По умолчанию, в большинстве систем на основе deb брандмауэр настроен в режиме «Разрешить все», и он не требует никакой настройки. Если в нашей системе брандмауэр не настроен на запрет пакетов, то настройки из данного раздела выполнять не обязательно.

    Открываем порт 80 (http):

    iptables -I INPUT -p tcp —dport 80 -j ACCEPT

     Если мы планируем использовать https, то также открываем 443 порт:

    iptables -I INPUT -p tcp —dport 443 -j ACCEPT

    Для сохранения правил используем команду:

    iptables-save > /etc/iptables.rules

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

    vi /etc/network/if-pre-up.d/iptables

    #!/bin/bash
    PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

    iptables-restore < /etc/iptables.rules
    exit 0

    И разрешаем его запуск на выполнение:

    chmod +x /etc/network/if-pre-up.d/iptables

    Apache

    Установим веб-сервер командой:

    apt install apache2

    Запрещаем модуль mpm_event:

    a2dismod mpm_event

    * по умолчанию, apache2 может быть установлен с модулем мультипроцессовой обработки mpm_event. Данный модуль устарел и не поддерживает php 7 и выше, которая является наиболее актуальной и устанавливается по умолчанию.

    Разрешаем модуль мультипроцессовой обработки mpm_prefork:

    a2enmod mpm_prefork

    Если ваш сайт работает только на устаревшей версии PHP, то модуль мультипроцессовой обработки mpm_event нужно оставить, а модуль mpm_prefork нет необходимости активировать.

    Разрешаем модуль rewrite:

    a2enmod rewrite

    Для применения настроек перезапускаем веб-сервер:

    systemctl restart apache2

    Проверим работоспособность apache. Для этого откроем браузер и перейдем по адресу http://<IP-адрес сервера> — должна открыться стартовая страница Apache:

    * в нашем примере мы настроим доступ к серверу только по http. Для настройки https читайте инструкцию Настройка Apache + SSL для работы сайта по HTTPS.

    При получении ошибки 500 Internal Server Error, смотрим в лог:

    tail /var/log/apache2/error.log

    Скорее всего, мы увидим ошибку:

    … Authentication not configured

    Проблема в том, что в Astra Linux веб-сервер Apache требует предварительной аутентификации. Для решения проблемы открываем конфигурационный файл:

    vi /etc/apache2/conf-enabled/astra.conf

    Вводим:

    AstraMode off

    Перезапускаем сервис:

    systemctl restart apache2

    Ошибка должна исчезнуть.

    Веб-сервер установлен. Идем дальше.

    PHP

    Устанавливаем интерпретатор php и модуль для связки apache и php:

    apt install php libapache2-mod-php

    Будет установлена нативная версия PHP для используемой операционной системы. То есть, будет взята самая последняя версия, доступная в репозитории. Посмотреть версию PHP после установки можно командой:

    php -v

    В моем случае был ответ:

    PHP 7.0.33-0+deb9u12+astra1 (cli) (built: Apr  8 2022 22:40:22) ( NTS )
    Copyright (c) 1997-2017 The PHP Group
    Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
        with Zend OPcache v7.0.33-0+deb9u12+astra1, Copyright (c) 1999-2017, by Zend Technologies

    Теперь открываем настройку модуля dir:

    vi /etc/apache2/mods-available/dir.conf

    И добавляем впереди индексных файлов index.php:

    <IfModule dir_module>
        DirectoryIndex index.php index.html …
    </IfModule>

    * если не указан конкретный скрипт, сначала веб-сервер пытается найти и запустить index.php, затем index.html и так далее.

    Разрешаем модуль для установленной версии PHP:

    a2enmod php7.0

    * в моем примере 7.0.

    Для применения настроек перезапустим апач:

    systemctl restart apache2

    Для проверки создадим файл:

    vi /var/www/html/index.php

    <?php

    phpinfo();

    ?>

    Снова переходим по адресу http://<IP-адрес сервера> — теперь мы должны увидеть страницу с подробной информацией о PHP:

    Связка Apache + PHP настроена.

    СУБД

    Мы рассмотрим установку PostgreSQL в двух вариантах — российский Postgres Pro и ванильный PostgreSQL.

    а) Postgres Pro

    Postgres Pro хорошо подходит для Astra Linux — она без проблем устанавливается на данную систему. Сначала необходимо настроить репозиторий. Разработчик предоставляет готовый скрипт — скачаем его командой: 

    curl -o pgpro-repo-add.sh https://repo.postgrespro.ru/pgpro-14/keys/pgpro-repo-add.sh

    * обратите внимание, что в нашем примере мы хотим установить postgresql версии 14. Если вам нужна другая версия, заменить ее.

    Команда может выдать ошибку, если не установлен curl. Исправить это можно так:

    apt install curl

    Выполним скачанный скрипт:

    sh pgpro-repo-add.sh

    Теперь можно установить postgres pro:

    apt install postgrespro-std-14

    Сервис будет автоматически запущен, а также будет инициализирована база. В данной инструкции мы не будет рассматривать, как работать с СУБД, но в конце я приведу список полезных материалов по работе с PostgreSQL.

    б) PostgreSQL

    Ванильный PostgreSQL устанавливается одной командой, но в репозитории Astra Linux доступна только старая версия. Установить более свежую версию PostgreSQL на данную систему потребует ручной установки некоторых пакетов из сторонних репозиториев и не будет рассмотрено в рамках данной инструкции.

    И так, нам нужно ввести одну команду:

    apt install postgresql

    Сервис будет автоматически запущен, а также будет инициализирована база.

    PostgreSQL + PHP

    Мы можем обращаться к PostgreSQL из PHP с помощью функции pg_connect или PDO (PHP Data Objects). В зависимости от этого нам нужно поставить либо один пакет, либо другой.

    а) Для работы с помощью pg_connect:

    apt install php-pgsql

    б) Для работы через PDO:

    apt install php-pdo

    Для применения настроек перезапускаем веб-сервер.

    Вводим:

    systemctl restart apache2

    PhpPgAdmin

    Дополнительно, добавим на наш сервер веб-инструмент для работы с базой PostgreSQL. К сожалению, данный инструмент не работает с Postgres Pro. Также есть некоторые нюансы установки и запуска. Обо всем по порядку.

    Сначала установим git (он понадобиться для загрузки проекта phppgadmin):

    apt install git

    Теперь клонируем сам проект phppgadmin:

    git clone https://github.com/phppgadmin/phppgadmin.git /var/www/html/phppgadmin

    * в нашем примере мы берем с официального репозитория проект phppgadmin и помещаем его в каталог /var/www/html/phppgadmin.

    Задаем в качестве владельца созданного каталога с файлами пользователя www-data:

    chown www-data:www-data -R /var/www/html/phppgadmin

    Копируем шаблон конфигурационного файла в config.inc.php и помещаем в каталог conf:

    cp /var/www/html/phppgadmin/conf/config.inc.php-dist /var/www/html/phppgadmin/conf/config.inc.php

    Открываем его на редактирование:

    vi /var/www/html/phppgadmin/conf/config.inc.php

    Приводим опцию $conf['servers'][0]['host'] к виду:

    $conf['servers'][0]['host'] = '127.0.0.1';

    * в данном примере мы указываем, что будем подключаться к серверу PostgreSQL по сети, адресу локальной петли.

    Также откроем файл:

    vi /var/www/html/phppgadmin/libraries/lib.inc.php

    Комментируем следующие строки:

    //      if (version_compare(phpversion(), $phpMinVer, '<'))
    //              exit(sprintf('Version of PHP not supported. Please upgrade to version %s or later.', $phpMinVer));

    * для работы PhpPgAdmin требуется PHP версии 7.2 и выше. В нашем же примере устанавливается PHP версии 7.0. Установить более свежую версию в Astra Linux — дело отдельной инструкции, поэтому для решения проблемы мы просто комментируем часть кода, которая отвечает за проверку версии PHP. Это очень плохое решение, но ничего лучше я не нашел.

    Устанавливаем расширение PHP mbstring:

    apt install php-mbstring

    Перезапускаем апач:

    systemctl restart apache2

    Переходим по адресу http://<IP-адрес сервера>/phppgadmin — откроется страница портала управления PostgreSQL.

    Тюнинг

    Внесем небольшие изменения в нашу конфигурацию PHP:

    • post_max_size — максимальный объем отправляемых на сервер данных; 
    • upload_max_filesize — максимально допустимый размер одного загружаемого файла; 
    • short_open_tag — разрешение использования короткого способа открытия php (<?); 
    • date.timezone — временная зона, которая будет использоваться веб-сервером, если ее не переопределить настройками в коде php или в файле .htaccess.

    Данные изменения вносятся в разные файлы в зависимости от версии PHP. Например, для нашей php версии 7.0 мы открываем на редактирование следующий файл:

    vi /etc/php/7.0/apache2/php.ini

    И правим следующее:

    post_max_size = 1G

    upload_max_filesize = 512M

    short_open_tag = On

    date.timezone = "Europe/Moscow"

    И перезапускаем apache:

    systemctl restart apache2

    Читайте также

    Другие полезные материалы:

    1. Установка и настройка связки NGINX + PHP + СУБД на Astra Linux.

    2. Настройке полноценного веб-сервера на Ubuntu.

    3. Настройка Apache + SSL для работы сайта по HTTPS.

    4. Как работать с пользователями в PostgreSQL.

    5. Как настроить удаленное подключение к PostgreSQL.

    6. Резервное копирование PostgreSQL.

    7. Установка и настройка vsFTPd на Ubuntu.