propk.ru

Локальный web сервер — установка и настройка в Ubuntu 14.04

Для создания новых сайтов или тестирования изменений на существующих часто бывает нужен локальный web сервер. Во-первых, новый сайт лучше выкладывать уже в готовом виде, дабы не смущать потенциальных посетителей пустыми страницами, недописанными материалами. Во-вторых, новые фичи для существующих сайтов тоже лучше тестировать не на живом сайте, а на его клоне. Ну и в третьих, это позволит работать над сайтом даже при временном отсутствии доступа к интернету.

Наш тестовый локальный web сервер ставится на Ubuntu 14.04 (или на Linux Mint 17, что, в сущности, одно и то же). В более ранних версиях возможны некоторые отличия.

Локальный web сервер — введение

Итак, определимся, что нам нужно чтоб локальный web сервер работал на нашем ПК.

Ну для начала (на всякий случай, для новичков) расшифруем аббревиатуру LAMP — Linux, Apache, MySQL, PHP. Предполагается, что Linux у нас уже есть (Если нет, то ставим, не боимся. Ubuntu или Mint, например, ставится сейчас едва ли не проще, чем Винда.). Что нужно установить.

  1. Apache — собственно, сам web-сервер.
  2. MySQL — система управления базами данных (СУБД).
  3. PHP — язык программирования.

Если вы не являетесь гуру MySQL, и не собираетесь управлять базами в консоли, вводя команды ручками, то следующим пунктом будет

  1. phpMyAdmin — графический интерфейс управления СУБД MySQL

Также нужно подумать и об отправке почты с сайта — это тоже частенько приходится тестировать.

  1. Sendmail — почтовый сервер

Также с большой вероятностью могут понадобится некоторые библиотеки PHP. В частности

  1. GD — библиотека для работы с изображениями
  2. CURL — библиотека для работы с URL

Также стоит озаботиться удаленным доступом к нашему серверу. Если хочется получать доступ на свой домашний, локальный web сервер из любой точки земного шара (правда для этого нужен реальный внешний IP-адрес вашей квартирной сети). В общем, удобная штука. Впрочем, если все это вам не нужно, то следующий пункт опускаем.

  1. SSH — сервер — позволяет работать с удаленным компьютером, как с родным

Ну и наконец, еще один необязательный, но очень полезный пункт. Система контроля версий (СКВ). Если у вас что-то перестало работать, а изменения перед этим были значительными, то откатить их может быть достаточно тяжело. СКВ позволяет вести учет всех изменений и откатиться в любое из предыдущих состояний одной командой. Существеут множество СКВ, но для локального использования (без доступа к интернету) лучше всего подойдет Git — детище Линуса Торвальдса.

  1. 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://propk.ru

После перехода по этому адресу видим приветственную страницу.

локальный web сервер

Это означает, что сервер работает.

Теперь выполним кое-какие настройки. Для этого откроем конфигурационный файл 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 propk.ru

Сохраняем комбинацией клавиш 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 и заходить на них по адресам вида propk.ru/sitename (где sitename — имя папки с сайтом). Но тут есть нюанс. Если мы работаем с клоном уже существующего сайта, где прописаны URL вида «/file.html», т.е. со слешем в начале (а такие урлы встречаются довольно часто), то при переходе по такому урлу попадем в propk.ru/file.html (т.е. в никуда, поскольку такого пути у нас нет) вместо propk.ru/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 propk.ru 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.

локальный web сервер 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… propk.ru via UNIX socket», то все хорошо.

phpMyAdmin

Поехали дальше. Теперь очередь phpMyAdmin. В терминале вводим

sudo apt-get install phpmyadmin

После получения списка пакетов нажимаем Enter на вопрос, хотим ли мы продолжить. В ходе установки нас спрашивают, какой сервер будем настраивать. Поскольку у нас Apache, то и выбираем, естественно, его же. Для этого нажимаем пробел, убедившись, что красный курсор установлен в квадратных скобках напротив строчки apache2. И убеждаемся, что там же, в скобках, появилась звездочка.

локальный web сервер

Нажимаем Enter. Через некоторое время появится еще одно окно с предложением установить и настроить базу данных. У нас уже выбрано «Да», жмем Enter. Вводим пароль административного пользователя базы данных (тот самый, который вводили при установке MySQL), жмем Enter, задаем пароль для регистрации phpmyadmin в базе, подтверждаем. Дожидаемся конца установки.

Теперь в терминале последовательно вводим

sudo php5enmod mcrypt
sudo service apache2 restart

И идем в браузер.

http://propk.ru/phpmyadmin

Видим окно входа в phpMyAdmin

phpMyAdmin

Вводим имя пользователя root и пароль, введенный нами при установке MySQL. Входим в phpMyAdmin.

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-сервера).

root=youraccount@gmail.com
mailhub=smtp.gmail.com:587
AuthUser=youraccount@gmail.com
AuthPass=password
UseSTARTTLS=YES

Здесь youraccount@gmail.com — ваш существующий адрес на 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("testaccount@gmail.com", "Test", "Test message");
?>

Здесь опять же testaccount@gmail.com — ваш существующий адрес, к которому у вас есть доступ (здесь — какой угодно, не обязательно Gmail).

Теперь перейдем по http://testsite. Отобразиться у нас должна пустая страница. Теперь проверяем testaccount@gmail.com — туда должно прийти наше тестовое письмо.

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 propk.ru smtp

Получаем.

Trying 127.0.0.1…
Connected to propk.ru.
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: propk.ru(OK)-propk.ru [127.0.0.1]

Начинаем тестирование. Вводим

helo propk.ru

Ответ

250 propk.ru.loc Hello propk.ru [127.0.0.1], pleased to meet you

Далее чередуются команды и ответы

mail from: no-reply@gmail.com
250 2.1.0 no-reply@gmail.com… Sender ok
rcpt to: user@propk.ru

Здесь user — ваше имя пользователя в Linux.

250 2.1.5 user@propk.ru… 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@propk.ru письма. Настраивать будем Thunderbird. Идем в Создать — Другие учетные записи. Выбираем тип учетной записи Unix Mailspool (Movemail), жмем Далее. Выводимое имя абсолютно без разницы, мы сюда письма только получать будем, а Адрес электронной почты прописываем user@propk.ru (вновь, user — это ваше имя пользователя в Ubuntu). Жмем Далее, затем еще раз Далее, и еще раз Далее, и, наконец, Готово. Если все сделали правильно — во входящих видим наше только что отправленное при тестировании письмо.

Можем протестировать через PHP, аналогично тому, как мы делали это с SSMTP, только в index.php исправим адрес получателя на user@propk.ru.

Теперь при работе с популярными CMS в админке будем прописывать адрес получателя писем с сайта user@propk.ru.loc. Почему не user@propk.ru? Потому что такой адрес не пройдет валидацию. 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 user@192.168.1.2

Вводим свой пароль на сервере и наслаждаемся. Чтобы отключиться, вводим 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 «username@gmail.com»

Здесь username — ваше имя, а username@gmail.com — ваша существующая почта. В общем-то, это все. Об использовании 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

Подписаться
Уведомление о
guest
11 Комментарий
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
Marijabip
Гость
Marijabip
1 год назад

Извините за то, что вмешиваюсь… У меня похожая ситуация.
В этом вся прелесть!

Nikabip
Гость
Nikabip
1 год назад

ты угадал…
Спасибо за поддержку.

Dianabip
Гость
Dianabip
1 год назад

Я полагаю, что всегда есть возможность.
Я разбираюсь в этом вопросе.

Andreasgvq
Гость
Andreasgvq
1 год назад

Доброго времени суток дамы и господа! У вас такой замечательный сайт

Jameslaw
Гость
Jameslaw
1 год назад

Присоединяюсь!

Jameslaw
Гость
Jameslaw
1 год назад

Доставка по России?

vabdyDYNC
Гость
vabdyDYNC
1 год назад

мне парочку
Я — этого же мнения.

lessgritPa
Гость
lessgritPa
1 год назад

Поздравляю, эта мысль придется как раз кстати скачать на компьютер торрент

Антон
Гость
Антон
2 лет назад

В разделе virtualHosts не хватает активации sudo a2ensite testsite, а также в файле конфигурации нужно переписать DocumentRoot. Очень долго мучился не мог понять в чём ошибка. В остальном очень полезный сайт спасибо огромное)

interesumom
Гость
interesumom
4 лет назад

Быстрая передача данных – самое важное условие, каковое делает комфортной работу в Глобальной сети интернет. По этой причине скорость Интернета принципиальна для любого, кто пользуется интернетом, а не только для людей, работающих в сфере технологий.

Top