Debian установка apache php mysql. Установка и настройка веб-сервера LAMP для разработки на PHP

Debian установка apache php mysql. Установка и настройка веб-сервера LAMP для разработки на PHP

03.05.2019

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

В этой статье мы рассмотрим как выполняется установка LAMP Debian 9. Аббревиатура LAMP расшифровывается как Linux Apache Mysql PHP, это набор программного обеспечения, который чаще всего используется для размещения сайтов. Раньше мы уже говорили про , процесс не будет очень сильно отличаться в Debian, но все же есть нюансы.

Сначала мы установим все необходимые компоненты, а затем будем настраивать их и проверять правильность работы по мере необходимости. Но сначала нужно обновить систему до последней версии:

sudo aptitude update && sudo aptitude upgrade

1. Установка компонентов

Сначала установим веб-сервер и интерпретатор языка программирования PHP:

sudo aptitude install apache2 php php-mysql libapache2-mod-php php-mbstring php-zip php-gd

Мы установили не только веб-сервер, но и основные библиотеки PHP, которые могут понадобиться для работы с графикой, строками и сжатыми архивами. Пакет libapache2-php отвечает за интеграцию поддержки php для веб-сервера Apache.

Перед тем как перейти к настройке всего этого, нужно установить систему управления базами данных. Вы можете использовать MySQL либо же версию, разрабатываемую сообществом - MariaDB. Для установки MariaDB выполните:

sudo aptitude install mariadb-server mariadb-client mariadb-common

А для установки MySQL:

sudo aptitude install mysql-server mysql-client mysql-common

В этой статье мы будем рассматривать MariaDB, но работа с MySQL не будет очень сильно отличаться.

2. Настройка Apache и PHP

Уже прошли те времена, когда для того чтобы подключить PHP к Apache нужно было пересмотреть кучу конфигурационных файлов, теперь установка LAMP Debian 9 выполняется достаточно просто. Если уже сейчас запустить Apache, и ввести адрес localhost, то все будет работать. Но давайте сначала добавим домен к нашему сайту. На локальной машине это тоже полезно. Сначала создадим папку для сайта:

sudo mkdir /var/www/test-site/

Конфигурационные файлы виртуальных хостов хранятся в каталоге /etc/apache2/sites-available/ просто скопируйте конфигурацию по умолчанию 000-default в новый файл:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/test-site.conf

Теперь полученный файл нужно отредактировать. Нас будут интересовать директивы ServerName и DocumentRoot. Установите для них правильные значения:

ServerName test-site.com
DocumentRoot /var/www/test-site/

Все остальное можно оставить по умолчанию. Дальше сохраните изменения и активируйте сайт командой:

sudo a2ensite test-site.conf

Теперь осталось перезапустить Apache:

Чтобы проверить как все работает создайте файл index.php со следующим содержимым в папке /var/www/test-site/:

Если домен зарегистрирован в интернете и все запросы к нему направляются на ваш ip то уже можно открыть сайт в браузере. Если же нет, вы можете настроить маршрут для домена локально с помощью файла /etc/hosts:

sudo vi /etc/hosts

127.0.0.1 test-site.com

Теперь можете открывать сайт в браузере и проверять:

http://test-site.com

Если вы увидели информацию о версии php, как на снимке экрана, значит все работает и нам осталось только настроить базу данных.

3. Настройка базы данных

Как я уже говорил, в качестве основной базы данных мы будем использовать mariadb. Чтобы начать ее настройку выполните:

mysql_secure_installation



Я не буду подробно описывать все шаги настройки. Они уже описаны в статье установка MySQL в Ubuntu. После того как процесс первоначальной настройки завершится, создадим новую базу данных:

CREATE DATABASE testsite;

Затем создайте пользователя и дайте ему доступ к этой базе данных:

CREATE USER "testuser"@"localhost" IDENTIFIED BY "password";
GRANT ALL PRIVILEGES ON testsite.* TO "testuser"@"localhost";

Ну и для тестирования добавим таблицу:

USE testsite;
CREATE TABLE testtable (
id INT NOT NULL AUTO_INCREMENT,
str VARCHAR(100) NOT NULL,
PRIMARY KEY(id)
);

Теперь добавим одну запись в только что созданную таблицу:

INSERT INTO testtable (str) VALUES ("test1"), ("test2"), ("test3");

Теперь, чтобы убедиться что все работает, мы попытаемся получить данные из mysql через PHP. Для этого создадим небольшой скрипт. Он будет подключаться к базе данных и читать по порядку записи из таблицы:

sudo vi /var/www/test-site/testmysql.php

$connection = mysqli_connect("localhost","testuser","password","testsite") or die("Error " . mysqli_error($connection));
$sql = "SELECT id, str FROM testtable";
$result = mysqli_query($connection, $sql) or die("Error " . mysqli_error($connection));
$items = array();
while($row = mysqli_fetch_assoc($result))
{
$items = $row;
}
echo json_encode($items);
?>

http://test-site.com/testmysql.php

В первой части этой истории был показан один из возможных вариантов настройки графического интерфейса Debian для удобного и привычного (исключительно субъективная точка зрения автора) использования человеком, пришедшим в Linux из Windows. И если для настройки виртуальной машины с Debian я пользовался только хостовой системой, то далее я специально работал только в этой виртуальной машине, ища информацию в интернете, конспектируя её в Notepadqq или gedit, слушая музыку через Аudacious, открывая файлы через LibreOffice и тому подобное. Таким образом можно обжиться и гораздо глубже почувствовать и оценить работу с операционной системой и её окружения, которое в стандартной поставке Debian довольно полноценно и функционально.

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

Текущая цель – создание сервера, чему и будет посвящена эта часть. Сервер можно настроить как с установкой и использованием графического интерфейса, так и без него. Во втором случае из предыдущей части можно просто пропустить разделы, касающиеся установки и настройки ПО для графического интерфейса и его настройки, установки пакетов графический программ и vmware-tools.

Я ничего не вижу плохого в использовании графического интерфейса при создании сервера: если человеку привычнее, удобнее и комфортнее сделать свой первый или второй сервер с графической средой – почему бы и нет? В конце концов, мой веб-сервер с графическим интерфейсом отработал год и отработает еще столько лет, сколько потребуется. Однако нужно иметь ввиду некоторые моменты.

В идеальном варианте единожды настроенная система должна будет работать без нашего вмешательства очень долго время. Мой сервер в «чистовом» варианте был настроен за два дня, а отработал без вмешательства практически год. Это значит, что графический интерфейс был задействован 0,05% времени активного существования сервера (компьютер работает только половину суток) и при этом занимал ресурсы: оперативную память, дисковое пространство, процессорное время. Все эти ресурсы лучше направить на обеспечение функционирования самого сервера: например, поднять memory_limit для PHP или вместить больше пользовательских данных на жесткий диск. Кроме этого, в случае проблем и неполадок при работе с реально удалённым сервером зачастую гораздо проще задействовать SSH-доступ . В данном контексте наличие графического интерфейса нежелательно и именно поэтому вторым сервером в моей сети уже была виртуальная машина без графического окружения, на которой из графического ПО был установлен только Midnight Commander, который я использовал для перемещения по файловой системе и редактирования файлов настроек через его редактор mcedit. Поэтому ниже приведена универсальная инструкция: даны команды с упором на использование командной строки, однако подразумевается, что в самый первый раз пользователь настраивает машину с графическим окружением, чем обусловлено использование браузера для локальной проверки доступности созданных сайтов и некоторые особенности настройки почтовой программы.

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

Примечание
При дальнейшем чтении в конструкциях вида http:// 127.0.0.1 (https:// 127.0.0.1) пробел после http:// (https://) необходимо убирать при вводе в адресную строку браузера. Пробел вставлен при публикации этой статьи с целью воспрепятствовать автоматической конвертации движком сайта текста в ссылки.

Установка веб-сервера Apache2:

# apt-get install apache2 apache2-doc

И это – всё. Каких-то двадцать мегабайт и веб-сервер уже установлен. Не надо никаких перезагрузок или настроек - сервер уже умеет открывать странички HTML . Однако современный сайт в интернете – это не только набор статичных файлов, стилей, шрифтов и прочего подобного как двадцать лет назад. Современный сайт содержит скрипты, написанные на PHP , а динамическая информация (например, текстовой контент, комментарии, профили пользователей) пишется не в файлы рядом с PHP файлами, а в специальную базу данных SQL . Для полноценного сервера необходимо обеспечить поддержку этих технологий. Тем более – это несложно:

# apt-get install mysql-server mysql-client phpmyadmin
# apt-get install php5 php5-mysql libapache2-mod-php5

В процессе установки MySQL будет задан запрос для установки пароля суперпользователя mysql и нужно будет выбрать сервер apache2 для автоматической настройки работы с mysql. При установке пакета phpmyadmin я согласился с автоматической настройкой пакета и везде ввёл пароль суперпользователя mysql. Установка PHP происходит без каких-либо запросов.

Я не стал использовать более быстрый PHP7 или свободный MariaDB в качестве альтернативной открытой замены SQL и решил построить свой сервер на «каноническом» LAMP = Linux + Apache + MySQL + PHP, используя старые и проверенные решения, в случае проблем с которыми я бы мог быстро и беспроблемно найти информацию в интернете.

Три команды (которые на самом деле можно свести в одну) и у нас локально установлен полноценный и современный сервер. Это совсем просто!

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

Настройка веб-сервера Apache2

Для начала необходимо убедиться в том, что веб-сервер работает. Для этого нужно открыть браузер и набрать адрес http:// 127.0.0.1 (localhost). Должна открыться веб-страница с обнадёживающей надписью: «Apache2 Debian Default Page. It"s works!». Сервер действительно работает. Если у вас есть набор файлов сайта 2000-го года, то его можно разместить в директории /var/www/html и он наверняка будет открываться на нашем сервере.

Все основные настройки веб-сервера хранятся по пути /etc/apache2. Если открыть эту директорию, то можно увидеть основной файл конфигурации apache2.conf и директории conf-available, mod-available, sites-available. В этих директориях содержатся заранее сконфигурированные файлы с настройками (так называемые сниппеты), которые можно просто использовать по умолчанию, со своими правками или взять их как шаблон для создания своих конфигураций. Например, в директории sites-available находится конфигурационный файл хоста по умолчанию 000-default.conf. Если его открыть и поизучать, то окажется, что этот файл как раз и задаёт путь, по которому открывается наш сайт по адресу http:// 127.0.0.1: «DocumentRoot /var/www/html». Мало того, строчка «» означает, что если я выпущу свою машину в локальную сеть и буду обращаться к ней по порту 80 (порт для HTTP), то мне будет открываться сайт, расположенный по пути /var/www/html. Как в этом убедиться?

Сначала нужно узнать IP адрес, который был назначен виртуальной машине после её загрузки. Для просмотра конфигурации сетевых адаптеров выполним:

# ifconfig

В информации, выведенной на консоль несложно определить, что для адаптера eth0 установлен следующий адрес:

Inet addr:192.168.233.138

Теперь на хостовой машине я открываю в браузере адрес http:// 192.168.233.138 и ожидаю, что откроется знакомая страница. Но… она не открывается. Через некоторое время мой браузер пишет: «Время ожидания соединения истекло». И правильно пишет. Ведь в первой части я включил файрвол, но порт 80 не открыл! Исправим это:

# ufw allow 80

Снова пробуем открыть адрес http:// 192.168.233.138 и убеждаемся, что ожидаемая страница открывается. Виртуальный хост в виртуальной машине открылся из вне всей этой виртуализации. Мы сделали небольшой шаг в деле постройки своего маленького виртуального интернета.

Помимо директорий -available так же присутствуют ещё директории -enabled, которые содержат то, что на данный момент «включено». Если заглянуть в них, то можно увидеть, что эти директории содержат ссылки на файлы, находящиеся в директориях -available. В директории sites-enabled на данный момент только одна ссылка – на файл /etc/apache2/sites-available/000-default.conf. Это очень удобно - ярлыками мы можем управлять включением или отключением хостов без правки их конфигурационных файлов. Кроме этого источник конфигурации – один файл в независимости включена эта конфигурация сейчас или нет и это предотвращает ошибки, когда что-то правится в каком-то одном файле, а в другом - забывается. Для отключения нашего хоста нужно удалить требуемый ярлык, а для его включения – создать его. Для того, чтобы не удалять или создавать ярлыки вручную проще и надёжнее использовать специальные утилиты.

Отключаем виртуальный хост:

# a2dissite 000-default

Включаем виртуальный хост:

# a2enssite 000-default

После каждого изменения нужно перезагрузить конфигурации хостов или перезапустить сервер:

# service apache2 reload

# service apache2 restart

Итак, базовое понимание как конфигурировать обычные хосты в apache теперь имеется, и далее я покажу пример того, как я сконфигурировал свой сервер для работы по HTTP и HTTPS протоколам.

Начать нужно с того, что при отключении виртуального хоста 000-default отключения как такового не происходит. То есть, сайт как открывался изнутри и снаружи виртуальной машины – так и будет открываться в независимости от нахождения его конфигурации в папке sites-enabled. Это было неожиданно и я потратил относительно много времени, чтобы понять всё ли я правильно сделал или понял. До конца я с этим так и не разобрался, видимо это связано с тем, что путь /var/www/html задан глобально как директория по умолчанию для DocumentRoot. Так как мне не хотелось, чтобы было включено и доступно что-то лишнее я решил избавиться от самой директории html, а для всех вложенных /var/www по умолчанию доступ запретить.

Для настройки виртуального хоста по умолчанию я отредактировал его конфигурационный файл:

Содержимое конфигурационного файла стало следующим:

ServerName localhost ServerAdmin user@localhost DocumentRoot /var/www ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
Этой конфигурацией я переустановил директорию по умолчанию на /var/www, разрешил серверу следовать по символическим ссылкам в этой директории, разрешил серверу выполнять все директивы, объявленные в найденных файлах.htaccess и запретил доступ в этот каталог. Логика этих действий в том, чтобы я мог управлять доступом в эту директорию не обращаясь к настройкам веб-сервера вообще и не перезагружая его. Теперь нужно проверить это решение.
Переносим файл:

# mv /var/www/html/index.html /var/www/index.html

И удаляем каталог:

# rm /var/www/html

Перезапускаем сервер для вступления в силу новых настроек виртуального хоста по умолчанию:

# service apache2 restart

Создаём файл:

# nano /var/www/.htaccess

В котором прописываем одну строку (без кавычек): «Require all granted».

Подытожим. Теперь пути /var/www/html нет, но хост по умолчанию переконфигурирован на путь /var/www, по которому находится файл index.html, причём по умолчанию, на уровне веб-сервера, доступ в эту директорию запрещён, но разрешается содержимым локально расположенного там файла.htaccess.

Открываем в браузере http:// 127.0.0.1 и видим уже знакомую страницу «Apache2 Debian Default Page. It"s works». Теперь проверим работоспособность «локального» управления доступом:
Удаляем файл.htaccess:

# rm /var/www/.htaccess

И обновляем в браузере открытую страничку - должна открыться страница с уведомлением об ограничении доступа (Forbidden). Да, всё это работает, значит всё сделано правильно.

В принципе, этих нехитрых настроек вполне достаточно для дальнейшей беспроблемной работы веб-сервера. Но мне этого показалось мало. Сейчас наш веб-сервер умеет работать только по протоколу HTTP. Но как быть с протоколом HTTPS? Ведь если в будущем выводить проекты на базе этого веб-сервера в интернет, то умение работать по этому протоколу как минимум желательно. И я решил организовать поддержку HTTPS на основе создания самоподписного сертификата SSL .

Сначала нужно получить SSL сертификат, который будет установлен на наш сервер. Никакого домена у нас нет, да и статичного IP адреса тоже по сути не имеется. Но это всё неважно, потому что сертификат я буду генерировать самостоятельно, используя средства своей системы.

Внимание! В приведённой ниже инструкции считается, что сервер установлен на «безымянную» машину. Если имеется реальный IP или доменное имя, то их нужно указать в ТРЁХ местах: ; ; - в соответствующих конструкциях заменить IP/Domain на IP адрес или доменное имя. В приведённом ниже тексте вместо IP/Domain используется localhost.

Сгенерируем SSL-сертификат:

# openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

Данная команда создаст самоподписной сертификат стандарта Х.509 сразу аж на 10 лет с пропуском опции защиты сертификата парольной фразой - это нужно чтобы при запуске сервер Apache имел возможность читать файл без вмешательства пользователя, так как установив пароль, придется вводить его после каждой загрузки или перезагрузки сервера. Вместе с сертификатом будет создан новый ключ RSA на 2048 бит, которым и будет подписан сертификат. Опции –keyout и –out указывают пути, по которым OpenSSL должен сгенерировать ключ и сертификат.

В процессе создания сертификата будут заданы вопросы, на которые я указал следующие данные:

Country Name = MW
State or Province Name = Sun System
Locality Name = Lunar
Organization Name = Hellium Inc.
Organizational Unit Name = 2
Common Name = localhost
Email Address = user@localhost

Далее нужно создать ключи Диффи-Хеллмана для обеспечения поддержки PFS :

# openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

В терминале побегут точечки и плюсики и после окончания мультфильма можно создать файл ssl-params.conf, в котором будут определены параметры SSL для сервера:

# nano /etc/apache2/conf-available/ssl-params.conf

Для безопасной актуальной настройки я использовал код, сгенерированный в генераторе для конфигурации SSL на mozilla.github.io . В генераторе я выбрал сервер Apachе2, профиль Modern и правильно выставил версии сервера и OpenSSL, которые можно узнать по следующим командам:

# apache2 -v
# openssl version

В результате у меня получился следующий текст:

# 14-01-2018 / for apache2 2.4.10 & openssl 1.0.1t # from https://mozilla.github.io/server-side-tls/ssl-config-generator/ # parametrs help: https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html # modern configuration, tweak to your needs SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 SSLHonorCipherOrder on SSLCompression off # OCSP Stapling, only in httpd 2.3.3 and later SSLUseStapling on SSLStaplingResponderTimeout 5 SSLStaplingReturnResponderErrors off SSLStaplingCache shmcb:/var/run/ocsp(128000)
Теперь настроим виртуальный хост с поддержкой SSL:

Текст этого файла я привёл к следующему виду:

ServerAdmin user@localhost ServerName localhost DocumentRoot /var/www Options FollowSymLinks AllowOverride All Require all denied SSLOptions +StdEnvVars SSLOptions +StdEnvVars
Из вышеприведённого следует, что у нас в качестве директории DocumentRoot определена так же /var/www, доступ к которой настроен аналогично предыдущим настройкам. Включен механизм HSTS , который способствует принудительной установке соединения через протокол HTTPS. Включена поддержка SSL с указанием используемых сертификата и ключа, а также подключена поддержка обработки данных сертификата в PHP и CGI -скриптах. Последняя секция призвана обеспечить совместимость с ранними версиями браузера Internet Explorer и, в целом, необходимой не является.

Теперь сделаем финальные штрихи.

Откроем порт для SSL:

# ufw allow 443

Включим модули apache для поддержки SSL и HSTS:

# a2enmod ssl
# a2enmod headers

Включим конфигурацию SSL:

# a2enconf ssl-params

Включим виртуальный хост с поддержкой SSL:

# a2ensite default-ssl

Перезапустим сервер для принятия всех новых настроек:

# service apache2 restart

Вот и наступил интересный момент – проверки работоспособности нового функционала настроенной системы.

Создаём файл:

# nano /var/www/.htaccess

Открываем в браузере https:// 127.0.0.1. Должна открыться страница о неизвестном сертификате, после принятия которого (однократное или постоянное разрешение) откроется уже знакомая страница с уведомлением о запущенном веб-сервере.

Удаляем файл.htaccess:

# rm /var/www/.htaccess

И обновляем в браузере открытую страничку - должна открыться страница с уведомлением об ограничении доступа (Forbidden). Всё работает корректно. Теперь наши сайты доступны и по HTTP и через HTTPS.

Доступ по HTTP можно оставить включенным, отключить или сделать принудительное перенаправление на HTTPS.

Для включенного доступа HTTP делать ничего не нужно, так как запросы на порты 80 и 443 сервер обрабатывает индивидуально и наш сайт в папке /var/www будет открываться как через HTTP, так и через HTTPS.

Для отключения доступа по HTTP необходимо просто отключить соответствующий виртуальный хост и перезапустить веб-сервер:

# a2dissite 000-default
# service apache2 restart

Теперь, если открыть в браузере http:// 127.0.0.1 должна открыться страница с уведомлением об отсутствии страницы (Not Found).

Самый интересный третий вариант. В этом случае HTTP формально остаётся включенным, но обработка данных будет принудительно перенаправлена через HTTPS.

Для этого сначала включим модуль перенаправления:

# a2enmod rewrite

Теперь откроем файл 000-default.conf:

# nano /etc/apache2/sites-available/000-default.conf

И перед закрывающимся тегом добавим нижеприведённый текст:

RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Перезапустим сервер:

# service apache2 restart

Создаим файл:

# nano /var/www/.htaccess

В котором прописываем одну строку: «Require all granted».

Теперь, если открыть в браузере адрес http:// 127.0.0.1 нас автоматически перенаправит на https:// 127.0.0.1 с предупреждением о неизвестном сертификате (если ранее он не был внесён в список исключений в браузере), после принятия которого откроется уже знакомая страница с уведомлением о запущенном веб-сервере.

Настройка SQL

Для первичной настройки mysql достаточно выполнить следующую команду:

# mysql_secure_installation

После ввода пароля суперпользователя mysql я ответил на задаваемые вопросы в следующем порядке:

  • отказался от изменения пароля root;
  • подтвердил удаление анонимных пользователей из БД;
  • подтвердил блокировку удаленного подключения для root (в целях безопасности пуcть root подключается только локально);
  • подтвердил удаление тестовых БД;
  • согласился с перезагрузку таблиц привилегий.
Для проверки работоспособности mysql можно выполнить следующую команду:

# mysql -uroot -p

После ввода пароля суперпользователя mysql мы видим приглашение mysql – значит сервис запущен и работает. Выйти из терминала mysql можно введя команду «exit».

Для проверки работоспособности phpmyadmin открываем в браузере адрес http:// 127.0.0.1/phpmyadmin. Если открылась страница c приглашением войти в phpmyadmin значит сервис запущен и работает.

Настройка PHP

После установки PHP я открыл файл его настроек:

# nano /etc/php5/apache2/php.ini

И привёл некоторые параметры к следующему виду:

  • memory_limit = 1024M
  • default_charset = «UTF-8»
  • upload_max_filesize = 256M
  • sendmail_path = /usr/bin/fake_sendmail.sh
С помощью модуля PHP можно обеспечить кеширование данных в памяти. Кеширование полезно при высокой нагрузке на сервер для данных, генерация которых требует большого количества ресурсов, например, результатов запросов к базе данных или обработкой «тяжелых» кусков шаблона сайта. В качестве сервера кеширования я выбрал модуль memcached .

Установка memcache:

# apt-get install memcached php5-memcached

Посмотрим на настройки конфигурации сервиса:

# nano /etc/memcached.conf

В настройках я увеличил размер используемой памяти для кеширования: -m 64 -> -m 256. И проверил наличие режима работы только в локальной зоне: -l 127.0.0.1.

Перезапускаем сервис кеширования и веб-сервер:

# service memcached restart
# service apache2 restart

Теперь нужно убедиться в работоспособности сервиса. Для этого создаём файл:

# nano /var/www/info.php

И добавим в него следующий текст:


Не забываем проверить наличие файла.htaccess в директории /var/www с соответствующим разрешающим содержимым, если его там нет – создаём.

Теперь можно открыть в браузере http:// 127.0.0.1/info.php - должна открыться страница со сведениями о PHP, в которой нужно проверить наличие в ней секции memcached. Если таблица появилась - PHP работает.

Проверить запущенный сервис memcached можно так:

$ ps -aux | grep memcached

В терминале должна вернуться строка, содержащая настройки memcached.

Создание почтовой заглушки для PHP

При настройках PHP в качестве параметра sendmail_path был указан шелл-скрипт. Функция этого скрипта - сохранять письма, отправленные через стандартную функцию php mail(), на локальной машине, в какой-то удобной папке, а не отправлять их куда-то.

Создадим файл:

# nano /usr/bin/fake_semdmail.sh

Со следующим содержимым:

#!/bin/sh prefix="/var/mail/sendmail/new" numPath="/var/mail/sendmail" if [ ! -f $numPath/num ]; then echo "0" > $numPath/num fi num=`cat $numPath/num` num=$(($num + 1)) echo $num > $numPath/num name="$prefix/letter_$num.txt" while read line do echo $line >> $name done chmod 777 $name /bin/true
Сделаем этот файл исполняемым:

# chmod +x /usr/bin/fake_semdmail.sh

Создадим необходимые директории, которые могут понадобиться в случае настройки сбора писем почтовой программой:

# mkdir /var/mail/sendmail /var/mail/sendmail/cur /var/mail/sendmail/new /var/mail/sendmail/tmp

И назначаем права, чтобы сервер мог записывать файлы в этой папке:

# chmod 777 -R /var/mail/sendmail

Теперь все исходящие письма будут складываться в /var/mail/sendmail. Их можно просматривать текстовым редактором, а можно собирать почтовой программой. В комплекте предустановленного ПО Debian есть почтовый клиент Evolution. При настройке учётной записи в качестве типа сервера нужно выбрать «Почтовые каталоги в формате Maildir» и указать путь к почтовому каталогу (/var/mail/sendmail), а в качестве сервера указать «Sendmail».

Всё. В целом с сервером мы закончили - получена универсальная виртуальная машина, на базе которой можно строить свои сетевые сервисы. Я оставил и HTTP, и HTTPS доступы. Однако, после того как получен опыт по созданию и настройке сервера, а также добавлению сайтов (см. ниже) на него, я бы рекомендовал создать новую виртуальную машину с сервером без графического интерфейса как более оптимальную по потреблению ресурсов.

Настройка доступа SSH

Сервер не был бы полноценным сервером без наличия доступа через SSH. Так называемый «шелл» позволяет быстро и безопасно подключиться к удалённому серверу, используя, например, небольшую программку putty, - на локальном компьютере мы получаем прямой доступ к терминалу удалённого сервера.

Установка сервиса:

# apt-get install ssh

Откроем порт для SSH (вообще-то, порт по умолчанию должен быть под номером 22, но ниже я переопределил порт в конфигурации SSH):

# ufw allow 106

Для организации доступа для нашего пользователя user нужно открыть файл:

# nano /etc/ssh/sshd_config

И добавить в конец файла директиву:


Кроме этого, в целях безопасности я сделал в этом файле следующие изменения:
  • сменил порт с 22 на какой-то другой (список портов): Port 22 -> Port 106
  • отключил устаревший протокол: Protocol 2,1 -> Protocol 2
  • отключил удалённый доступ для root: PermitRootLogin yes (или PermitRootLogin without-password) -> PermitRootLogin no
После чего перезапускаем сервис:

# service sshd restart

Теперь я могу запустить программу putty на хостовой машине и подключиться к своему серверу в консольном режиме введя адрес подключения 192.168.233.138, порт 106 и имя пользователя user. При подключении необходимо ответить утвердительно на принятие ключей и ввести пароль пользователя user. Если понадобиться выполнить команды от суперпользователя, то можно использовать уже известную команду su.

Защита доступа

Я не стал заниматься защитой веб-сервера от DDoS, изначально полагая, что если он будет размещаться на VPS/VDS, то эффективную защиту обеспечит хостинг, а если делать свой сервер «торчащий» в интернет, то этим вопросом надо заниматься серьёзно и это тема отдельной статьи. Защита от Slow HTTP DDoS делается относительно просто в соответствии с многочисленными инструкциями в интернете, но она не спасёт от распределенной атаки, производимой с множества разных IP адресов.

При DDoS наш сервер просто перестанет работать на какое-то время. Но после атаки, которая не будет длиться вечно, работа сервера восстановится. А вот если кто-то сумеет заполучить доступ по SSH, то контроль за сервером будет потерян, а данные на нём скомпроментированы, поэтому контроль доступа к серверу по SSH – здравая идея.

Самое простое и банальное, что можно сделать – сменить стандартный порт, что мы и сделали при настройке SSH. Лет пять назад я «выставил» только что созданный сервер в интернет по недавно полученному реальному IP адресу и был удивлён тому, что за неделю существования сервера, про который ещё никто ничего не знал, в логах системы накопилось большое количество записей о неудачных попытках авторизации по SSH и FTP. Очевидно, что в современном интернете существует немалое количество сервисов-роботов, которые ищут компьютеры с открытыми портами и пытаются к ним подключиться, перебирая пароли по имеющейся базе или используя метод полного перебора.

К счастью для нас, существует такая штука как fail2ban:

# apt-get install fail2ban

Сразу после установки утилита уже сконфигурирована на защиту большинства портов и если в логах системы за десять минут появится больше шести провальных попыток подключиться, то нарушитель будет заблокирован на десять минут. Механизм работы fail2ban довольно прост – по определённым триггерам срабатывают так называемые джейлы, которые определяют действие, предназначенное для защиты приложения.

Параметры блокировки можно задавать индивидуально:

# nano /etc/fail2ban/jail.local

В созданном файле необходимо прописать настройки, которыми будут замещены уже имеющиеся по умолчанию. Пример моего содержимого файла:

# общие настройки
ignoreip = 127.0.0.1
bantime = 2592000
findtime = 43200
maxretry = 6
banaction = iptables-multiport
# настройка отправки сообщения на почту
destemail = user@localhost
sendername = Fail2Ban
mta = sendmail
action = %(action_mwl)s

# защита SSH
enabled = true
port = 106
filter = sshd
logpath = /var/log/auth.log

# выявляем неудачные попытки ввода пароля
enabled = true
port = http,https
filter = apache-auth

# выявляем потенциальные сканирования для применения эксплойтов и php уязвимостей
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/log/apache*/*error.log

# выявляем попытки переполнения Апача
enabled = true
port = http,https
filter = apache-overflows
logpath = /var/log/apache*/*error.log
maxretry = 2

# выявляем неудачные попытки в поиске домашней директории на сервере
enabled = true
port = http,https
filter = apache-nohome
logpath = /var/log/apache*/*error.log
maxretry = 2

Приведённая выше настройка позволяет не контролировать локальный доступ, а при шести неверных попыток входа в течение 12 часов банит IP адрес атакующего, используя iptables, на 30 дней. Контролируется не только доступ по порту для SSH, но и подозрительные действия, направленные на дестабилизацию работы веб-сервера.

Справочный материал по веб-серверу

Запуск, остановка и перезагрузка сервера:

# service apache2 start
# service apache2 stop
# service apache2 restart

# service apache2 reload

Включение и отключение хоста test:

# a2ensite test
# a2dissite test

Включение и отключение конфигурации test:

# a2enconf test
# a2disconf test

Проверка синтаксиса файлов (должно вернуться: «Syntax OK»):

# apache2ctl configtest

Вариант добавление сайта с доступом по HTTP или HTTPS используя имеющийся виртуальный хост

Допустим, на наш сервер нужно добавить новый сайт, размещённый в директории site.com, расположенной в /home/user/www. Это может быть удобно, так как пользователю user не нужно будет покидать пределы своего домашнего каталога при работе с сайтом.

# chmod 755 /home/user

Создаём каталога для сайта:

$ mkdir /home/user/www /home/user/www/site.com

Для добавления доступа по HTTP открываем файл:

# nano /etc/apache2/sites-available/000-default.conf

Или для добавления доступа по HTTPS открываем файл:

# nano /etc/apache2/sites-available/default-ssl.conf

И добавляем в открытый файл нижеприведённое содержимое перед закрывающимся тегом /VirtualHost:


Перезапускаем веб-сервер:

# service apache2 restart

Проверяем доступность сайта по адресу http:// 127.0.0.1/site.com или https:// 127.0.0.1/site.com (методика проверки - см. ниже). Нужно обратить внимание, что сайт будет открываться в независимости от наличия файла.htaccess, так как для директории с сайтом установлена директива: «Require all granted».

Вариант добавление сайта с доступом по HTTP или HTTPS используя новый виртуальный хост и настройкой обращения к сайту через его доменное имя, а не IP

Условия задачи – те же, что и выше: допустим, на наш сервер нужно добавить новый сайт, размещённый в директории site.com, расположенной в /home/user/www. Но теперь я ещё хочу обращаться к сайту вводя в строку браузера только его доменное имя.

Выставляем права для пользовательского каталога (на всякий случай):

# chmod 755 /home/user

Создаём каталога для сайта:

$ mkdir /home/user/www/site.com

# ln -s /home/user/www/site.com /var/www/site.com

Для добавления доступа по HTTP создаём файл:

# nano /etc/apache2/sites-available/site.com.conf

Options FollowSymLinks AllowOverride All Require all granted # Redirect HTTP->HTTPS #RewriteEngine On #RewriteCond %{HTTPS} off #RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
Или для добавления доступа по HTTPS создаём файл:

# nano /etc/apache2/sites-available/site.com-ssl.conf

И добавляем в него следующее содержимое:

ServerName site.com ServerAlias www.site.com ServerAdmin user@localhost DocumentRoot /var/www/site.com Options FollowSymLinks AllowOverride All Require all granted # HSTS (mod_headers is required) (15768000 seconds = 6 months) Header always set Strict-Transport-Security "max-age=15768000" ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key SSLOptions +StdEnvVars SSLOptions +StdEnvVars BrowserMatch "MSIE " \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE " ssl-unclean-shutdown
В /etc/hosts добавляем строку «127.0.0.1 site.com»:

# echo >> /etc/hosts 127.0.0.1 site.com

Активируем HTTP хост:

# a2ensite site.com.conf

Или активируем HTTPS хост:

# a2ensite site.com-ssl.conf

Перезапускаем веб-сервер:

# service apache2 restart

Проверяем доступность сайта по адресу http:// site.com или https:// site.com (методика проверки – см. ниже). Нужно обратить внимание, что сайт будет открываться в независимости от наличия файла.htaccess, так как для директории с сайтом установлена директива: «Require all granted».

Все действия производятся внутри гостевой виртуальной машины. Было бы интересно «открыть» сайт в браузере хостовой системы. Это несложно. Мы знаем доменное имя и IP адрес гостевой машины. Если хостовая система Windows, то необходимо открыть файл c:\Windows\System32\drivers\etc\hosts и в самый конец добавить следующую строчку:


После этого изменения компьютер или хостовую систему придётся перезагрузить. Теперь, при открытии в браузере сайта site.com обращение к нему будет перенаправлено на нашу виртуальную машину. Фактически, мы сделали простейшую маршрутизацию в своём личном интернете на уровне хостовой операционной системы.

В случае, если нужен доступ к виртуальному хосту только по HTTPS, но не хочется терять соединения по протоколу HTTP можно настроить редирект:

Создать файл /etc/apache2/sites-available/site.com.conf по вышеприведённой инструкции, если он не создан
- в файле /etc/apache2/sites-available/site.com.conf раскомментировать три строки RewriteEngine/RewriteCond/RewriteRule
- активировать хост site.com.conf, если он не активирован
- перезапустить сервер: # service apache2 restart

Проверка работоспособности добавленного сайта

Самый простой способ проверки доступности сайта - разместить в его корневой директории файл index.html с каким-то содержимым.

Создаём файл index.html:

$ nano /home/user/www/site.com/index.html

И добавляем в него следующее содержимое:

TEST OK

TEST OK


В зависимости от метода добавления сайта открыть в браузере адрес http:// 127.0.0.1/site.com (https:// 127.0.0.1/site.com) или http:// site.com (https:// site.com) - должна открыться страница содержащая текст «TEST OK».

Справочный материал по MySQL

Создание пользователя user123 с паролем pass123 и базой данных db123 через консоль.

Войти в mysql, введя пароль суперпользователя mysql при запросе:

# mysql -u root -p

И создать базу данных (префикс «mysql>» набирать не нужно, точка с запятой в конце обязательна):

mysql> CREATE DATABASE `db123`;

Создать пользователя user123 с паролем pass123:

mysql> CREATE USER "user123"@"localhost" IDENTIFIED BY "pass123";

Выдать привилегии пользователю на базу данных:

mysql> GRANT ALL PRIVILEGES ON `db123`.* TO "user123"@"localhost";

Обновить таблицу привилегий:

mysql> FLUSH PRIVILEGES;

Выйти из mysql:

mysql> exit

Для проверки открыть адрес http:// 127.0.0.1/phpmyadmin и авторизоваться с реквизитами доступа user123/ pass123. Должен открыться доступ к базе данных db123.

Изменение пароля для root mysql c pass123 на pass456:

# mysqladmin -uroot -ppass123 password pass456

Изменение пароля пользователя user123 c pass123 на pass456:

# mysqladmin -uuser123 -ppass123 password pass456

Удаление пользователя user123:

mysql> DROP USER "user123"@"localhost";

Удаление таблицы db123:

mysql> DROP DATABASE `db123`;

Справочный материал по fail2ban

Перезапуск сервиса:

# service fail2ban restart

Проверка запущенных правил:

# fail2ban-client status

Подробная статистика по правилу sshd:

# fail2ban-client status ssh

Разбанивание:

# fail2ban-client set ssh unbanip Banned_IP

В этом уроке вы узнаете, как установить Apache, MariaDB и PHP7 (LAMP stack) на растяжку Debian 9. LAMP является наиболее распространенным стеком веб-сервисов для создания динамических веб-сайтов и веб-приложений.

Он состоит из четырех компонентов: Linux, Apache, MySQL / MariaDB, PHP — Linux — это операционная система; Apache — это веб-сервер; MySQL / MariaDB — это база данных; PHP — это серверный скриптовый язык.

Вообще, установка LAMP в Debian 9 как и в другом дистрибутиве основанном на Linux является очень простой. Особенно если вы хорошо знакомы с командной стройкой. Мы расскажем все очень подробно, чтобы даже новичок смог справиться.

Установка LAMP в Debian 9

Все четыре компонента являются свободными и с открытым исходным кодом. Однако, поскольку MySQL теперь принадлежит Oracle, и есть вероятность, что Oracle превратит его в продукт с закрытым исходным кодом, мы выберем MariaDB вместо MySQL. Вы можете следовать этому руководству на VPS (Virtual Private Server) или на локальном компьютере с Debian 9.

Обратите внимание, что при установке программного обеспечения на Debian вам необходимо иметь привилегии root. Можете добавить sudo в начале команды или использовать su-команду для переключения на пользователя root.

Шаг 1. Обновление пакетов программного обеспечения

LAMP (серверный стек) означает Linux, Apache, MySQL и PHP; четыре популярных программных компонента с открытым исходным кодом, используемых большинством веб-хостинга, веб-разработчиков, блогов и других. Мы подготовили справочник по установке вашего веб-сервера для тестовой среды в последней версии Debian. Вообще, установка LAMP в Debian 9 является очень простой, главное разобраться с основными функциями.

MariaDB заменяет сервер MySQL в качестве базы данных по умолчанию в Debian 9.

Установите Linux:
о том, что хорошего, интересного и инновационного преподнесли в Debian 9. Это является главным условием для установки всего остального. Также, рекомендуем ознакомиться с другими руководствами на сайте. Например, мы уже говорили о том, на вашей системе с Ubuntu.

Теперь мы перейдем к установке AMP (Apache версии 2, PHP версии 7, MariaDB версии 10.2) на Debian 9. Итак, давайте установим один за другим.

Установите Apache HTTP-сервер:
Для начала мы установим веб-сервер Apache. Откройте терминал, а затем переключитесь на пользователя root.

Обновите индекс репозитория пакета.

Имя пакета веб-сервера Apache — apache2. Установите пакет apache2, используя команду apt-get.

apt-get -y install apache2

Управление HTTP-сервером Apache:

Чтобы запустить сервер Apache2, запустите.

systemctl start apache2.service

Чтобы остановить сервер Apache2, запустите.

systemctl stop apache2.service

Чтобы перезапустить сервер Apache2, запустите.

Чтобы проверить статус сервера Apache2, запустите.

systemctl status apache2.service

Брандмауэр:

Разрешить HTTP-сервер Apache через брандмауэр.

ufw allow 80/tcp

ufw allow 443/tcp

Тестирование HTTP-сервера Apache:

Теперь мы проверим веб-сервер Apache, чтобы убедиться, что он работает правильно или нет. Откройте любой веб-браузер, а затем перейдите к следующему URL-адресу.

HTTP: // локальный /
ИЛИ

Http: // ваш-ф-надстройку ССГ /
Вы получите страницу «Apache2 Debian по умолчанию», эта страница по умолчанию подтверждает, что HTTP-сервер Apache работает нормально.

Установка сервера MySQL (MariaDB):
MariaDB — это замена MySQL-сервера, разработанная первоначальными разработчиками MySQL, чтобы остаться и иметь открытые исходные RDBMS. MariaDB теперь является одним из самых популярных серверов баз данных в мире.

Чтобы установить MariaDB, выполните следующую команду

apt-get -y install mariadb-server

Эта команда позволяет улучшить безопасность вашей установки MariaDB следующими способами:

Вы можете установить пароль для учетной записи root.

Вы можете ограничить учетные записи root локальному хосту.

Вы можете удалить анонимные учетные записи пользователей.

Вы можете удалить тестовую базу данных и привилегии, позволяющие кому-либо обращаться к базам данных с именами, начинающимися с test_.

Установите PHP:
По умолчанию сервер Apache поддерживает только.html, а не PHP, для этого вам нужно установить PHP и пакет расширения php для сервера MariaDB. Здесь мы установим PHP 7 на Debian 9.

apt-get -y install php php-mysql

После установки пакета PHP вам потребуется перезапустить HTTP-сервер Apache.

systemctl restart apache2.service

Тестирование PHP:

Используйте редактор VI для создания файла info.php.

vi /var/www/html/info.php

Эта команда vi откроет файл с именем info.php. Скопируйте / Вставьте ниже строки в файл info.php:

Сохраните и закройте файл, используя Esc +: wq.

Теперь откройте свой интернет-браузер и введите следующий URL-адрес в веб-адрес.

Http: //localhost/info.php

Http: //your-ip-add-ress/info.php
Страница будет выглядеть вот так:

Установка LAMP в Debian 9, как мы говорили выше, оказалась очень простой. Надеемся, вы быстро разобрались в основных значениях при установке. Но если у вас есть вопросы, то обязательно их задавайте в комментариях.

Выводы

Это все! Поздравляем, вы успешно установили LAMP на Debian 9. Если статья была полезной для вас, то не забудьте - поделитесь ссылкой.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter .

Веб-сервер Apache без преувеличения можно назвать стандартом де-факто в интернет. Большинство популярных систем управления сайтами и иных веб-приложений разрабатываются таким образом, чтобы работать с данным веб-сервером "из коробки". Поэтому, если вам нужен веб-сервер широкого применения, то Apache будет лучшим выбором. В данной статье мы расскажем, как установить и настроить полноценный веб-сервер на базе Debian / Ubuntu Server.

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

Кроме самого веб-сервера нам понадобится система управления базами данных, в данной отрасли стандартом де-факто давно является MySQL, и один из скриптовых языков для работы веб-приложений, на сегодняшний день пальму первенства уверенно держит PHP. Все вместе образует классическую связку, именуемую еще LAMP-сервер, аббревиатура расшифровывается как: Linux - Apache - MySQL - PHP.

Для установки мы будем использовать платформу Debian / Ubuntu. Системы, в зависимости от релиза, отличаются набором ПО, но все изложенное ниже будет одинаково применимо к любой из них. Существующие отличия будут оговорены отдельно. На момент написания статьи актуальны следующие релизы систем и версии ПО:

  • Debian 8 Jessie: Apache 2.4.10, PHP 5.6.7, MySQL 5.5.43
  • Debian 7 Squeeze: Apache 2.2.22, PHP 5.4.39, MySQL 5.5.43
  • Ubuntu Server 14.04 LTS: Apache 2.4.7, PHP 5.5.9, MySQL 5.5.43
  • Ubuntu 12.04 LTS: Apache 2.2.22, PHP 5.3.10, MySQL 5.5.43

Все вышеуказанные выпуски содержат относительно современные версии ПО, но есть некоторые особенности. Так входящий в состав Ubuntu 14.04 и Debian 8, Apache 2.4 имеет достаточно серьезные отличия от Apache 2.2 и не все CMS (системы управления контентом, "движки") и веб-приложения умеют работать с ним, особенно это касается старых версий. Так, например, вы не сможете использовать Apache 2.4 для веб-доступа к базам 1С:Предприятие. Поэтому, если вы решили выбрать версию 2.4 - уточните совместимость с нею всех планируемых к размещению CMS и веб-приложений.

Кроме того, MySQL из состава Ubuntu Server 12.04 / 14.04 не работает внутри контейнеров OpenVZ, которые широко используются для предоставления услуги VPS. Проблема решается заменой MySQL из репозитория на версию от MySQL Community (разработчики) или один из форков, например, MariaDB.

С учетом вышесказанного оптимальным выбором нам представляется использование в качестве платформы веб-сервера Debian 7, как наиболее совместимую с существующими веб-приложениями и не имеющую серьезных проблем.

Мы не будем останавливаться на установке и подготовке серверной ОС, более подробно вы можете ознакомиться с этим процессом в наших статьях для и . Также не забудьте правильно настроить системы. Все приведенные ниже действия следует выполнять с правами суперпользователя, например, с помощью команды sudo.

Установка Apache

Установка веб-сервера предельно проста:

Apt-get install apache2

Для проверки его работы наберите в браузере IP-адрес сервера, и вы увидите стандартную страницу заглушку:

Для Apache 2.4 она выглядит несколько иначе, но смысл от этого не меняется.

Настройки сервера содержатся в /etc/apache2/apache2.conf , к которому подключаются дополнительные файлы из директорий mods-enabled и sites-enabled . При этом никто не мешает вам внести все указанные настройки непосредственно в apache2.conf - все будет работать, но это резко снижает удобство администрирования, так как требует постоянной правки основного файла конфигурации, в то время как настройки во внешних файлах легко включаются и отключаются при помощи специальных инструментов.

С этой целью каталоги mods-enabled и sites-enabled не содержат файлов конфигурации, а только символические ссылки на директории mods-available и sites-available , где следует располагать сами файлы. Как понятно из названий, в данных каталогах находятся настройки модулей и виртуальных хостов. Если с модулями дело приходится иметь редко, то управлять таким образом виртуальными хостами, т.е. сайтами, очень удобно.

Подробно о виртуальных хостах и расположении содержимого сайта мы уже писали в статье по , все сказанное там справедливо и для нашего случая. Вы вольны выбрать любую схему размещения данных, мы же предпочитаем хранить содержимое сайтов внутри /var/www в папках с именем домена.

Следующий вопрос, который следует решить, это права доступа к файлам и папкам сайта. По умолчанию их владельцем должен являться веб-сервер (пользователь и группа www-data ), в противном случае скрипты могут работать неожиданным образом или не работать вообще. Более удобно и безопасно запускать содержимое сайтов от имени пользователя, а не веб-сервера. Для этого установим следующий пакет:

Apt-get install apache2-mpm-itk

В Ubuntu 14.04 при установке данного пакета вы можете столкнуться с ошибкой:

Dpkg: error processing package apache2-mpm-itk (--configure):
проблемы зависимостей -- оставляем не настроенным

Закрываем открытые секции: и , затем сохраняем файл. Конфигурация виртуального хоста готова.

Чтобы включить сайт необходимо сделать символьную ссылку на файл конфигурации в каталоге sites-enabled , а, чтобы выключить - удалить эту ссылку. Это можно сделать вручную, при помощи команды ln -s, или использовать специальную утилиту apache:

A2ensite example.com

Данная команда включит сайт, для выключения введите:

A2dissite example.com

В качестве опции команде передается имя конфигурационного файла из sites-available , в случае Apache 2.4 без расширения. После каждого такого действия веб-сервер необходимо перезапустить:

Service apache2 reload

Чтобы проверить работу виртуального хоста разместите в его корневой директории любой html-файл и обратитесь к серверу по имени домена (при этом А-запись домена должна быть настроена и указывать на ваш веб-сервер).

Например, создадим индексный файл:

Touch /var/www/examlpe.com/index.html

И разместим в нем строку:

OK!

В итоге в браузере вы должны увидеть следующее:

Установка PHP

Если веб-сервер был нужен вам для размещения статического содержимого или сторонних веб-приложений, например, публикации баз 1С:Предприятия, то дальше можно не читать. Но если вы собираетесь создать сайт на основе популярных CMS - вам потребуется поддержка скриптового языка PHP, на базе которого разработаны большинство современных "движков".

Важно! В современных дистрибутивах используется более новая версия PHP7, чтобы работать с новой версией языка вместо php5 в приведенных ниже командах следует указывать php7.0 , например, вместо php5-imagick нужно набрать php7.0-imagick

Выполним команду:

Apt-get install php5

Будет установлен сам интерпретатор и необходимые для работы с веб-сервером модули. Модули позволяют гибко изменять функциональность PHP, управление модулями осуществляется аналогично Apache, когда конфигурации модулей располагаются в одной директории, а для их подключения делается символьная ссылка в другую.

По умолчанию PHP устанавливается с базовым набором модулей, который удовлетворяет большинство потребностей, однако применяемая вами CMS может требовать дополнительных модулей, которые нужно будет установить отдельно.

Например, для работы с графикой вам потребуется поддержка графической библиотеки GD2 , поэтому установим соответствующий модуль:

Apt-get install php5-gd

После чего не забудьте перезапустить веб-сервер:

Service apache2 reload

Кстати, GD2 , на наш взгляд не самый лучший выбор, в актив библиотеки можно записать низкое потребление ресурсов и высокую скорость работы, но по качеству работы с изображениями она уступает альтернативной утилите imagemagick , иногда значительно. Поэтому имеет смысл установить обе утилиты и выбрать ту, работа которой наиболее вам подойдет. Если ресурсы сервера позволяют, то предпочтительно использовать imagemagick .

Установим утилиту и модуль PHP для нее:

Apt-get install imagemagick php5-imagick

Для проверки работы PHP создадим в корневой директории сайта специальный скрипт:

Touch /var/www/examlpe.com/info.php

И внесем в него следующий текст:

phpinfo();
?>

Теперь наберем в браузере http://example.com/info.php , в результате работы данного скрипта вы увидите стандартную страницу с информацией о PHP, установленных модулях, настройках и т.д.

Установка MySQL

СУБД MySQL - третий необходимый компонент полноценного веб-сервера, основное назначение базы данных - хранение информации сайта, как пользовательской, так и служебной. При этом по важности СУБД превосходит все остальные компоненты, так как потеря базы данных равносильна потере всей информации вашего ресурса.

Установим сервер баз данных и модуль PHP для работы с ним:

Apt-get install mysql-server php5-mysql

В процессе установки вам будет предложено ввести пароль для суперпользователя MySQL (root), которого не следует путать с суперпользователем системы.

Для удобного управления базами данных имеет смысл установить phpMyAdmin - удобную веб-утилиту для управления сервером MySQL:

Apt-get install phpmyadmin

Инсталлятор утилиты умеет автоматически настраивать популярные веб-сервера Apache и Lighttpd , нужный сервер следует указать при установке:

Веб-интерфейс утилиты будет доступен по адресу http://example.com/phpmyadmin , для входа следует использовать учетные данные пользователя MySQL, в нашем случае это root (других еще нет) с паролем, который мы указали во время установки MySQL.

В Ubuntu 14.04 мы столкнулись с небольшой проблемой, утилита сообщила нам, что расширение mcrypt не найдено, хотя соответствующий модуль PHP был установлен среди зависимостей.

Проверим. В /etc/php5/apache2/conf.d ссылка на данный модуль отсутствует, в то время как в /etc/php5/mods-available нужный файл есть. Следовательно, модуль установлен, но, по какой-то причине, не подключен. Возможно это связано с Apache 2.4 и тогда подобная ситуация может иметь место и в Debian 8 .

Однако ничего страшного не произошло, все что нам нужно - это подключить модуль, создав символьную ссылку:

Ln -s /etc/php5/mods-available/mcrypt.ini /etc/php5/apache2/conf.d/20-mcrypt.ini

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

Откроем phpMyAdmin и перейдем на страницу Привилегии (Пользователи) , где выберем Добавить нового пользователя .

Теперь прокрутим страничку чуть ниже и установим опцию Предоставить полные привилегии на базы данных подпадающие под шаблон (имя пользователя\_%)

Это позволит лишний раз не отвлекаться на установку прав, а просто создавать базы с именами вида ivanov_base1 или petrov_base2 , предоставляя соответствующим пользователям полные права на них, а также быстро определять принадлежность баз данных. В тоже время данная настройка не является догмой, вы можете поступать на свое усмотрение. Остальные параметры оставляем по умолчанию.

Для проверки создадим базу данных phpMyAdmin - Базы данных - Новая база данных .

При создании БД обращайте внимание на кодировку. Сегодня большинство движков и веб-приложений работают с UTF-8 (utf8_general_ci) , однако старые версии движков могут использовать национальные кодировки, поэтому нужно будет правильно указать их еще на стадии создания базы, в противном случае, залив в базу, созданную в UTF-8 дамп в кодировке Windows-1252 вместо русских букв на сайте окажутся "крякозяблики".

Создав базу, проверим ее привилегии, нажав одноименную ссылку рядом с именем базы.

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

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

  • Теги:

Please enable JavaScript to view the

Хотелось бы рассказать как я устанавливал apache2 c php5 и mysql, а так же phpmyadmin на Debian, Ubuntu и Linux Mint в своей статье «Установка Apache2 с PHP5 и MySQL + phpmyadmin для Debian/Ubuntu/Mint». У меня установлен Debian, работать будет так же на Ubuntu и Linux Mint.

Я использую my_server.example.net — это доменное имя с 192.168.16.66- это его айпишник. Они будут отличны от ваших, и их можно настроить под себя. А посмотреть можно вот так:

# vim /etc/hosts [...] 192.168.16.66 my_server.example.net [...]

Я буду запускать все команды с привилегиями суперюзера, поэтому убедитесь, что вы вошли в вашу систему как администратор (root):

Установка Mysql

Когда я начал писать эту статью, то последняя версия mysql была 5, сейчас установим:

# apt-get install mysql-server mysql-client

В ходе установки, попросят ввести пароль для MySQL (для полного доступа, для рута) — это пароль будет одинаков как для root@localhost, так и для root@my_server.example.net. Его нужно ввести 2 раза.

Еще полезные статьи по теме:
1. 2. 3.
4.
5.

Установка apache2

Apache2 содержится в репозитории Ubuntu, как пакет, по этому я могу установить следующим образом:

# apt-get install apache2

После того как завершится установка, нужно перейти в свой ​​браузер на http://ip_server_or-IP (у меня это http://my_server.example.net), и вы должны увидеть страницу приветствия Apache2 (Это работает!), на английском «It’s works!». По этому если вы это увидели, то сервер работает нормально.

Домашняя директория с apache-м, по умолчанию, находится в /var/www на Debian, и файл конфигурации лежит в /etc/apache2/apache2.conf. Дополнительные конфигурации хранятся в подкаталогах, в таких как /etc/apache2/mods-enabled (для модулей Apache), /etc/apache2/sites-enabled (для виртуальных хостов), и /etc/apache2/conf.d.

Установка PhP5

Мы можем установить пхп и модуль для работы вот так:

# apt-get install php5 libapache2-mod-php5

Перезапускаем веб сервер чтобы все что установили вступило в силу:

Для того чтобы убедится что все хорошо работает у нас, нужно создать файл в домашней директории апача (если вы не меняли то он находится по пути /var/www) и добавим php код который будет выводить полезную информацию о установленных приложения (php, apache, модули и тд):

# vim /var/www/php_info.php

Открываем браузер и переходим на этот файл:
http://your_ip/php_info.php

Вы должны увидеть некоторые данные на экране. Чтобы была поддержка MySQL в PHP,нужно установить php5-mysql пакет. Сейчас я установлю полезные модули, по этому, если нужны они вам, то устанавливайте (они не помешают), так же можно выбрать самое необходимое и не ставить все что я ставлю себе.

# apt-cache search php5

Выберите те, которые вам нужны, и установить их так:

# apt-get install php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl php5-suhosin

Я установлю все перечисленное, оно не помешает мне. В этой установке содержатся модули для работы с шифрованием + для работы с кешем (улучшение работы пхп) + поддержка sqlite и еще много чего. Я не буду описывать каждый из них, если уж очень нужно будет, то напишите и я добавлю описание каждого из них и вам станет понятно, но гугл еще работает =)

Теперь перезагрузите сервер:

# /etc/init.d/apache2 restart

XCache — модуль для кэширования и оптимизации промежуточного кода PHP. У него есть пару аналогов, таких как Eaccelerator и APC. Я рекомендую, чтобы хотя бы один из них был установлен у вас он должен ускорить работу ваших страниц которые написаны на PHP.

XCache можно установить следующим образом:

# apt-get install php5-xcache

Перезапускаем апач:

# /etc/init.d/apache2 restart

Чтобы посмотреть весь список установленных модулей, выполните:

# php -m

Теперь перезагрузите страничку с нашим php_info в вашем браузере и прокручиваем вниз до раздела модулей. Теперь вы должны найти много новых модулей там, в том числе модуля MySQL.

Установка phpmyadmin

Если нужно установить именно phpmyadmin для работы с вашими базами, то сейчас мы это сделаем:

# apt-get install phpmyadmin

Мастер установки спросит какой веб -сервер вы используете (Web server to reconfigure automatically ): выбираем apache2, есть так же еще lighttpd. На следующий вопрос «Configure database for phpmyadmin with dbconfig-common ?» — отвечаем No. Хотя можно нажать и Yes, тогда установщик спросит пароль для пользователя admin (нужен для входа в phpmyadmin).

Чтобы начать пользоваться phpmyadmin, нужно открыть в браузере:
http://yourIP_or_server/phpmyadmin/

Вводим в поле логин «root», пароль вводим такой как вы создали для mysql.

Настройка mysql

попозже будет(через пару дней)

Настройка apache2

Тут я буду рассказывать основные настройки веб-сервера апач, но по мере возможности. Я с каждым разом редактирую данную статью и добавляю что — то новое в описание.

Виртуальные хосты (Virtualhosts).

Хочу начать я свою настройку с создания и настройки Virtualhosts (виртуальных хостов). Есть много разных способов чтобы создать виртуальные хосты, но я бы посоветовал данный метод (поискав и перебрал много вариантов и литературы, я выбрал именно его).

По умолчанию, веб-сервер апач «слушает» все IP-адреса которые доступны для виртуального сервера. Это не есть хорошо, по этому нужно подредактировать и настроить его на прослушивание только определенного ИП-адреса. Даже если Вы имеете только один IP адрес!

Делаем изменение в файле ports.conf:

# vim /etc/apache2/ports.conf [...] NameVirtualHost 192.168.16.66:80 [...]

Измените данный ИП-адрес на свой!

Делаем изменение в файле default:

# vim /etc/apache2/sites-available/default

Теперь я создам 1 виртуальный хост в качестве примера:

# vim /etc/apache2/sites-available/test ServerAdmin [email protected] # введите свой емейл ServerName 192.168.16.66 # замените на свой IP ServerAlias www.192.168.16.66 # замените на свой ИП-адрес или доменное имя DocumentRoot /var/www/192.168.16.66/public_html/ # домашняя директория для данного домена или сайта ErrorLog /var/www/192.168.16.66/logs/error.log # файл для хранения ошибок CustomLog /var/www/192.168.16.66/logs/access.log combined # # папка для хранения ошибок

Создадим папки которых нет:

# mkdir -p /var/www/192.168.16.66/ # mkdir -p /var/www/192.168.16.66/public_html # mkdir -p /var/www/192.168.16.66/logs

После всех изменений, нужно подключить данный домен в apache:

# a2ensite test

И перезагрузить веб-сервер:

# /etc/init.d/apache2 reload

Можно отключить данный сайт (виртуальный хост test)следующей командой:

# a2dissite test

Чтобы проверить работает ли все нормально, я скопирую файл (php_info):

# cp /var/www/php_info.php /var/www/192.168.16.66/public_html/

Можно открыть браузер и перейти:
http://192.168.16.66/php_info.php

Настройка PHP5

Все изменения нужно проводить в конфигурационном файле php.ini, сейчас мы его немного поправим:

# vim /etc/php5/apache2/php.ini [...] max_execution_time = 30 memory_limit = 64M error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR display_errors = Off log_errors = On error_log = /var/log/php.log register_globals = Off [...]

Вот и все, данная тема «Установка Apache2 с PHP5 и MySQL + phpmyadmin для Debian/Ubuntu/Mint» полностью раскрыта, можно использовать наш установленный LAMP.



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows