OLeg
11:56 25-02-2022Установил все по порядку, но сайт доступен по адресу http://newdomain/newdomain/, а при открытии http://newdomain/ отображается список папок. Помогите решить
Хаюшки! В данной статье рассмотрена установка и настройка локального веб сервера со связкой apache, php, mysql в операционной системе linux. Погнали!
Если вы веб программист то наверняка знаете такие программы как denver или open server. Они по сути создают на ПК локальный сервер и позволяют гибко им управлять. В linux к сожалению подобных программ нет и здесь требуется немного другой подход к развертыванию локального сервера.
Для начала вам необходимо скачать пакеты XAMPP для linux.
По итогу скачается подобный файл xampp-linux-x64-7.2.29-1-installer.run который нужно сделать исполняемым и запустить! Открываем консоль в папке с данным файлом. И выполняем команду:
sudo chmod +x xampp-linux-x64-7.2.29-1-installer.run
Данная команда сделаем файл исполняемым. И затем запустим под root правами.
sudo ./xampp-linux-x64-7.2.29-1-installer.run
Далее откроются окна установки пройдя которые по данному пути '/opt/lampp' будут установлены все файлы локального сервера.
Для проверки можно запустить локальный сервер выполнив в консоли команду:
sudo /opt/lampp/lampp start
и затем открыть в браузере следующий адрес 'http://localhost/'. Перейдя по такому адресу 'http://localhost/phpmyadmin/' откроется панель phpmyadmin для работы с базами данных Mysql.
Чтобы остановить локальный сервер достаточно выполнить команду.
sudo /opt/lampp/lampp stop
Для перезапуска используется команда restart.
sudo /opt/lampp/lampp restart
Данная команда сначала останавливает локальный сервер а затем запускает.
Идем далее. Рассмотрим как разместить сайт на нашем локальном сервере.
Переходим в папку 'htdocs', она находится по такому пути '/opt/lampp/htdocs'. В данной директории размещаются локальные хосты сервера. Если вы работали с open server то эта альтернатива папке 'domains'.
Если директория htdocs не пустая, то все от туда удаляем и создаем новую папку 'newdomain' это будет наш локальный домен сайта. В папке создадим файл index.php в который просто пропишем.
<?php
phpinfo();
Данный код выведет в консоль информацию о конфигурациях php.
Затем необходимо добавить наш новый домен (newdomain) в конфигурации сервера. Находим и открываем файл хостов 'hosts' (/etc/hosts).
Для начала можно все из него удалить и прописать такую вот строку.
127.0.0.1 localhost lampp xampp newdomain
127.0.0.1 localhost lampp xampp - это строка стандартная и постоянная, после нее идет перечисление хостов(доменов) которые мы хотим добавить. В нашем случае домен один это newdomain. Если доменов несколько то просто перечисляем их через пробел, пример.
127.0.0.1 localhost lampp xampp newdomain domain2 domain3 domain4
С этим разобрались! Сохраняем изменения в файле hosts и переходим к файлу httpd-vhosts.conf (/opt/lampp/etc/extra/httpd-vhosts.conf).
В нем также все удаляем и прописываем следующее.
<VirtualHost 127.0.0.1:80>
ServerAdmin admin@mysite1.dev
DocumentRoot '/opt/lampp/htdocs/newdomain/'
ServerName newdomain
ServerAlias www.newdomain
ErrorLog '/opt/lampp/logs/mysite1.dev-error_log'
CustomLog 'logs/mysite1.dev-access_log' common
<Directory />
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Здесь нас интересуют строки:
DocumentRoot '/opt/lampp/htdocs/newdomain/' - указывается путь к файлам нашего сайта на хосте 'newdomain'.
ServerName newdomain - указывается домен 'newdomain'
ServerAlias www.newdomain - указывается поддомен www 'newdomain'
Остальные строки можно всегда оставлять как есть. Еще обратите внимание '127.0.0.1:80' что мы подключаемся по 80 порту http.
Сохранив изменения можно запускать локальный сервер.
sudo /opt/lampp/lampp start
После запуска, в адресной строке браузера вводим адрес нашего локального хоста 'http://newdomain' и вуаля. Сайт запущен!
Результатом будет вывод на странице конфигураций php.
Это конечно все хорошо но что если мы к примеру хотим запустить сайт под https? Рассмотрим как это можно сделать!
Для закрепления материала создадим еще один сайт.
В папке htdocs создаем директорию 'site' в ней файл index.php
<?php
echo "Этот сайт может работать по http и https";
Обновляем файл 'hosts'
127.0.0.1 localhost lampp xampp newdomain site
Обновляем файл 'httpd-vhosts.conf'
<VirtualHost 127.0.0.1:80>
ServerAdmin admin@newdomain.dev
DocumentRoot '/opt/lampp/htdocs/newdomain/'
ServerName newdomain
ServerAlias www.newdomain
ErrorLog '/opt/lampp/logs/mysite1.dev-error_log'
CustomLog 'logs/mysite1.dev-access_log' common
<Directory />
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 127.0.0.1:80>
ServerAdmin admin@newdomain.dev
DocumentRoot '/opt/lampp/htdocs/site/'
ServerName site
ServerAlias www.site
ErrorLog '/opt/lampp/logs/mysite1.dev-error_log'
CustomLog 'logs/mysite1.dev-access_log' common
<Directory />
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 127.0.0.1:443>
DocumentRoot "/opt/lampp/htdocs/site/"
ServerName site:443
ServerAdmin you@example.com
ErrorLog "/opt/lampp/logs/error_log"
TransferLog "/opt/lampp/logs/access_log"
SSLEngine on
SSLCertificateFile "/opt/lampp/etc/ssl.crt/server.crt"
SSLCertificateKeyFile "/opt/lampp/etc/ssl.key/server.key"
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/opt/lampp/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
Обратите внимание что для хоста 'site' мы прописали две конфигурации для http '127.0.0.1:80' и https '127.0.0.1:443'.
После сохранения изменений перезапускаем сервер.
sudo /opt/lampp/lampp restart
И пробуем перейти на сайт 'https://site/' при первом переходе у вас может вылезти предупреждение о небезопасности соединения, игнорируем его и переходим.
В результате сайт будет работать под https. В некоторых браузерах в частности google chrome рядом с адресной строкой может отображаться что соединение не защищено.
На это можно не обращать особого внимания так как основные технологии которые работают только под https будут работать и этого вполне достаточно для тестирования.
Вот все что я вам хотел рассказать про работу с локальным сервером (apache + php + mysql) в linux. В принципе этих знаний уже достаточно для работы веб программисту.
Напоследок хочу дать небольшой бонус по автоматизированному запуску сайтов на локальном сервере. Согласитесь что так добавлять новые сайты на локальный сервер не очень удобно, необходимо как минимум внести изменения в два файла hosts и httpd-vhosts.conf. В качестве решения этой проблемы мной был разработан скрипт на Python для автоматического запуска.
Файл web-server.py и его содержимое:
#!/usr/bin/env python3
import os
import subprocess
host = open('/etc/hosts', 'w')
vhost = open('/opt/lampp/etc/extra/httpd-vhosts.conf', 'w')
text_hosts="127.0.0.1 localhost lampp xampp "
text_vhosts=""
os.chdir('/opt/lampp/htdocs/')
for folder in os.listdir('.'):
subprocess.call('chmod 777 '+folder, shell=True)
text_hosts = text_hosts+" "+folder
text_vhosts = text_vhosts+"\r\n<VirtualHost 127.0.0.1:80>\r\nServerAdmin admin@mysite1.dev\r\nDocumentRoot '/opt/lampp/htdocs/"+folder+"/'\r\nServerName "+folder+"\r\nServerAlias www."+folder+"\r\nErrorLog '/opt/lampp/logs/mysite1.dev-error_log'\r\nCustomLog 'logs/mysite1.dev-access_log' common\r\n<Directory />\r\nAllowOverride All\r\nRequire all granted\r\n</Directory>\r\n</VirtualHost>\r\n\r\n<VirtualHost 127.0.0.1:443>\r\nDocumentRoot '/opt/lampp/htdocs/"+folder+"/'\r\nServerName "+folder+":443\r\nServerAdmin you@example.com\r\nErrorLog '/opt/lampp/logs/error_log'\r\nTransferLog '/opt/lampp/logs/access_log'\r\nSSLEngine on\r\nSSLCertificateFile '/opt/lampp/etc/ssl.crt/server.crt'\r\nSSLCertificateKeyFile '/opt/lampp/etc/ssl.key/server.key'\r\n<FilesMatch '\.(cgi|shtml|phtml|php)$'>\r\n SSLOptions +StdEnvVars\r\n</FilesMatch>\r\n<Directory '/opt/lampp/cgi-bin'>\r\nSSLOptions +StdEnvVars\r\n</Directory>\r\n</VirtualHost>\r\n\r\n"
host.write(text_hosts)
vhost.write(text_vhosts)
host.close()
vhost.close()
subprocess.call('sudo /opt/lampp/lampp restart', shell=True)
Кто разбирается в Python для тех не составит особого труда разобраться что делает данный код. При запуске данного файла перебираются все папки в директории htdocs при этом данные в 'hosts' и 'httpd-vhosts.conf' обновляются, локальный сервер перезапускается.
Для большего удобства файл можно сделать исполняемым.
sudo chmod +x web-server.py
и разместить в '/usr/bin'. В результате этих действий вы сможете запускать и перезапускать локальный сервер простой командой в консоли.
web-server.py
В результате вам больше не придется лазать в файлы 'hosts' и 'httpd-vhosts.conf'. И заметьте что каждый сайт на локальном хосте будет доступен под http и https.
На этом у меня все. Надеюсь данная статья оказалась для вас интересной и полезной! Не забывайте подписываться в группу Вконтакте и переходите на мой канал Youtube.
Желаю вам успехов и удачи! Пока.
Внимание!!! Все комментарии проходят модерацию перед публикацией!
Установил все по порядку, но сайт доступен по адресу http://newdomain/newdomain/, а при открытии http://newdomain/ отображается список папок. Помогите решить