ApacheMySQLPHP: различия между версиями
Нет описания правки |
(мелкая правка) |
||
(не показано 7 промежуточных версий этого же участника) | |||
Строка 3: | Строка 3: | ||
{{Note|Новые версии пакета устанавливают Apache 2, PHP 7 и Mariadb.}} | {{Note|Новые версии пакета устанавливают Apache 2, PHP 7 и Mariadb.}} | ||
== Установка == | == Установка (PHP как модуль Apache) == | ||
[[Install|Подключите репозиторий]] (в Интернете или на диске) и выполните | [[Install|Подключите репозиторий]] (в Интернете или на диске) и выполните | ||
Строка 25: | Строка 25: | ||
Примечание: | Примечание: | ||
* поддержка PHP встроена в Apache2, поэтому запускается вместе с ним | * поддержка PHP встроена в Apache2, поэтому запускается вместе с ним ecли модуль mod_php установлен (может иметь разные версии - mod_php7 или mod_php8.1) | ||
* указанные команды работают как в [[Sysvinit]], так и в [[Systemd]] | * указанные команды работают как в [[Sysvinit]], так и в [[Systemd]] | ||
Строка 46: | Строка 46: | ||
a2enmod mod_php7 | a2enmod mod_php7 | ||
service httpd2 restart | 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 разрешить запуск сервисов не от суперпользователя. | |||
== Ссылки == | == Ссылки == |
Текущая версия от 16:51, 24 июня 2022
Это руководство поможет установить сервер LAMP (Linux+Apache+MySQL+PHP) на ALT Linux на базе Apache 2, PHP 5 и MySQL 5.0.
Установка (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 разрешить запуск сервисов не от суперпользователя.