ApacheMySQLPHP: различия между версиями

Материал из ALT Linux Wiki
(Новая страница: «{{Stub}} Это руководство поможет установить сервер LAMP (Linux+Apache+MySQL+PHP) на ALT Linux на базе Apache 2, PHP 5 ...»)
 
(мелкая правка)
 
(не показано 13 промежуточных версий 3 участников)
Строка 1: Строка 1:
{{Stub}}
Это руководство поможет установить сервер LAMP (Linux+Apache+MySQL+PHP) на ALT Linux на базе Apache 2, PHP 5 и MySQL 5.0.


Это руководство поможет установить сервер LAMP (Linux+Apache+MySQL+PHP) на ALT Linux на базе Apache 2, PHP 5 и MySQL 5.0.
{{Note|Новые версии пакета устанавливают Apache 2, PHP 7 и Mariadb.}}


== Установка ==
== Установка (PHP как модуль Apache) ==


[[Install|Подключите репозиторий]] (в Интернете или на диске) и выполните
[[Install|Подключите репозиторий]] (в Интернете или на диске) и выполните
Строка 12: Строка 12:
'''Внимание:''' этот пакет лишь установит программное обеспечение. После установки необходимо настроить компоненты и (для некоторых веб-движков) доустановить дополнительные компоненты.  
'''Внимание:''' этот пакет лишь установит программное обеспечение. После установки необходимо настроить компоненты и (для некоторых веб-движков) доустановить дополнительные компоненты.  


* [http://packages.altlinux.org/en/search?utf8=%E2%9C%93&branch=Sisyphus&query=%5Ephp5-* Список доступных компонентов для PHP5]
* [https://packages.altlinux.org/en/search?utf8=%E2%9C%93&branch=sisyphus&arch=&query=php7-* Список доступных компонентов для PHP7]
 
== Службы  ==
 
Apache2 — '''httpd2''':
chkconfig httpd2 on
service httpd2 start
 
MySQL — '''mysqld''':
chkconfig mysqld on
service mysqld start
 
Примечание:
* поддержка PHP встроена в Apache2, поэтому запускается вместе с ним ecли модуль mod_php установлен (может иметь разные версии - mod_php7 или mod_php8.1)
* указанные команды работают как в [[Sysvinit]], так и в [[Systemd]]
 
== Видеоуроки от Саломатина ==
 
Основная тема: [http://forum.altlinux.org/index.php/topic,29114.0.html Веб-серверы. ALT Linux 7.0 Server - лабораторные работы]
 
=== [http://forum.altlinux.org/index.php/topic,29114.msg203898.html#msg203898 Apache2  Первоначальная установка. Запуск статической страницы] ===
 
* http://salomatin.ru/httpd-L1.ogv
* http://youtu.be/qWAkkE8COvI
 
=== [http://forum.altlinux.org/index.php/topic,29114.msg203899.html#msg203899 Apache2 Запуск PHP скриптов] ===
* http://salomatin.ru/httpd-L2.ogv
* http://youtu.be/8Hl7pqorqgM
 
== Включение PHP ==
 
a2enmod mod_php7
service httpd2 restart
 
== Установка LAMP на локальный сервер для разработки (руководство) ==
 
'''Цель:'''
Поднять сервер, пригодный и удобный для разработки в среде LAMP (Linux Apache PHP Mysql/Mariadb) на локальном компьютере. Подойдет начинающим пользователям, которые хотят писать сайты и веб-приложения
на PHP. Это замечательная альтернатива готовым решениям типа XAMPP, OpenServer или забытый уже Denwer.
 
'''Преимущества такого подхода (PHP-FPM на локале):'''
* Возможность менять версию PHP для разных проектов
* Полный контроль над Вашим сервером стандартными средствами
* Никаких проблем с правами на файлы. Работаем просто от пользователя
* При доп. настройке несложно будет тестить например на мобильном
* легко добавлять/удалять домены
* хранить Ваши проекты там, где Вам удобно на диске
 
'''Безопасность'''
Все что описано в данном руководстве подходит только для создания среды локальной разработки. Не стоит применять это руководство для поднятия серверов, которые будут работать в продакшене, это небезопасно.
 
'''Исходное состояние:'''
* Cвежеустановленный и обновленный Alt Linux p10 (Делалось на Simply).
* Пользователь под которым работаем: johndoe. У Вас конечно свой.
* Каталог где хранятся наши PHP проекты: /home/johndoe/Документы/Projects
* Тестовые "сайты": каталоги test1.loc и test2.loc (лежат в проектах)
 
0. Обновляем доступные пакеты:
<pre>sudo apt-get update</pre>
<pre>sudo apt-get dist-upgrade</pre>
 
1. Создаем каталог проектов /home/johndoe/Документы/Projects
    <pre>mkdir /home/johndoe/Документы/Projects</pre>
 
2. Создаем каталоги test1.loc и test2.loc в каталоге проектов:
<pre>mkdir /home/johndoe/Документы/Projects/test1.loc</pre>
<pre>mkdir /home/johndoe/Документы/Projects/test2.loc</pre>
Создаем каталоги для логов:
<pre>mkdir /home/johndoe/Документы/Projects/test1.loc/logs</pre>
<pre>mkdir /home/johndoe/Документы/Projects/test2.loc/logs</pre>
 
Создаем каталоги собственно содержимого для веб:
<pre>mkdir /home/johndoe/Документы/Projects/test1.loc/htdocs</pre>
<pre>mkdir /home/johndoe/Документы/Projects/test2.loc/htdocs</pre>
Создаем заглушки, которые будут показывать нам версию PHP
<pre>echo "<?php phpinfo();" > /home/johndoe/Документы/Projects/test1.loc/htdocs/index.php</pre>
<pre>echo "<?php phpinfo();" > /home/johndoe/Документы/Projects/test2.loc/htdocs/index.php</pre>
 
3. Устанавливаем необходимые пакеты:
В данном случае будет установлено всё необходимое для работы веб-сервера. Обратите внимание, что будет установлено две версии PHP - 7.4 и 8.1. Мы для двух локальных "сайтов" будем использовать разные.
В Вашем случае, естественно, ставьте пакеты которые необходимы Вам.
<pre>sudo apt-get install apache2 apache2-httpd-prefork php8.1 php8.1-bz2 php8.1-curl php8.1-exif php8.1-ssh2 php8.1-fileinfo php8.1-openssl php8.1-fpm-fcgi php8.1-gd php8.1-imagick php8.1-mbstring php8.1-intl php8.1-mcrypt php8.1-pcntl php8.1-pdo php8.1-pdo_mysql php8.1-readline php8.1-xmlreader php8.1-xsl php8.1-yaml php8.1-zip php8.1-mysqli php7 php7-bz2 php7-curl php7-exif php7-mbstring php7-fileinfo php7-fpm-fcgi php7-gd php7-imagick php7-intl php7-mcrypt php7-openssl php7-pcntl php7-pdo php7-pdo_mysql php7-readline php7-ssh2 php7-xmlreader php7-xsl php7-yaml php7-zip php7-mysqli phpMyAdmin mariadb-common mariadb-server mariadb-client mariadb</pre>
 
4. Редактируем файл /etc/fpm7/php-fpm.d/www.conf
В данном случае настраиваем PHP7.
Здесь необходимо сделать так, чтобы PHP FPM запускался от юзера под
которым мы работаем, нам необходимо отредактировать следующие
параметры, то есть привести их к следующему виду (обратите внимание:
на пробелы возле знака "="):
<pre>user = johndoe
group = johndoe
listen.owner = johndoe
listen.group = johndoe
listen=/run/php7-fpm.sock</pre>
 
5. Редактируем файл /etc/fpm8.1/php-fpm.d/www.conf
В данном случае настраиваем PHP8.1.
По аналогии с предыдущим пунктом, меняем пользователя, от которого
будет работать PHP FPM 8.1
<pre>user = johndoe
group = johndoe
listen.owner = johndoe
listen.group = johndoe
listen=/run/php8.1-fpm.sock</pre>
 
6. Запускаем сервисы PHP-FPM:
<pre>sudo service php7-fpm start</pre>
<pre>sudo service php8.1-fpm start</pre>
 
7. Разрешаем запуск PHP при старте системы:
<pre>sudo systemctl enable php7-fpm</pre>
<pre>sudo systemctl enable php8.1-fpm</pre>
 
8. Создаем в /etc/httpd2/conf/include конфиг для PHP 7:
Файл называем php7-fpm.conf и у него будет след. содержимое:
<pre> # Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>
# Enable http authorization headers
<IfModule setenvif_module>
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
</IfModule>
 
<FilesMatch ".+\.ph(ar|p|tml)$">
SetHandler "proxy:unix:/run/php7-fpm.sock|fcgi://localhost/"
</FilesMatch>
 
<FilesMatch ".+\.phps$">
# Deny access to raw php sources by default
# To re-enable it's recommended to enable access to the files
# only in specific virtual host or directory
Require all denied
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(ar|p|ps|tml)$">
Require all denied
</FilesMatch>
</IfModule>
</IfModule></pre>
 
9. Создаем в /etc/httpd2/conf/include конфиг для PHP 8.1:
Файл называем php8.1-fpm.conf и у него будет след. содержимое:
 
<pre> # Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php8.c>
<IfModule proxy_fcgi_module>
# Enable http authorization headers
<IfModule setenvif_module>
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
</IfModule>
 
<FilesMatch ".+\.ph(ar|p|tml)$">
SetHandler "proxy:unix:/run/php8.1-fpm.sock|fcgi://localhost/"
</FilesMatch>
 
<FilesMatch ".+\.phps$">
# Deny access to raw php sources by default
# To re-enable it's recommended to enable access to the files
# only in specific virtual host or directory
Require all denied
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(ar|p|ps|tml)$">
Require all denied
</FilesMatch>
</IfModule>
</IfModule></pre>
 
10. Редактируем /etc/httpd2/conf/sites-available/vhosts.conf Необходимо добавить туда два виртуальных хоста для наших сайтов. Следует помнить, что один из них будет работать на PHP 7 а другой на php 8.1. Также, не забывайте менять johndoe на имя вашего пользователя. Добавляем следующие строки:
 
<pre><VirtualHost *:80>
ServerAdmin admin@gmail.com
DocumentRoot /home/johndoe/Документы/Projects/test1.loc/htdocs
ServerName test1.loc
ServerAlias www.test1.loc
ErrorLog /home/johndoe/Документы/Projects/test1.loc/logs/error.log
CustomLog /home/johndoe/Документы/Projects/test1.loc/logs/custom.log combined
 
DirectoryIndex index.php
 
Include /etc/httpd2/conf/include/php7-fpm.conf
 
<Directory "/home/johndoe/Документы/Projects/test1.loc/htdocs">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Require all granted
</Directory>
 
</VirtualHost>
 
# Второй хост, будет доступен по адресу http://test2.loc
# и будет работать на PHP 8.1
<VirtualHost *:80>
ServerAdmin admin@gmail.com
DocumentRoot /home/johndoe/Документы/Projects/test2.loc/htdocs
ServerName test2.loc
ServerAlias www.test2.loc
ErrorLog /home/johndoe/Документы/Projects/test2.loc/logs/error.log
CustomLog /home/johndoe/Документы/Projects/test2.loc/logs/custom.log combined
 
DirectoryIndex index.php
 
Include /etc/httpd2/conf/include/php8.1-fpm.conf
 
<Directory "/home/johndoe/Документы/Projects/test2.loc/htdocs">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Require all granted
</Directory>
 
</VirtualHost></pre>
 
11. Делаем доступным конфиг содержащий виртуальные хосты:
<pre>sudo a2ensite vhosts</pre>
12. Меняем пользователя под которым будет запускаться apache. Редактируем файл /etc/httpd2/conf/httpd2.conf и приводим строки с именем пользователя и группой к следующим:
<pre>User johndoe
Group johndoe</pre>
 
13. Разрешаем FCGI
<pre>sudo a2enmod proxy_fcgi</pre>
<pre>sudo a2enmod proxy</pre>
    <pre>sudo a2dismod mod_php8.1</pre>
    <pre>sudo a2dismod mod_php7</pre>
 
14. Редактируем файл /etc/hosts и дописываем туда:
<pre>127.0.0.1 test1.loc
127.0.0.1 test2.loc</pre>
 
15. Перезапускаем сервис apache
<pre>sudo service php7-fpm restart</pre>
<pre>sudo service php8.1-fpm restart</pre>
<pre>sudo service httpd2 restart</pre>
 
16. Если хотите чтобы apache стартовал при запуске системы, команда:
<pre>sudo systemctl httpd2 enable</pre>
 
17. Теперь проверьте в адресной строке браузера: Обязательно смотрите, чтобы браузер не исправлял на https:
<pre>http://test1.loc</pre>
<pre>http://test2.loc</pre>
 
18. Приступим к настройке phpMyAdmin который мы поставили через apt: Создадим файл /etc/httpd2/conf/extra-available/phpMyAdmin.conf со следующим содержимым:
 
<pre><IfModule alias_module>
Alias /phpmyadmin /var/www/webapps/phpMyAdmin/
<Directory /var/www/webapps/phpMyAdmin/>
Options Indexes MultiViews
AllowOverride All
Require all denied
Require ip 127.0.0.1
</Directory>
</IfModule></pre>
 
19. Разрешим конфигурацию phpMyAdmin и перезагрузим apache:
<pre>sudo a2enextra phpMyAdmin</pre>
<pre>sudo service httpd2 restart</pre>
 
20. меняем права на каталог phpMyAdmin:
<pre>sudo chown -hR johndoe:johndoe /var/www/webapps/phpMyAdmin/*</pre>
 
21. Теперь можем попробовать например http://test1.loc/phpmyadmin
 
22. Устанавливаем пароль MySQL (пароль будет mypassword)
<pre> sudo service mysqld start</pre>
<pre>sudo mysql -u root</pre>
Откроется консоль MySQL (Mariadb). Вводим поочередно:
<pre>SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mypassword');</pre>
<pre>FLUSH PRIVILEGES;</pre>
<pre>exit</pre>
 
23. Если хотим чтобы Mariadb запускалась при загрузке, то вводим
<pre>sudo systemctl enable mysqld</pre>
 
 
24. Пробуем зайти в phpmyadmin:
<pre>http://test1.loc/phpmyadmin</pre>
<pre>логин: root
пароль: mypassword</pre>
 
25. Теперь будет удобно, если сможем запускать/перезапускать/смотреть статус сервисов от непривелигированного пользователя:
создаем файл /etc/sudoers.d/lamp и заносим туда следующие строки:
 
<pre>johndoe ALL = NOPASSWD: /bin/systemctl restart httpd2, /bin/systemctl start httpd2, /bin/systemctl stop httpd2, /bin/systemctl status httpd2
johndoe ALL = NOPASSWD: /bin/systemctl restart mysqld, /bin/systemctl start mysqld, /bin/systemctl stop mysqld, /bin/systemctl status mysqld
johndoe ALL = NOPASSWD: /bin/systemctl restart php7-fpm, /bin/systemctl start php7-fpm, /bin/systemctl stop php7-fpm, /bin/systemctl status php7-fpm
johndoe ALL = NOPASSWD: /bin/systemctl restart php8.1-fpm, /bin/systemctl start php8.1-fpm, /bin/systemctl stop php8.1-fpm, /bin/systemctl status php8.1-fpm</pre>
 
26. Теперь мы можем создать скрипты для старта и останова нашего LAMP DEV сервера (создаем их где вам удобно):
Скрипт lamp_start.sh:
 
<pre>#!/bin/bash
sudo systemctl start php7-fpm
sudo systemctl start php8.1-fpm
sudo systemctl start httpd2
sudo systemctl start mysqld</pre>
 
Скрипт lamp_stop.sh:
 
<pre>#!/bin/bash
sudo systemctl stop php7-fpm
sudo systemctl stop php8.1-fpm
sudo systemctl stop httpd2
sudo systemctl stop mysqld</pre>
 
Обязательно сделайте для скриптов возможность выполнения чтобы их возможно было запускать!
После этого Вы можете создать где нибудь значки запуска например в панели или на рабочем столе, и одним кликом мыши запускать или останавливать Ваш DEV LAMP сервер.
 
Готово. Теперь Вы можете использовать локальный сервер для разработки веб-приложений в среде LAMP. Если понадобится добавить например третий домен, то необходимо будет:
 
1. Добавить его в файл /etc/hosts
<pre>127.0.0.1 test3.loc</pre>
 
2. Добавить еще один virtualhost в /etc/httpd2/conf/sites-available/vhosts.conf
<pre> # Третий хост, будет доступен по адресу http://test3.loc
# и будет работать на PHP 8.1
<VirtualHost *:80>
ServerAdmin admin@gmail.com
DocumentRoot /home/johndoe/Документы/Projects/test3.loc/htdocs
ServerName test3.loc
ServerAlias www.test3.loc
ErrorLog /home/johndoe/Документы/Projects/test3.loc/logs/error.log
CustomLog /home/johndoe/Документы/Projects/test3.loc/logs/custom.log combined
 
DirectoryIndex index.php
 
Include /etc/httpd2/conf/include/php8.1-fpm.conf
# Include /etc/httpd2/conf/include/php7-fpm.conf
 
<Directory "/home/johndoe/Документы/Projects/test3.loc/htdocs">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
 
</VirtualHost></pre>
 
3. Создать каталог хоста в проектах
 
<pre>mkdir /home/johndoe/Документы/Projects/test3.loc</pre>
<pre>mkdir /home/johndoe/Документы/Projects/test3.loc/logs</pre>
<pre>mkdir /home/johndoe/Документы/Projects/test3.loc/htdocs</pre>
<pre>echo "<?php phpinfo();" > /home/johndoe/Документы/Projects/test3.loc/htdocs/index.php</pre>
 
<pre>sudo service httpd2 restart</pre>
 
Конечно, при желании всё возможно автоматизировать скриптами. Также возможно при помощи systemd разрешить запуск сервисов не от суперпользователя.
 


== Ссылки ==
== Ссылки ==
Строка 18: Строка 370:
* https://help.ubuntu.com/community/ApacheMySQLPHP
* https://help.ubuntu.com/community/ApacheMySQLPHP


 
{{Category navigation|title=Руководства|category=Руководства|sortkey={{SUBPAGENAME}}}}
[[Категория:Руководства]]

Текущая версия от 16:51, 24 июня 2022

Это руководство поможет установить сервер LAMP (Linux+Apache+MySQL+PHP) на ALT Linux на базе Apache 2, PHP 5 и MySQL 5.0.

Примечание: Новые версии пакета устанавливают Apache 2, PHP 7 и Mariadb.


Установка (PHP как модуль Apache)

Подключите репозиторий (в Интернете или на диске) и выполните

apt-get update
apt-get install lamp-server

Внимание: этот пакет лишь установит программное обеспечение. После установки необходимо настроить компоненты и (для некоторых веб-движков) доустановить дополнительные компоненты.

Службы

Apache2 — httpd2:

chkconfig httpd2 on
service httpd2 start

MySQL — mysqld:

chkconfig mysqld on
service mysqld start

Примечание:

  • поддержка PHP встроена в Apache2, поэтому запускается вместе с ним ecли модуль mod_php установлен (может иметь разные версии - mod_php7 или mod_php8.1)
  • указанные команды работают как в Sysvinit, так и в Systemd

Видеоуроки от Саломатина

Основная тема: Веб-серверы. ALT Linux 7.0 Server - лабораторные работы

Apache2 Первоначальная установка. Запуск статической страницы

Apache2 Запуск PHP скриптов

Включение PHP

a2enmod mod_php7
service httpd2 restart

Установка LAMP на локальный сервер для разработки (руководство)

Цель: Поднять сервер, пригодный и удобный для разработки в среде LAMP (Linux Apache PHP Mysql/Mariadb) на локальном компьютере. Подойдет начинающим пользователям, которые хотят писать сайты и веб-приложения на PHP. Это замечательная альтернатива готовым решениям типа XAMPP, OpenServer или забытый уже Denwer.

Преимущества такого подхода (PHP-FPM на локале):

  • Возможность менять версию PHP для разных проектов
  • Полный контроль над Вашим сервером стандартными средствами
  • Никаких проблем с правами на файлы. Работаем просто от пользователя
  • При доп. настройке несложно будет тестить например на мобильном
  • легко добавлять/удалять домены
  • хранить Ваши проекты там, где Вам удобно на диске

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

Исходное состояние:

  • Cвежеустановленный и обновленный Alt Linux p10 (Делалось на Simply).
  • Пользователь под которым работаем: johndoe. У Вас конечно свой.
  • Каталог где хранятся наши PHP проекты: /home/johndoe/Документы/Projects
  • Тестовые "сайты": каталоги test1.loc и test2.loc (лежат в проектах)

0. Обновляем доступные пакеты:

sudo apt-get update
sudo apt-get dist-upgrade

1. Создаем каталог проектов /home/johndoe/Документы/Projects

mkdir /home/johndoe/Документы/Projects

2. Создаем каталоги test1.loc и test2.loc в каталоге проектов:

mkdir /home/johndoe/Документы/Projects/test1.loc
mkdir /home/johndoe/Документы/Projects/test2.loc

Создаем каталоги для логов:

mkdir /home/johndoe/Документы/Projects/test1.loc/logs
mkdir /home/johndoe/Документы/Projects/test2.loc/logs

Создаем каталоги собственно содержимого для веб:

mkdir /home/johndoe/Документы/Projects/test1.loc/htdocs
mkdir /home/johndoe/Документы/Projects/test2.loc/htdocs

Создаем заглушки, которые будут показывать нам версию PHP

echo "<?php phpinfo();" > /home/johndoe/Документы/Projects/test1.loc/htdocs/index.php
echo "<?php phpinfo();" > /home/johndoe/Документы/Projects/test2.loc/htdocs/index.php

3. Устанавливаем необходимые пакеты: В данном случае будет установлено всё необходимое для работы веб-сервера. Обратите внимание, что будет установлено две версии PHP - 7.4 и 8.1. Мы для двух локальных "сайтов" будем использовать разные. В Вашем случае, естественно, ставьте пакеты которые необходимы Вам.

sudo apt-get install apache2 apache2-httpd-prefork php8.1 php8.1-bz2 php8.1-curl php8.1-exif php8.1-ssh2 php8.1-fileinfo php8.1-openssl php8.1-fpm-fcgi php8.1-gd php8.1-imagick php8.1-mbstring php8.1-intl php8.1-mcrypt php8.1-pcntl php8.1-pdo php8.1-pdo_mysql php8.1-readline php8.1-xmlreader php8.1-xsl php8.1-yaml php8.1-zip php8.1-mysqli php7 php7-bz2 php7-curl php7-exif php7-mbstring php7-fileinfo php7-fpm-fcgi php7-gd php7-imagick php7-intl php7-mcrypt php7-openssl php7-pcntl php7-pdo php7-pdo_mysql php7-readline php7-ssh2 php7-xmlreader php7-xsl php7-yaml php7-zip php7-mysqli phpMyAdmin mariadb-common mariadb-server mariadb-client mariadb

4. Редактируем файл /etc/fpm7/php-fpm.d/www.conf В данном случае настраиваем PHP7. Здесь необходимо сделать так, чтобы PHP FPM запускался от юзера под которым мы работаем, нам необходимо отредактировать следующие параметры, то есть привести их к следующему виду (обратите внимание: на пробелы возле знака "="):

user = johndoe
group = johndoe
listen.owner = johndoe
listen.group = johndoe
listen=/run/php7-fpm.sock

5. Редактируем файл /etc/fpm8.1/php-fpm.d/www.conf В данном случае настраиваем PHP8.1. По аналогии с предыдущим пунктом, меняем пользователя, от которого будет работать PHP FPM 8.1

user = johndoe
group = johndoe
listen.owner = johndoe
listen.group = johndoe
listen=/run/php8.1-fpm.sock

6. Запускаем сервисы PHP-FPM:

sudo service php7-fpm start
sudo service php8.1-fpm start

7. Разрешаем запуск PHP при старте системы:

sudo systemctl enable php7-fpm
sudo systemctl enable php8.1-fpm

8. Создаем в /etc/httpd2/conf/include конфиг для PHP 7: Файл называем php7-fpm.conf и у него будет след. содержимое:

	# Redirect to local php-fpm if mod_php is not available
	<IfModule !mod_php7.c>
	<IfModule proxy_fcgi_module>
		# Enable http authorization headers
		<IfModule setenvif_module>
			SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
		</IfModule>

		<FilesMatch ".+\.ph(ar|p|tml)$">
			SetHandler "proxy:unix:/run/php7-fpm.sock|fcgi://localhost/"
		</FilesMatch>

		<FilesMatch ".+\.phps$">
			# Deny access to raw php sources by default
			# To re-enable it's recommended to enable access to the files
			# only in specific virtual host or directory
			Require all denied
		</FilesMatch>
		# Deny access to files without filename (e.g. '.php')
		<FilesMatch "^\.ph(ar|p|ps|tml)$">
			Require all denied
		</FilesMatch>
	</IfModule>
	</IfModule>

9. Создаем в /etc/httpd2/conf/include конфиг для PHP 8.1: Файл называем php8.1-fpm.conf и у него будет след. содержимое:

	# Redirect to local php-fpm if mod_php is not available
	<IfModule !mod_php8.c>
	<IfModule proxy_fcgi_module>
		# Enable http authorization headers
		<IfModule setenvif_module>
			SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
		</IfModule>

		<FilesMatch ".+\.ph(ar|p|tml)$">
			SetHandler "proxy:unix:/run/php8.1-fpm.sock|fcgi://localhost/"
		</FilesMatch>

		<FilesMatch ".+\.phps$">
			# Deny access to raw php sources by default
			# To re-enable it's recommended to enable access to the files
			# only in specific virtual host or directory
			Require all denied
		</FilesMatch>
		# Deny access to files without filename (e.g. '.php')
		<FilesMatch "^\.ph(ar|p|ps|tml)$">
			Require all denied
		</FilesMatch>
	</IfModule>
	</IfModule>

10. Редактируем /etc/httpd2/conf/sites-available/vhosts.conf Необходимо добавить туда два виртуальных хоста для наших сайтов. Следует помнить, что один из них будет работать на PHP 7 а другой на php 8.1. Также, не забывайте менять johndoe на имя вашего пользователя. Добавляем следующие строки:

<VirtualHost *:80>
	ServerAdmin admin@gmail.com
	DocumentRoot /home/johndoe/Документы/Projects/test1.loc/htdocs
	ServerName test1.loc
	ServerAlias www.test1.loc
	ErrorLog /home/johndoe/Документы/Projects/test1.loc/logs/error.log
	CustomLog /home/johndoe/Документы/Projects/test1.loc/logs/custom.log combined

	DirectoryIndex index.php

	Include /etc/httpd2/conf/include/php7-fpm.conf

	<Directory "/home/johndoe/Документы/Projects/test1.loc/htdocs">
	    Options Indexes FollowSymLinks MultiViews
	    AllowOverride All
	    Require all granted
	</Directory>

</VirtualHost>

# Второй хост, будет доступен по адресу http://test2.loc
# и будет работать на PHP 8.1
<VirtualHost *:80>
	ServerAdmin admin@gmail.com
	DocumentRoot /home/johndoe/Документы/Projects/test2.loc/htdocs
	ServerName test2.loc
	ServerAlias www.test2.loc
	ErrorLog /home/johndoe/Документы/Projects/test2.loc/logs/error.log
	CustomLog /home/johndoe/Документы/Projects/test2.loc/logs/custom.log combined

	DirectoryIndex index.php

	Include /etc/httpd2/conf/include/php8.1-fpm.conf

	<Directory "/home/johndoe/Документы/Projects/test2.loc/htdocs">
	    Options Indexes FollowSymLinks MultiViews
	    AllowOverride All
	    Require all granted
	</Directory>

</VirtualHost>

11. Делаем доступным конфиг содержащий виртуальные хосты:

sudo a2ensite vhosts

12. Меняем пользователя под которым будет запускаться apache. Редактируем файл /etc/httpd2/conf/httpd2.conf и приводим строки с именем пользователя и группой к следующим:

User johndoe
Group johndoe

13. Разрешаем FCGI

sudo a2enmod proxy_fcgi
sudo a2enmod proxy
sudo a2dismod mod_php8.1
sudo a2dismod mod_php7

14. Редактируем файл /etc/hosts и дописываем туда:

127.0.0.1	test1.loc
127.0.0.1	test2.loc

15. Перезапускаем сервис apache

sudo service php7-fpm restart
sudo service php8.1-fpm restart
sudo service httpd2 restart

16. Если хотите чтобы apache стартовал при запуске системы, команда:

sudo systemctl httpd2 enable

17. Теперь проверьте в адресной строке браузера: Обязательно смотрите, чтобы браузер не исправлял на https:

http://test1.loc
http://test2.loc

18. Приступим к настройке phpMyAdmin который мы поставили через apt: Создадим файл /etc/httpd2/conf/extra-available/phpMyAdmin.conf со следующим содержимым:

<IfModule alias_module>
	 Alias /phpmyadmin /var/www/webapps/phpMyAdmin/
	<Directory /var/www/webapps/phpMyAdmin/>
		Options Indexes MultiViews
		AllowOverride All
		Require all denied
		Require ip 127.0.0.1
	</Directory>
</IfModule>

19. Разрешим конфигурацию phpMyAdmin и перезагрузим apache:

sudo a2enextra phpMyAdmin
sudo service httpd2 restart

20. меняем права на каталог phpMyAdmin:

sudo chown -hR johndoe:johndoe /var/www/webapps/phpMyAdmin/*

21. Теперь можем попробовать например http://test1.loc/phpmyadmin

22. Устанавливаем пароль MySQL (пароль будет mypassword)

 sudo service mysqld start
sudo mysql -u root

Откроется консоль MySQL (Mariadb). Вводим поочередно:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mypassword');
FLUSH PRIVILEGES;
exit

23. Если хотим чтобы Mariadb запускалась при загрузке, то вводим

sudo systemctl enable mysqld


24. Пробуем зайти в phpmyadmin:

http://test1.loc/phpmyadmin
логин: root
пароль: mypassword

25. Теперь будет удобно, если сможем запускать/перезапускать/смотреть статус сервисов от непривелигированного пользователя: создаем файл /etc/sudoers.d/lamp и заносим туда следующие строки:

johndoe ALL = NOPASSWD: /bin/systemctl restart httpd2, /bin/systemctl start httpd2, /bin/systemctl stop httpd2, /bin/systemctl status httpd2
johndoe ALL = NOPASSWD: /bin/systemctl restart mysqld, /bin/systemctl start mysqld, /bin/systemctl stop mysqld, /bin/systemctl status mysqld
johndoe ALL = NOPASSWD: /bin/systemctl restart php7-fpm, /bin/systemctl start php7-fpm, /bin/systemctl stop php7-fpm, /bin/systemctl status php7-fpm
johndoe ALL = NOPASSWD: /bin/systemctl restart php8.1-fpm, /bin/systemctl start php8.1-fpm, /bin/systemctl stop php8.1-fpm, /bin/systemctl status php8.1-fpm

26. Теперь мы можем создать скрипты для старта и останова нашего LAMP DEV сервера (создаем их где вам удобно): Скрипт lamp_start.sh:

#!/bin/bash
sudo systemctl start php7-fpm
sudo systemctl start php8.1-fpm
sudo systemctl start httpd2
sudo systemctl start mysqld

Скрипт lamp_stop.sh:

#!/bin/bash
sudo systemctl stop php7-fpm
sudo systemctl stop php8.1-fpm
sudo systemctl stop httpd2
sudo systemctl stop mysqld

Обязательно сделайте для скриптов возможность выполнения чтобы их возможно было запускать! После этого Вы можете создать где нибудь значки запуска например в панели или на рабочем столе, и одним кликом мыши запускать или останавливать Ваш DEV LAMP сервер.

Готово. Теперь Вы можете использовать локальный сервер для разработки веб-приложений в среде LAMP. Если понадобится добавить например третий домен, то необходимо будет:

1. Добавить его в файл /etc/hosts

127.0.0.1	test3.loc

2. Добавить еще один virtualhost в /etc/httpd2/conf/sites-available/vhosts.conf

		# Третий хост, будет доступен по адресу http://test3.loc
		# и будет работать на PHP 8.1
		<VirtualHost *:80>
			ServerAdmin admin@gmail.com
			DocumentRoot /home/johndoe/Документы/Projects/test3.loc/htdocs
			ServerName test3.loc
			ServerAlias www.test3.loc
			ErrorLog /home/johndoe/Документы/Projects/test3.loc/logs/error.log
			CustomLog /home/johndoe/Документы/Projects/test3.loc/logs/custom.log combined

			DirectoryIndex index.php

			Include /etc/httpd2/conf/include/php8.1-fpm.conf
			# Include /etc/httpd2/conf/include/php7-fpm.conf

			<Directory "/home/johndoe/Документы/Projects/test3.loc/htdocs">
				Options Indexes FollowSymLinks MultiViews
				AllowOverride All
				Require all granted
			</Directory>

		</VirtualHost>

3. Создать каталог хоста в проектах

mkdir /home/johndoe/Документы/Projects/test3.loc
mkdir /home/johndoe/Документы/Projects/test3.loc/logs
mkdir /home/johndoe/Документы/Projects/test3.loc/htdocs
echo "<?php phpinfo();" > /home/johndoe/Документы/Projects/test3.loc/htdocs/index.php
sudo service httpd2 restart

Конечно, при желании всё возможно автоматизировать скриптами. Также возможно при помощи systemd разрешить запуск сервисов не от суперпользователя.


Ссылки