6
сентябрь
2022
Переустановка веб-сервера Apache2 в Linux Mint 21 и установка PHP 8.1
16:34

Переустановка веб-сервера Apache2 в Linux Mint 21 и установка PHP 8.1

6 сентябрь 2022 16:34

После перехода на Linux Mint 21 "Vanessa", которая основана на пакетной базе Ubuntu jammy, перестал запускаться Apache2.
Как я восстановил работу веб-сервера, рассказано ниже.

Проблемы с запуском веб-сервера Apache2

Проблема была следующая - после переустановки Linux Mint не запускалась служба "apache2":
sudo service apache2 start
Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xeu apache2.service" for details.
Журналы показывают, что служба не находит конфигурационный файл /etc/apache2/apache2.conf.

Попытка исправления путём переустановки ни к чему не привела:
sudo apt-get update && sudo apt-get purge apache2 && sudo apt-get install apache2

Также, после полного удаления Apache2 оставались следы старой установки "which apache2"

  • должен быть выводить пустую строку, но вывод был другой, с указанием на папку /usr/sbin.

Решение проблемы

1) Удаляем старую версию

sudo apt-get purge apache2

2) Удаляем следы прошлой установки

sudo apt-get autoremove
sudo rm /usr/sbin/apache2

3) Добавляем PPA-репозиторий "ondrej/apache2" и обновляем кеш пакетов:

Замечание. Если ОС Debian, то в ней по умолчанию нет команды "apt-add-repository".

только в Debian, остальным не нужно нужно выполнить вначале:

sudo apt-get install software-properties-common
sudo apt-get update

В Ubuntu и Linux Mint:

sudo apt-add-repository ppa:ondrej/apache2
sudo apt-get update

4) Производим установку Apache2

sudo apt-get install apache2

5) Проверяем конфигурацию

sudo apache2ctl configtest

Сообщение об ошибке:
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message

Нужно указать имя или IP-адрес веб-сервера в директиве 'ServerName' в конфигурационном файле

sudo nano /etc/apache2/apache2.conf

Ближе к началу файла добавляем строку

ServerName linux-pc

где linux-pc - имя которое выводится в терминале после символа @

Сохраняем конфигурацию Ctrl+O, Ctel+X

6) Запускаем службу Apache2:

sudo service apache2 start

7) Проверяем работу веб-сервера, открытием браузера и переходом по адресу, обязательно с прибавлением префикса http://

Например, http://linux-pc

8) Настраиваем виртуальные хосты в папке "/etc/apache2/sites-available"

Пример тестового файла (содержимое без комментариев grep -v "^[[:blank:]]#" test.conf):

<VirtualHost *:80>
ServerName test
ServerAdmin webmaster@localhost
DocumentRoot /home/user/test/
<Directory "/home/user/test">
Options Indexes MultiViews
AllowOverride None
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/errortest.log
CustomLog ${APACHE_LOG_DIR}/accesstest.log combined
</VirtualHost>

9) создаем мягкие ссылки из каталога sites-enabled:

cd /etc/apache2/sites-enabled
sudo ln -s ../sites-available/test.conf test.conf

Проверяем:

ls -l

10) В файле hosts добавляем псевдоним

sudo nano /etc/hosts

127.0.0.1 test

Ctrl+O, Ctel+X

12) Перечитываем конфигурацию или перезапускаем службу Apache2 следующим образом:

sudo service apache2 reload

13) Проверяем работу веб-сайта переходом по адресу http://test

14) Если вместо результата работы PHP выводится содержимое файла (т.к. динамический сайт на языке PHP),
нужно переустановить модуль PHP для Apache2

Вначале выясняем, какие модули PHP для Apache2 доступны для установки:

apt-cache search libapache2-mod-php*

Например, есть модули для Apache2: php 7.4 и php8.1

Далее, решаем, какой php нужен для проекта. Например, если у шаблонизатора Twig старая версия, выбираем 7.4, иначе 8.1

libapache2-mod-php8.1 - язык сценариев, встраиваемый в HTML, исполняемый на стороне сервера (модуль Apache 2)
libapache2-mod-php7.4 - Transitional package

Устанавливаю вначале php соответствующей версии и php для командной строки.

sudo apt-get install php8.1 php8.1-cli

Назначаю php 8.1 "главным", если есть несколько параллельных конфигураций и версий php

sudo update-alternatives --config php

Удаляю модуль libapache2-mod-php8.1 вместе с libapache2-mod-php (эта хитрость решает многие проблемы)

sudo apt purge libapache2-mod-php8.1 libapache2-mod-php

Сразу устанавливаю только один модуль libapache2-mod-php8.1:

sudo apt install libapache2-mod-php8.1

Разрешаем запуск модуля php8.1 для Apache, командой:

sudo a2enmod php8.1

В консоли выводятся сообщения об успешной регистрации модуля

Considering dependency mpm_prefork for php8.1:
Considering conflict mpm_event for mpm_prefork:
Considering conflict mpm_worker for mpm_prefork:
Module mpm_prefork already enabled
Considering conflict php5 for php8.1:
Module php8.1 already enabled

15) Открываем сайт по адресу http://test. Если что-то не работает, проверяем журналы

su -
cd /var/log/apache2
tail errortest.log

16) Необходимо выполнить отладку программы. Часто ошибки связаны с несовместимостью старых версий фреймворков (vendor) с новой версией php 8.1.
Остальные проблемы решаются по месту, в коде программы PHP, на основе анализа журналов в каталоге /var/log/apache2.


Дополнение от 22.11.22: Включение PHP 8.1 в веб-сервере Apache2

Если команда apt upgrade пишет, что PHP 8.1 в Apache2 не включен по умолчанию

NOTICE: Not enabling PHP 8.1 FPM by default.
NOTICE: To enable PHP 8.1 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php8.1-fpm
NOTICE: You are seeing this message because you have apache2 package installed.

Включите PHP 8.1 в Apache2:

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.1-fpm
sudo systemctl reload apache2

Проверка версии PHP:

php --version

Статус службы "The PHP 8.1 FastCGI Process Manager":

systemctl status php8.1-fpm

Результат команды phpinfo();
PHP Version 8.1.2-1ubuntu2.8



Похожие публикации