Для создания новых сайтов или тестирования изменений на существующих часто бывает нужен локальный web сервер. Во-первых, новый сайт лучше выкладывать уже в готовом виде, дабы не смущать потенциальных посетителей пустыми страницами, недописанными материалами. Во-вторых, новые фичи для существующих сайтов тоже лучше тестировать не на живом сайте, а на его клоне. Ну и в третьих, это позволит работать над сайтом даже при временном отсутствии доступа к интернету.
Наш тестовый локальный web сервер ставится на Ubuntu 14.04 (или на Linux Mint 17, что, в сущности, одно и то же). В более ранних версиях возможны некоторые отличия.
Локальный web сервер — введение
Итак, определимся, что нам нужно чтоб локальный web сервер работал на нашем ПК.
Ну для начала (на всякий случай, для новичков) расшифруем аббревиатуру LAMP — Linux, Apache, MySQL, PHP. Предполагается, что Linux у нас уже есть (Если нет, то ставим, не боимся. Ubuntu или Mint, например, ставится сейчас едва ли не проще, чем Винда.). Что нужно установить.
- Apache — собственно, сам web-сервер.
- MySQL — система управления базами данных (СУБД).
- PHP — язык программирования.
Если вы не являетесь гуру MySQL, и не собираетесь управлять базами в консоли, вводя команды ручками, то следующим пунктом будет
- phpMyAdmin — графический интерфейс управления СУБД MySQL
Также нужно подумать и об отправке почты с сайта — это тоже частенько приходится тестировать.
- Sendmail — почтовый сервер
Также с большой вероятностью могут понадобится некоторые библиотеки PHP. В частности
- GD — библиотека для работы с изображениями
- CURL — библиотека для работы с URL
Также стоит озаботиться удаленным доступом к нашему серверу. Если хочется получать доступ на свой домашний, локальный web сервер из любой точки земного шара (правда для этого нужен реальный внешний IP-адрес вашей квартирной сети). В общем, удобная штука. Впрочем, если все это вам не нужно, то следующий пункт опускаем.
- SSH — сервер — позволяет работать с удаленным компьютером, как с родным
Ну и наконец, еще один необязательный, но очень полезный пункт. Система контроля версий (СКВ). Если у вас что-то перестало работать, а изменения перед этим были значительными, то откатить их может быть достаточно тяжело. СКВ позволяет вести учет всех изменений и откатиться в любое из предыдущих состояний одной командой. Существеут множество СКВ, но для локального использования (без доступа к интернету) лучше всего подойдет Git — детище Линуса Торвальдса.
- Git — система контроля версий
С необходимыми компонентами web-сервера определились, приступаем к установке и настройке
Первые три пункта вполне можно установить одной командой в терминале
sudo apt-get install lamp-server^
Символ ^ в конце не случаен, это часть команды. У нас попросят пароль администратора, вводим.
Эта команда действует, кажется, начиная с Ubuntu 13.04. В более ранних версиях все компоненты устанавливать придется отдельно. Впрочем, сделать это тоже можно одной командой
sudo class="bash plain">apt-get installapache2 php5 php5-mysql mysql-server
По ходу установки необходимо ответить на два вопроса. Сначала будет перечень устанавливаемых пакетов и вопрос, хотим ли мы продолжить установку. Жмем Enter. Затем нас попросят ввести пароль рута для MySQL. Вводим, подтверждаем. Дожидаемся конца установки.
Теперь настроим и протестируем все компоненты
Apache
открываем браузер и вводим в адресной строке
http://localhost
После перехода по этому адресу видим приветственную страницу.
Это означает, что сервер работает.
Теперь выполним кое-какие настройки. Для этого откроем конфигурационный файл Apache /etc/apache2/apache2.conf. Причем сделать это надо из-под рута, т.е. с правами администратора. Можно эту операцию провернуть и в графической оболочке, если знаете как — делайте. Если нет, то здесь описан, способ — с консольным текстовым редактором nano.
sudo nano /etc/apache2/apache2.conf
Не забываем. что после ввода команды, начинающейся с sudo, нужно ввести пароль администратора.
Здесь ищем теги
<Directory>
(это легко сделать встроенным в nano поиском; вызывается он комбинацией клавиш Ctrl+w) и под последним из них дописываем
<Directory /home/user/public_html>
AllowOverride All
Require all granted
</Directory>
Имейте ввиду в место user пишем свое имя пользователя в Linux.
Мы прописали опции общей директории (папки) для всех наших сайтов, а именно: разрешили использовать для нее файл .htaccess (для ЧПУ, например; но не только) и предоставили права доступа (через веб-сервер) для всех.
Дальше идем в конец файла и дописываем
ServerName localhost
Сохраняем комбинацией клавиш Ctrl+O, подтверждаем Enter и выходим из nano Ctrl+x.
Поскольку в подавляющем большинстве у сайтов стартовой страницей будет index.php, а не index.html, то открываем следующий файл.
sudo nano /etc/apache2/mods-available/dir.conf
И здесь index.php помещаем в начало строки DirectoryIndex, перед index.html. Должно получиться так.
<IfModulemod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>
Сохраняем и закрываем.
Виртуальные хосты
Теперь настроим виртуальные хосты. Зачем? Ну, в общем-то, можно обойтись и без этого. Все сайты хранить в отдельных папках в /var/www/html и заходить на них по адресам вида localhost/sitename (где sitename — имя папки с сайтом). Но тут есть нюанс. Если мы работаем с клоном уже существующего сайта, где прописаны URL вида «/file.html», т.е. со слешем в начале (а такие урлы встречаются довольно часто), то при переходе по такому урлу попадем в localhost/file.html (т.е. в никуда, поскольку такого пути у нас нет) вместо localhost/sitename/file.html. Ведь корневая папка у сервера прописана одна — /var/www/html. И она будет корневой для всех сайтов. Т.е. нам нужно, чтобы корневой папкой каждого сайта была именно его папка. И для каждого нашего сайта нужно будет прописать виртуальный хост.
Предположим, что у нас есть тестовый сайт. И расположен он не в /var/www/html, а в/home/user/public_html/testsite (где user — ваше имя пользователя в Linux). Почему там? В случае переустановки системы (ну мало ли что…) не придется заново заливать все сайты ( /home у вас на отдельном разделе?). Да и с правами меньше мороки.
Сайт этот у нас состоит всего из одного файла index.html, содержащего следующее
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Тестовая страница</title>
</head>
<body>
Тестовая страница
</body>
</html>
Откроем /etc/hosts
sudo nano /etc/hosts
Здесь в первую строку добавим имя нашего сайта.
127.0.0.1 localhost testsite
Сохраняем и закрываем (Ctrl+О и Ctrl+x соответственно).
Теперь выполняем в терминале
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/testsite.conf
Таким образом мы создали кофигурационный файл сайта testsite, скопировав конфигурационный файл дефолтного сайта. Теперь откроем этот файл и настроим его под наш сайт.
sudo nano /etc/apache2/sites-available/testsite.conf
Здесь раскомментируем (т.е. уберем #) строчку
#ServerName www.example.com
И пропишем имя нашего сайта. Должно получиться:
ServerName testsite
Далее исправим DocumentRoot, прописав вместо /var/www/html /home/user/public_html/testsite (не забываем вместо user поставить реальное имя пользователя).
Сохраняем и закрываем. Теперь включаем наш сайт.
sudo a2ensite testsite
В терминале нам любезно подсказывают, что активировать новую конфигурацию мы можем, перезагрузив настроки Апача.
sudo service apache2 reload
В адресной строке браузера пишем
http://testsite
И видим нашу тестовую страничку. Если не видим — тщательно проверяем правильность своих предыдущих действий.
Ну и в дальнейшем будем работать уже с этим тестовым сайтом, а не с дефолтным.
ЧПУ
В большинстве случаев нам придется работать с ЧПУ-ссылками. Поэтому необходимо подключить модуль Апача mod_rewrite.
sudo a2enmod rewrite
sudo service apache2 restart
Теперь проверим. Создадим в корне нашего сайта (папке testsite) файл .htaccess и запишем в нем следующее
RewriteEngine on RewriteRule ^test sef.html [L]
Это означает, что запросы на testsite/test будем перенаправлять на страницу sef.html.
Теперь создаем этот самый файл sef.html с содержимым, аналогичным index.html, кроме заголовка и текста:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Тест ЧПУ</title>
</head>
<body>
Тест ЧПУ
</body>
</html>
Идем на http://testsite/test. Если видим нашу новосозданную страницу, значит порядок.
PHP
Теперь проверим PHP. Для этого в папке /home/user/public_html/testsite создадим текстовый файлик со следующим содержимым:
<?php
phpinfo();
?>
Сохраняем этот файлик под именем, например, info.php. Если мы теперь перейдем по адресу http://testsite/info.php, то увидим полную информацию об установленном в системе PHP.
Если увидели — PHP работает.
Если локальный web сервер, и доступа извне к нему нет, то файлик этот можно оставить, он, возможно, еще пригодится. Но ни в коем случае не делайте этого на общедоступном сервере, здесь этот файл должен быть удален незамедлительно после проверки!
php.ini
Ну а теперь поковыряемся в конфигурационном файле PHP, находящемся по адресу /etc/php5/apache2/php.ini. Да не просто поковыряемся, а и кое-что поменяем.
sudo nano /etc/php5/apache2/php.ini
Короткая форма записи
short_open_tag = Off
Это значит, что по умолчанию запрещено использовать короткую форму записи тегов, т.е. <?, а не <?php. И хотя нечасто приходится встречать эту форму, иногда все же на некоторых сайтах попадается. Поэтому имеем в виду. Также имеем в виду, что ее включение не позволит включать xml непосредственно в php (только через echo).
Показ ошибок
display_errors = Off
Отключен показ ошибок. Вполне естественно для рабочих сайтов — посетителям (среди которых и взломщики попадаются) совсем не нужно видеть ошибки (а тем более предупреждения). На нашем же тестовом сервере желательно этот параметр включить. Хотя иногда он может здорово мешать, поэтому здесь индивидуально. В конце концов ошибки можно и в журнале посмотреть. Если хотим выводить — ставим On.
display_startap_errors = Off
Показ ошибок при запуске. Если нужно отследить ошибки при запуске PHP, меняем на On.
track_errors = Off
Если поставим On, то последняя произошедшая ошибка будет первой в переменной $php_errormsg.
Сохраняем и закрываем.
Размеры файлов
По умолчанию максимальный размер загружаемого файла ограничен 2 МБ. Это касается и импорта баз данных в phpMyAdmin. А базы довольно часто бывают больше, и даже значительно. В крупных интернет-магазинах база размером 40 МБ — не редкость. Поэтому в случае, если нам придется работать с подобными базами, меняем следующие параметры:
upload_max_filesize = 2M
post_max_size = 8M
Устанавливаем устраивающие нас значения.
Вполне возможно, придется поменять еще и
max_execution_time = 30
MySQL
Теперь проверяем MySQL. Для этого в терминале вводим
mysql -p -u root
Вводим пароль, который мы вводили для пользователя root при установке MySQL. Видим нечто подобное
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 36
Server version: 5.5.38-0ubuntu0.14.04.1 (Ubuntu)
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement
mysql>
Все OK. MySQL работает. Вводим quit для выхода.
Можно еще одним махом проверить работу связки MySQL и PHP. Для этого создадим файл db-test.php (все там же, в корне нашего сайта — /home/user/public_html/testsite) и запишем туда следующее.
<?php $link = mysqli_connect('propk.ru','root','password'); if(!$link) die('Connection error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); echo 'OK... ' . mysqli_get_host_info($link) . "\n"; mysqli_close($link); ?>
Перейдем по адресу http://testsite/db-test.php. Если видим текст «OK… localhost via UNIX socket», то все хорошо.
phpMyAdmin
Поехали дальше. Теперь очередь phpMyAdmin. В терминале вводим
sudo apt-get install phpmyadmin
После получения списка пакетов нажимаем Enter на вопрос, хотим ли мы продолжить. В ходе установки нас спрашивают, какой сервер будем настраивать. Поскольку у нас Apache, то и выбираем, естественно, его же. Для этого нажимаем пробел, убедившись, что красный курсор установлен в квадратных скобках напротив строчки apache2. И убеждаемся, что там же, в скобках, появилась звездочка.
Нажимаем Enter. Через некоторое время появится еще одно окно с предложением установить и настроить базу данных. У нас уже выбрано «Да», жмем Enter. Вводим пароль административного пользователя базы данных (тот самый, который вводили при установке MySQL), жмем Enter, задаем пароль для регистрации phpmyadmin в базе, подтверждаем. Дожидаемся конца установки.
Теперь в терминале последовательно вводим
sudo php5enmod mcrypt
sudo service apache2 restart
И идем в браузер.
http://propk.ru/phpmyadmin
Видим окно входа в phpMyAdmin
Вводим имя пользователя root и пароль, введенный нами при установке MySQL. Входим в phpMyAdmin.
Порядок.
Библиотеки GD и CURL
Теперь доустановим библиотеки PHP GD и CURL. Здесь все крайне просто. В терминале вводим
sudo apt-get install php5-gd php5-curl
Опять-таки, подтверждаем, что мы действительно хотим их установить. И перезагружаем Apache.
sudo service apache2 restart
Почтовый сервер SSMTP
Теперь почтовик. В принципе, можно обойтись SSMTP — это легкая утилита, отправляющая письма через сторонний SMTP-сервер, например Gmail. Но в этом случае о тестировании почты оффлайн придется забыть. Если тестирование оффлайн не актуально, то ставим и настраиваем:
sudo apt-get install ssmtp
sudo nano /etc/ssmtp/ssmtp.conf
И здесь меняем значения на следующие (для Gmail-сервера).
[email protected]
mailhub=smtp.gmail.com:587
[email protected]
AuthPass=password
UseSTARTTLS=YES
Здесь [email protected] — ваш существующий адрес на Gmail; password — пароль вашего аккаунта на Gmail. Если не хотите Gmail, то для других сервисов настройки принципиально отличаться не будут.
Далее. В /etc/php5/apache2/php.ini находим строку ;sendmail_path =, раскомментируем ее (т.е. уберем ;) и пропишем путь к ssmtp. Должно получиться
sendmail_path = /usr/sbin/ssmtp -t
Перезагружаем сервер.
sudo service apache2 restart
А теперь проверим. Создадим файл index.php в testsite, откроем его и пропишем туда следующее
<?php
mail("[email protected]", "Test", "Test message");
?>
Здесь опять же [email protected] — ваш существующий адрес, к которому у вас есть доступ (здесь — какой угодно, не обязательно Gmail).
Теперь перейдем по http://testsite. Отобразиться у нас должна пустая страница. Теперь проверяем [email protected] — туда должно прийти наше тестовое письмо.
Sendmail
Если же необходимо тестировать отправку почты оффлайн, ставим Sendmail.
На всякий случай. Речь не идет об одновременном использовании SSMTP и Sendmail — устанавливаем либо то, либо другое!
sudo apt-get install sendmail
По окончанию установки запускаем
sudo sendmailconfig
На все три вопроса, задаваемых в ходе установки, отвечаем утвердительно, т.е. жмем Enter.
Теперь
sudo nano /etc/hosts
И здесь в строчку с 127.0.0.1 дописываем через пробел
propk.ru.loc testserver
Здесь testserver — имя нашего сервера. Оно уже прописано строчкой ниже для 127.0.1.1. Сохраняем, закрываем и пере запускаем наш локальный web сервер
sudo service apache2 restart
Теперь командуем
telnet localhost smtp
Получаем.
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
220 propk.ru.loc ESMTP Sendmail 8.14.4/8.14.4/Debian-4.1ubuntu1; Sat, 26 Jul 2014 21:46:56 +0300; (No UCE/UBE) logging access from: localhost(OK)-localhost [127.0.0.1]
Начинаем тестирование. Вводим
helo localhost
Ответ
250 localhost.loc Hello localhost [127.0.0.1], pleased to meet you
Далее чередуются команды и ответы
mail from: [email protected]
250 2.1.0 [email protected]… Sender ok
rcpt to: user@localhost
Здесь user — ваше имя пользователя в Linux.
250 2.1.5 user@localhost… Recipient ok
data
354 Enter mail, end with «.» on a line by itself
Теперь мы вводим текст тестового письма. Закончить его обязательно точкой.
test message
Жмем Enter и получаем ответ.
250 2.0.0 s6QItc6L010145 Message accepted for delivery
Прекрасно. А теперь настроим почтовый клиент, чтобы иметь возможность видеть отправленные с сайта и полученные в user@localhost письма. Настраивать будем Thunderbird. Идем в Создать — Другие учетные записи. Выбираем тип учетной записи Unix Mailspool (Movemail), жмем Далее. Выводимое имя абсолютно без разницы, мы сюда письма только получать будем, а Адрес электронной почты прописываем user@localhost (вновь, user — это ваше имя пользователя в Ubuntu). Жмем Далее, затем еще раз Далее, и еще раз Далее, и, наконец, Готово. Если все сделали правильно — во входящих видим наше только что отправленное при тестировании письмо.
Можем протестировать через PHP, аналогично тому, как мы делали это с SSMTP, только в index.php исправим адрес получателя на user@localhost.
Теперь при работе с популярными CMS в админке будем прописывать адрес получателя писем с сайта [email protected]. Почему не user@localhost? Потому что такой адрес не пройдет валидацию. User заменяем на ваше имя пользователя в Ubuntu.
SSH
Осталось установить SSH-сервер. Как уже говорилось, это нужно лишь в том случае, если необходимо управлять сервером удаленно.
sudo apt-get install ssh sudo nano /etc/ssh/sshd_config
Открыли конфигурационный файл. Здесь я бы рекомендовал поменять порт, на котором ssh-сервер будет ожидать подключения. Находим строку
Port 22
и меняем на любой из диапазона от 1025 до 65536, . Главное — не забыть его потом. В нашем примере пропишем
Port 1111
и будем его использовать в дальнейших примерах.
Дальше находим строку
PermitRootLogin yes
и меняем значение yes на no.
Можно вообще запретить входить по SSH всем, кроме одного пользователя — вас. Для этого добавляем следующую строку (здесь, как всегда, user нужно заменить на ваше имя пользователя).
AllowUsers user
Перезагружаем SSH-сервер
sudo service ssh restart
А теперь пробуем подключиться с удаленного устройства. Предположим, что IP-адрес сервера — 192.168.1.2. Вводим (заменив user на свое имя пользователя на сервере)
ssh -p 1111 [email protected]
Вводим свой пароль на сервере и наслаждаемся. Чтобы отключиться, вводим exit.
Примечание. Если вы уже подключались на свой локальный web сервер с какого-либо устройства, но переустановили ОС на сервере, то после этого подключиться уже не получится. В этом случае удалите файл /home/user/.ssh/known_hosts на клиенте, подключитесь вновь и ответьте yes на вопрос Are you sure you want to continue connecting?(действительно ли вы хотите подключиться?). Все, можно работать.
Для заливки файлов на локальный web сервер удаленно также можно воспользоваться SSH, а не традиционным FTP. Можно это делать и в консоли. Но можно и проще. Показываю на примере файлового менеджера Dolphin в KDE.
В левой панели (Точки входа) жмем Сеть, здесь Добавить сетевую папку. Выбираем Папка SSH, жмем Далее и заполняем поля:
Имя — пишем что угодно, лишь бы понимать, куда мы подключаемся. Ну например, LocalServer.
Пользователь — имя пользователя на сервере.
Сервер — IP-адрес (или имя, если прописано в /etc/hosts) сервера.
Порт — мы меняли на 1111, его здесь и прописываем. Если не меняли — оставляем 22.
Протокол — выбираем fish.
Папка — для удобства пропишем корневую папку нашего web-сервера, т.е. /home/user/public_html. Теперь при подключении будем сразу попадать туда. Если оставить поле пустым — будет открываться корень Ubuntu, т.е. /.
Теперь жмем Сохранить и подключиться. И можем гонять файлы туда-сюда, как на родном компьютере.
В дальнейшем чтобы подключиться жмем Сеть и в открывшемся окне папку с земным шариком поверх с именем LocalServer.
Git
Устанавливаем.
sudo apt-get install git
Настраиваем.
git config —global user.name «User Name»
git config —global user.email «[email protected]»
Здесь username — ваше имя, а [email protected] — ваша существующая почта. В общем-то, это все. Об использовании Git в ближайшем будущем надеюсь написать отдельную статью.
Удаленный доступ к сайтам
Осталось понять, как зайти браузером с удаленного компьютера (в локальной сети) на наш сервер. Возьмем мою ситуацию. Напомню, сервер — на нетбуке, а работаю я на стационарном компьютере. Так вот, на компьютере открываем /etc/hosts и в новой строке прописываем
192.168.1.2 testsite
Здесь 192.168.1.2 — IP-адрес нашего сервера, testsite — имя тестового сайта (их может быть много через пробел). Теперь, набрав в адресной строке http://testsite, мы попадем именно на testsite на нашем сервере.
Владельцы и права
Вводим три команды
sudo adduser user www-data
chown user:www-data -R public_html
chmod -R 775 public_html
Здесь user — ваше имя пользователя в Ubuntu. Мы добавили себя в группу www-data (поскольку от пользователя www-data группы www-data работает Apache и, как следствие, все популярные CMS) и сделали группу www-data группой владельца корневой папки наших сайтов и присвоили для этой папки права чтения и записи для владельца и его группы. Это нужно для того, чтобы у пользователя user (от имени которого мы заливаем файлы на сервер) и пользователя www-data (от имени которого работет CMS) имели одинаковые права. При добавлении каждого сайта над его папкой нужно будет производить эту процедуру (кроме первой команды; только не ко всей public_html, а лишь к папке нового сайта). Также нужно это делать для новых файлов, требующих изменения со стороны сервера.
Всем Удачи!
Материал статьи взят с сайта senokosov.info
Теперь проверим. Создадим в корне нашего сайта (папке testsite) файл .htaccess и запишем в нем следующее
А где искать эту папку (testsite), ибо дальше не знаю что делать?
В домашней папке пользователя /home/user/public_html/testsite
Если не все так понятно, есть способ поставить веб сервер намного проще, описан недавно мной в этой статье.
Спасибо, за ответ и ссылку! Будем изучать.
Извините за то, что вмешиваюсь… У меня похожая ситуация.
В этом вся прелесть!
ты угадал…
Спасибо за поддержку.
Я полагаю, что всегда есть возможность.
Я разбираюсь в этом вопросе.
Доброго времени суток дамы и господа! У вас такой замечательный сайт
Присоединяюсь!
Доставка по России?
мне парочку
Я — этого же мнения.
Поздравляю, эта мысль придется как раз кстати скачать на компьютер торрент
В разделе virtualHosts не хватает активации sudo a2ensite testsite, а также в файле конфигурации нужно переписать DocumentRoot. Очень долго мучился не мог понять в чём ошибка. В остальном очень полезный сайт спасибо огромное)
Спасибо за указанные ошибки. Исправил.
Быстрая передача данных – самое важное условие, каковое делает комфортной работу в Глобальной сети интернет. По этой причине скорость Интернета принципиальна для любого, кто пользуется интернетом, а не только для людей, работающих в сфере технологий.