- Локальный веб-сервер под Linux, с автоматическим поднятием хостов и переключением версий PHP
- Цели
- Базовая установка и настройка веб-сервера
- Базовая установка и настройка веб-сервера
- Установка
- Настройка Apache
- Персональные настройки
- Настройка виртуальных хостов
- Твики и трюки
- Ускоряем сервер (Opcode Cacher)
- Выключаем автозапуск apache2 и mysql
- Выключаем автозапуск Apache:
- Выключаем автозапуск MySQL:
- Разрешаем подключение к MySQL из Мира
Локальный веб-сервер под Linux, с автоматическим поднятием хостов и переключением версий PHP
Скорее всего какие-то части этой статьи уже знакомы многим хаброжителям, но в связи с покупкой нового рабочего ноутбука я решил собрать все крупинки воедино и организовать удобное средство для разработки. Мне часто приходится работать со множеством маленьких проектов, с разными версиями PHP, часто переводить старые проекты на новые версии. В далёком прошлом, когда я был пользователем Windows то использовал OpenServer. Но с переходом на Linux мне нехватало той простоты создания хостов и переключений версий которые были в нём. Поэтому пришлось сделать еще более удобное решение на Linux =)
Цели
- Использовать текущий на момент написания статьи софт
- Чтоб разграничить локальные домены, будем использовать специальный домен .loc
- Переключения версий PHP реализуем через поддомен c помощью fast-cgi
- Автоматическое создание хоста с помощью vhost_alias и dnsmasq
будет запущен тот же файл но уже с версией PHP 7.2.7
Другие версии доставляются аналогичным описанным ниже способом.
Для создания еще одного сайта просто создаем в /var/www/ папку имеющую окончание .loc, внутри которой должна быть папка public_html являющаяся корнем сайта
Вот собственно и все. Как без дополнительных мучений, перезапусков, и редактирований конфигов имеем автоматическую систему для работы с сайтами.
Всё это я проверну на LinuxMint19, он на базе Ubuntu18.04, так что с ним все будет аналогично.
Для начала поставим необходимые пакеты
sudo apt update sudo apt install build-essential pkg-config libxml2-dev libfcgi-dev apache2 libapache2-mod-fcgid postfix
Postfix ставим в качестве плюшки, как простое решение(в мастере установки, всё по умолчанию выбираем) для отправки почты с локальной машины.
Так как это локальная разработка и я единственный пользователь. То мне удобней перенести папку с проектами в мою домашнюю дерикторию. Она у меня маунтится отдельным диском и мигрирует при переустановке системы. Самый простой способ это создать ссылку, тогда не нужно менять пути в настройках да и путь привычный для всех.
Скопируем папку созданную апачем в домашний каталог, создадим на ее месте ссылку, не забыв поменять пользователя на себя и обменяться группами с апачем.
sudo mv /var/www/ ~/www sudo ln -s ~/www /var/www sudo chown $USER:$USER -R ~/www sudo usermod -a -G www-data $USER sudo usermod -a -G $USER www-data
Создадим папку в которой будем собирать исходники PHP для разных версий
sudo mkdir /usr/local/src/php-build
Также нам понадобится папки для CGI скриптов
И runtime папка для этих же скриптов, с правами
sudo mkdir /var/run/mod_fcgid sudo chmod 777 /var/run/mod_fcgid
И так как каталог у нас находится в оперативной памяти, добавим его создание при старте системы, для этого добавим в /etc/tmpfiles.d/fcgid.conf
#Type Path Mode UID GID Age Argument d /var/run/mod_fcgid 0755 www-data www-data - -
У меня dnsmasq-base идет с коробки, если нет то его всегда можно доставить.
sudo updatedb locate dnsmasq.conf
Либо если он как и у меня является частью NetworkManager то создать новый файл конфигурации в /etc/NetworkManager/dnsmasq.d/local.conf
Добавим в него строчку для перенаправление нашего локального домена на локальную машину.
Также нужно включить необходимые модули апача
sudo a2enmod fcgid vhost_alias actions rewrite
Предварительная подготовка завершена, приступаем к сборке различных локальных версий PHP. Для каждой версии PHP проделываем следующие 4 шага. На примере 5.6.36
1. Скачиваем исходники нужной версии и распаковываем их
cd /usr/local/src/php-build sudo wget http://pl1.php.net/get/php-5.6.36.tar.bz2/from/this/mirror -O php-5.6.36.tar.bz2 sudo tar jxf php-5.6.36.tar.bz2
2. Cобираем из исходников нужную версию PHP, и помещаем ее в /opt/php-5.6.36
sudo mkdir /opt/php-5.6.36 cd php-5.6.36 sudo ./configure --prefix=/opt/php-5.6.36 --with-config-file-path=/opt/php-5.6.36 --enable-cgi sudo make sudo make install sudo make clean
3. Создаем CGI для обработки этой версии в /var/www/cgi-bin/php-5.6.36.fcgi
#!/bin/bash PHPRC=/opt/php-5.6.36/php.ini PHP_CGI=/opt/php-5.6.36/bin/php-cgi PHP_FCGI_CHILDREN=8 PHP_FCGI_MAX_REQUESTS=3000 export PHPRC export PHP_FCGI_CHILDREN export PHP_FCGI_MAX_REQUESTS exec /opt/php-5.6.36/bin/php-cgi
4. Делаем файл исполняемым
sudo chmod +x /var/www/cgi-bin/php-5.6.36.fcgi
5. Добавляем экшен для обработки каждой версии в /etc/apache2/mods-available/fcgid.conf
AddHandler fcgid-script fcg fcgi fpl Action application/x-httpd-php-5.6.36 /cgi-bin/php-5.6.36.fcgi AddType application/x-httpd-php-5.6.36 .php #Action application/x-httpd-php-7.2.7 /cgi-bin/php-7.2.7.fcgi #AddType application/x-httpd-php-7.2.7 .php FcgidIPCDir /var/run/mod_fcgid FcgidProcessTableFile /var/run/mod_fcgid/fcgid_shm FcgidConnectTimeout 20 AddHandler fcgid-script .fcgi
6. Добавляем правило для обработки каждой версии в /etc/apache2/sites-available/000-default.conf
#Универсальный ServerNamе ServerAlias *.loc #Алиас для CGI скриптов ScriptAlias /cgi-bin /var/www/cgi-bin #Универсальный DocumentRoot VirtualDocumentRoot /var/www/%2+/public_html #Директория тоже должна быть универсальной Options +ExecCGI -Indexes AllowOverride All Order allow,deny Allow from all #Ниже все условия для каждой из версий =~ /56\..*?\.loc/"> SetHandler application/x-httpd-php-5.6.36 #По умолчанию, если версия не указанна, запускаем на последней SetHandler application/x-httpd-php-7.2.7 ErrorLog $/error.log CustomLog $/access.log combined
Ну вот и всё. Осталось только перезапустить apache и dnsmasq и пользоваться
sudo service apache2 restart sudo service network-manager restart
Базовая установка и настройка веб-сервера
Решил оформить наконец своё HOW-TO на форуме в нашей вики, т.к. это правильнее и форматирование здесь удобнее. Я постарался изложить материал кратко, намеренно упустив подробности, которые не относятся напрямую к сути (вроде того, что конфиги сервера нужно править от рута). Считаем, что читатель имеет базовый уровень работы с линукс-системами.
Просьба к редакторам тоже там отписываться
Базовая установка и настройка веб-сервера
Установка
apt-get install lamp-server^ phpmyadmin
phpmyadmin — веб-интерфейс для управления БД MySQL.
Иногда при копипасте кода установки может вылезать ошибка, что какой-то пакет не найден. На самом деле все правильно, просто глюк копипаста. Решение вбить руками команду или попробовать стереть название проблемного пакета вместе с пробелами по краям и вбить руками только его.
Настройка Apache
Персональные настройки
Начиная с версии Ubuntu Saucy (13.10) свои настройки следует писать в /etc/apache2/conf-available, активировать настройки следует с помощью команды a2enconf.
Свои настройки следует писать в /etc/apache2/conf.d, т.е. создать там файл, например, myconf.conf и определить в нём свои настройки.
## Файл персональных настроек веб-сервера Apache ## Чтобы устранить предупреждение при перезапуске Apache (хотя в целом на производительности это не отразится) ServerName localhost ## Для того, чтобы Apache интерпретировал php и не предлагал сохранить php-файл AddType application/x-httpd-php .php .phtml ## Установка кодировки UTF-8 по умолчанию AddDefaultCharset UTF-8
Для того, чтобы так же работали файлы php, которые начинаются с «» вместо «» нужно, чтобы в /etc/php5/apache2/php.ini было short_open_tag = On
Настройка виртуальных хостов
Есть несколько способов, я же расскажу о том как повесить несколько виртуальных хостов на один IP c доступом к ним по имени сервера.
127.0.0.1 host2.server1 host1.server1
и создаём там файлы, названиями которых будут названия, создаваемых серверов, например host1.server1.conf и host2.server1.conf в эти файлы пишем (здесь показано простейшее, подробнее можно заценить в файле default):
ServerName host1.server1 DocumentRoot /var/www/host1.server1 AllowOverride All
ServerName host2.server1 DocumentRoot /var/www/host2.server1 AllowOverride All
Далее создаём симлинки на эти файлы в директории /etc/apache2/sites-enabled с помощью команды a2ensite:
a2ensite host1.server1 host2.server1
http://host1.server1 http://host2.server1
Твики и трюки
Этот раздел применять не обязательно, у вас уже всё работает после 1-го раздела. Однако вы можете найти здесь что-то полезное. Я рекомендую не обделить вниманием ускорение (opcode cacher)
Ускоряем сервер (Opcode Cacher)
Акселератор PHP — программа, ускоряющая исполнение сценариев PHP интерпретатором путём кэширования их байткода.
Начиная с версии PHP 5.5 в интерпретатор по умолчанию включён Zend OPcache. В этой связи, а также потому что данная статья описывает базовую настройку, из неё убраны описания установки php-apc и php-xcache
Выключаем автозапуск apache2 и mysql
ВАМ ЭТО ДЕЙСТВИТЕЛЬНО НУЖНО? Эти демоны стартуют в родной для себя среде в разы быстрее чем денвер в винде, думаю от 1 сек к времени загрузки ОС и 10 мб ОЗУ вам хуже не станет, а лишних телодвижений не будет…
Выключаем автозапуск Apache:
sudo update-rc.d -f apache2 remove
Выключаем автозапуск MySQL:
sudo nano /etc/init/mysql.conf
start on (net-device-up and local-filesystems and runlevel [2345])
#start on (net-device-up # and local-filesystems # and runlevel [2345])
Разрешаем подключение к MySQL из Мира
Нужно для подключения веб-сервера или другой программы, находящейся на другом сервере. В случае, если у вас они крутятся на одном сервере этого делать не нужно!
/etc/mysql/my.cnf
# # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address = 127.0.0.1
Самое простое — просто закомментировать эту строку.
Кроме этого требуется добавить пользователя, который с разных мест и из разных программ может соединяться с базой, например «admin»:
GRANT ALL PRIVILEGES ON *.* TO admin@"%" IDENTIFIED BY 'my_admin_password' WITH GRANT OPTION;
- Сайт
- Об Ubuntu
- Скачать Ubuntu
- Семейство Ubuntu
- Новости
- Форум
- Помощь
- Правила
- Документация
- Пользовательская документация
- Официальная документация
- Семейство Ubuntu
- Материалы для загрузки
- Совместимость с оборудованием
- RSS лента
- Сообщество
- Наши проекты
- Местные сообщества
- Перевод Ubuntu
- Тестирование
- RSS лента
© 2018 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.