Lamp это: Lamp — Википедия – «Что такое LAMP?» – Яндекс.Знатоки

Содержание

Установка и настройка веб-сервера LAMP для разработки на PHP / Habr

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

Данный способ уже несколько лет использую на .deb-based дистрибутивах. Ранее веб-сервер был установлен и отлично работал на Debian, Mint, Ubuntu, LMDE (с некоторыми поправками) и сейчас работает на elementaryOS.

Итак, начнем.

Заранее предполагаем, что наш сайт должен быть доступен по адресу mysite.zz, а папка с файлами сайта расположена по пути /home/user/server/mysite.zz. Веб-сервер будет устанавливаться на ElementaryOS. Поэтому в процессе настройки будет использован стандартный текстовый редактор scratch-text-editor. Можно использовать любой текстовый редактор, заменив «scratch-text-editor» на название своего редактора.

1. Установка необходимых пакетов

Вводим в терминале
sudo apt-get install apache2 mysql-server php5 phpmyadmin

При установке пакетов нам будет необходимо выполнить их предварительную настройку в псевдографическом режиме терминала.
В первом окне нам предлагают ввести пароль для MySQL пользователя «root». Вводим пароль и подтверждаем его:
ввод пароля для MySQL пользователя root
подтверждение пароля для MySQL пользователя root
Далее идет настройка phpmyadmin.
Здесь нас спросят, какой веб-сервер использовать для запуска phpmyadmin. Отмечаем apache2 клавишей пробела и жмем enter:
выбор веб-сервера для запуска phpmyadmin
На следующем экране читаем некоторую информацию и жмем enter
некоторая информация
Далее подтверждаем настройку базы при помощи dbconfig-common:
подтверждение настройки при помощи dbconfig-common
Вводим введенный выше пароль в трех следующих экранах
2. Проверка работы сервера и phpmyadmin

Переходим в любом браузере по адресу localhost. Если сервер нормально установлен, то мы должны увидеть тестовую страницу сервера:
тестовая страница сервера

Для доступа к phpmyadmin переходим по ссылке localhost/phpmyadmin. Вводим логин «root» и пароль, введенный ранее:
страница входа phpmyadmin
Там же можно изменить язык интерфейса phpmyadmin.

Если все сделано верно, то мы перейдем к управлению нашими базами:

главная страница phpmyadmin
3. Настройка сервера

Создаем ссылку на phpmyadmin в /var/www
sudo ln -s /etc/phpmyadmin /var/www

Открываем конфигурационный файл сервера:
sudo scratch-text-editor /etc/apache2/apache2.conf

и добавляем в конец файла строчку:
ServerName localhost:80

/etc/apache2/apache2.conf
4. Добавление нашего сайта

Открываем файл hosts для добавления нашего сайта:
sudo scratch-text-editor /etc/hosts

и добавляем в файл строчку
127.0.1.1 mysite.zz

/etc/hosts

Создаем в любой папке конфигурационный файл сайта с названием «mysite.zz» с содержанием

<VirtualHost *:80>
  ServerAlias mysite.zz www.mysite.zz
  DocumentRoot /home/user/server/mysite.zz
  <Directory home/user/server/mysite.zz/>
    AllowOverride All
  </Directory>
</VirtualHost>

и копируем его с правами суперпользователя в /etc/apache2/sites-available
sudo cp полный_путь_к_файлу /etc/apache2/sites-available/

Активируем наш сайт:
sudo a2ensite mysite.zz

Активируем модуль mod-rewrite (необходим для реализации ЧПУ):
sudo a2enmod rewrite

И перезапускаем сервер:
sudo /etc/init.d/apache2 restart
5. Проверка работы нашего сайта

Создаем файл index.php в папке нашего сайта (/home/user/server/mysite.zz), например, с таким содержанием:
<?
echo 'hello!))';
?>

Далее в любом браузере переходим по адресу mysite.zz
тестовая страница нашего сайта
Если мы видим нашу страничку, то все сделали верно.
6. Возможные проблемы

Phpmyadmin не доступен по адресу localhost/phpmyadmin

Для исправления этой ошибки необходимо переконфигурировать phpmyadmin
sudo dpkg-reconfigure phpmyadmin

Следующие проблемы мной наблюдались только в LMDE. Но не исключено, что могут встретиться в других дистрибутивах.

Доступ к нашему сайту может быть запрещен сервером

Для исправления этой проблемы к имени конфигурационного файла нашего сайта в /etc/apache2/sites-available необходимо добавить расширение .conf
mysite.zz.conf

содержание файла должно быть отредактировано следующим образом
<VirtualHost *:80>
  ServerAlias mysite.zz www.mysite.zz
  DocumentRoot /home/user/server/mysite.zz
  <Directory home/user/server/mysite.zz/>
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>

А активация сайта должна производиться по имени конфига
sudo a2ensite mysite.zz.conf
Не определяется логин и пароль при входе в phpmyadmin

Для исправления этой ошибки внесем некоторые изменения в конфигурационный файл phpmyadmin.
Открываем его
sudo scratch-text-editor /etc/phpmyadmin/config.inc.php

и добавляем следующие строчки
$dbuser = 'root';
$dbpass = 'kenny';

после строк
$cfg['Servers'][$i]['controluser'] = $dbuser;
$cfg['Servers'][$i]['controlpass'] = $dbpass;

Теперь phpmyadmin должен распознать наш логин и пароль.
Дополнение

В данной статье не было рассмотрено подключение проекта к базе данных. Вариантов подключения очень много как в процедурном PHP, так и в объектно-ориентированном. Единственное, что могу сказать по этому поводу, это то, что при любой реализации подключения к определенной базе необходимо будет использовать пользователя «root» и пароль, который мы указывали при настройке пакетов при их установке.

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

И в заключение отмечу, что настройки конфигурационный файл PHP php.ini находится в директории /etc/php5/apache2/.

Удачных Вам проектов и чистого кода!

LAMP | Русскоязычная документация по Ubuntu

LAMP — акроним, обозначающий набор (комплекс) серверного программного обеспечения. LAMP назван по первым буквам входящих в его состав компонентов (Linux-Apache-MySQL-PHP), который включает в себя Linux, Apache, MySQL и PHP.

Версии Apache, MySQL и PHP в Ubuntu

Ubuntu Apache MySQL PHP
12.04 LTS (Precise) 2.2 5.5 5.3
14.04 LTS (Trusty) 2.4 5.5, 5.6 5.5
16.04 LTS (Xenial) 2.4 5.7 7.0
17.10 (Artful) 2.4.27 5.7.20 7.1

Установка

LAMP можно установить при помощи Tasksel(англ.). Для этого необходимо выполнить команду:

sudo tasksel install lamp-server

При установке будет запрошен пароль для создания администратора БД MySQL.

Удаление

Для удаления LAMP вам необходимо ввести в терминале следующее:

sudo tasksel remove lamp-server

Управление запуском LAMP

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

Apache

Для отключения:

sudo update-rc.d -f apache2 disable

Для запуска вручную:

sudo service apache2 start
MySQL

Для отключения:

echo "manual" | sudo tee -a /etc/init/mysql.override

Для запуска вручную:

sudo service mysql start

Настройка компонентов LAMP

Подробно о настройке частей LAMP можно прочитать в соответствующих статьях:

Смотрите также

Ссылки

Веб-сайт на LAMP- или LEMP-стеке | Яндекс.Облако

LAMP (Linux, Apache HTTP Server, MySQL, PHP) и его вариация LEMP (в которой веб-сервер Apache заменяется на Nginx) — популярные наборы компонентов для развертывания веб-приложений и динамических сайтов.

С помощью этой инструкции вы научитесь разворачивать LAMP в инфраструктуре Яндекс.Облака: в результате вы запустите виртуальную машину, на которой будет работать веб-сервер вашего сайта.

Чтобы настроить LAMP- или LEMP-сайт:

  1. Подготовьте облако к работе.
  2. Создайте виртуальную машину с предустановленным веб-сервером.
  3. Загрузите файлы веб-сайта.
  4. Настройте DNS.
  5. Проверьте работу сайта.

Если сайт вам больше не нужен, удалите все используемые им ресурсы.

Подготовьте облако к работе

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

  1. Перейдите в консоль управления, затем войдите в Яндекс.Облако или зарегистрируйтесь, если вы еще не зарегистрированы.
  2. На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша виртуальная машина, на странице облака.

Подробнее об облаках и каталогах.

Необходимые платные ресурсы

В стоимость поддержки LAMP-сервера входит:

Создайте виртуальную машину с предустановленным веб-сервером

Чтобы создать виртуальную машину:

  1. На странице каталога в консоли управления нажмите кнопку Создать ресурс и выберите пункт Виртуальная машина.

  2. В поле Имя

    введите имя виртуальной машины — lamp-vm или lemp-vm.

    • Длина — от 3 до 63 символов.
    • Может содержать строчные буквы латинского алфавита, цифры и дефисы.
    • Первый символ — буква. Последний символ — не дефис.
  3. Выберите зону доступности, в которой должна находиться виртуальная машина. Если вы не знаете, какая зона доступности вам нужна, оставьте выбранную по умолчанию.

  4. В блоке Публичные образы нажмите кнопку Выбрать и выберите образ виртуальной машины с нужным набором компонентов:

    • LAMP для Linux, Apache, MySQL, PHP.
    • LEMP для Linux, Nginx, MySQL, PHP.

    LEMP рекомендуется использовать для статических сайтов.

  5. В блоке Вычислительные ресурсы:

    • Выберите платформу виртуальной машины.
    • Укажите необходимое количество vCPU и объем RAM.

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

    • Платформа — Intel Cascade Lake.
    • Гарантированная доля vCPU — 5%.
    • vCPU — 2.
    • RAM — 1 ГБ.
  6. В блоке Сетевые настройки нужно выбрать сеть и подсеть, к которым нужно подключить виртуальную машину. Если нужной сети или подсети еще нет, вы можете создать их прямо на странице создания ВМ.

  7. В поле Публичный адрес оставьте значение Автоматически, чтобы назначить виртуальной машине случайный внешний IP-адрес из пула Яндекс.Облака, или выберите статический адрес из списка, если вы зарезервировали его заранее.

  8. Укажите данные для доступа на виртуальную машину:

    Предупреждение

    IP-адрес и имя хоста (FQDN) для подключения к машине назначатся ей при создании. Если вы выбрали вариант

    Без адреса в поле Публичный адрес, вы не сможете обращаться к ВМ из интернета.

  9. Нажмите кнопку Создать ВМ.

Создание виртуальной машины может занять несколько минут. Когда виртуальная машина перейдет в статус RUNNING, вы можете загрузить на нее файлы веб-сайта.

vm-running

Загрузите файлы веб-сайта

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

  1. В блоке Сеть на странице виртуальной машины в консоли управления найдите публичный IP-адрес виртуальной машины.

  2. Подключитесь к виртуальной машине по протоколу SSH.

  3. Выдайте права на запись для вашего пользователя на директорию /var/www/html:

    $ sudo chown -R "$USER":www-data /var/www/html
    
    $ sudo chown -R "$USER":apache /var/www/html
    
  4. Загрузите на виртуальную машину файлы веб-сайта с помощью протокола SCP.

    Используйте утилиту командной строки scp:

    $ scp -r <путь до директории с файлами> <имя пользователя ВМ>@<IP-адрес виртуальной машины>:/var/www/html
    

    С помощью программы WinSCP скопируйте локальную директорию с файлами в директорию /var/www/html на виртуальной машине.

Настройте DNS (если есть доменное имя)

Если вы хотите связать какое-то доменное имя с развернутым сервером, отредактируйте DNS-записи вашего домена.

В инструкции ниже описана настройка внешнего DNS-сервиса на примере reg.ru для доменных имен www.example.com и example.com:

  • Запись типа A позволяет сопоставить доменному имени example.com его IP-адрес.
  • Запись типа CNAME (Canonical Name — каноническое имя) для www позволит получить доступ к вашему веб-сайту через адрес www.example.ru.

Чтобы настроить внешний DNS-сервис, выполните:

  1. В блоке Сеть на странице виртуальной машины в консоли управления найдите публичный IP-адрес виртуальной машины.
  2. Войдите в панель управления внешнего DNS-сервиса. Перейдите в список ваших доменов и нажмите на имя нужного домена.
  3. Перейдите по ссылке Управление зоной в блоке Управление доменом.
  4. Создайте или отредактируйте A-запись:
    • IP Address — публичный IP-адрес вашей виртуальной машины.
    • Subdomain@ (указывает на основной домен).
  5. Создайте CNAME-запись со значениями полей:
    • Subdomainwww.
    • Canonical name@ или домен с точкой на концеexample.com..
  6. Подождите 15-20 минут, пока изменения DNS-записей вводятся в действие. Время ожидания может отличаться для вашего DNS-сервиса.

Проверьте работу сайта

Чтобы проверить работу сайта, откройте его адрес в браузере: http://<публичный IP-адрес виртуальной машины>.

Проверить работу доменного имени аналогичным образом можно будет только через 15-20 минут после того, как вы изменили DNS-записи.

Как удалить созданные ресурсы

Чтобы перестать платить за развернутый сервер, достаточно удалить виртуальную машину lamp-vm или lemp-vm.

Если вы зарезервировали статический публичный IP-адрес специально для этой ВМ:

  1. Откройте сервис Virtual Private Cloud в вашем каталоге.
  2. Перейдите на вкладку IP-адреса.
  3. Найдите нужный адрес, нажмите значок ellipsis и выберите пункт Удалить.

LAMP — это… Что такое LAMP?

Эта статья о веб-технологиях; о белка́х см.: LAMP1.

LAMP — акроним, обозначающий набор (комплекс) серверного программного обеспечения, широко используемый во Всемирной паутине. LAMP назван по первым буквам входящих в его состав компонентов:

Акроним LAMP может использоваться для обозначения:

  1. Инфраструктуры веб-сервера
  2. Парадигмы программирования
  3. Пакета программ

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

Варианты

Иногда букву P в аббревиатуре расшифровывают как Perl и Python, другие возможные языки веб-разработки.

Существует множество вариантов термина, в частности:

  • LNMP — Nginx вместо Apache
  • BAMP — BSD вместо Linux
  • MAMP — Mac OS X вместо Linux.
  • SAMP — Solaris вместо Linux
  • WAMP — под Microsoft Windows вместо Linux
  • WASP — Windows, Apache, SQL Server и PHP
  • WIMP — Windows, IIS, MySQL и PHP
  • PAMP — Personal Apache MySQL PHP — набор серверов для платформы S60 Специфика платформы накладывает свой отпечаток на работу комплекса. так в частности модули PHP получают и возвращают строки только в кодировке UTF-8.
  • FNMP — FreeBSD и Nginx вместо Linux и Apache.
  • XAMPP — кроссплатформенная сборка веб-сервера, X (любая из четырех операционных систем), Apache, MySQL, PHP, Perl

Готовые решения для Windows

Основная статья: WAMP

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

См. также

Примечания

LAMP или не LAMP вот в чем вопрос? — Хабр Q&A

И еще, кажется сейчас куда популярнее nginx в качестве сервера. Почему LAMP тогда не включает его?
Это всё дешевый маркетинг. Безусловно, nginx быстрее в ряде случаев, но это не значит, что он быстрее в 100% случаев. На малой нагрузке и при отсутствии гигабайтных файлов скачиваемых пользователями на скорости 64Кбит/сек., массово — Apache выдаёт вполне себе хорошие скорости, очень даже сравнимые с Nginx.

Apache «медленнее» не в 100 раз, а обычно в 1.5-2.5 раза (среднестатистические данные, понятно, что показатели могут сильно разниться в зависимости от тестов). И обычно эта «медленность» проявляется на действительно неплохих нагрузках. Я бы даже сказал так, Nginx скорее более устойчив при высоких нагрузках атаках аки DDoS, чем Apache, т.к. потребляет меньше ресурсов в виду особенностей своей архитектуры. Но, стоит понимать, что веб-сервер — это далеко не всё, что может потреблять ресурсы сервера, и от безграмотной настройки никакой конкретный сервер не спасёт.

Apache — куда проще конфигурировать хотя бы по тому, что он имеет механизм «.htaccess», Вы представляете разницу (логически) между «скопировать 3 строчки и вставить их в .htaccess» и «переписать кусок конфига nginx»? Когда Вы делаете это систематически и когда сервер Ваш — проблем нет. А когда пользователю приходится приходится это делать не часто, и тем более на каком-нибудь виртуальном хостинге — апач решение сразу нескольких проблем.

Настройка связки Apache + одна версия PHP, ощутимо проще для не очень опытного администратора, чем аналогичная связка PHP+Nginx. Но, Вы же понимаете, что люди хорошо разбирающиеся в настройках сервера обычно пытаются сделать что-то вроде apt install lamp

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

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

Не редко, Apache «прячется» за Nginx.

P.S. Что использую я? В основном Nginx, по тому, что я к нему привык, по тому, что сервера обычно свои и «железные», по тому, что на его особенностях завязана структура пары крупных приложений, по тому, что с ним без особых проблем получилось прикрутить несколько версий PHP и всякой другой ерунды (так сложилось исторически), по тому, что я собираю его из исходников в более чем половине случаев… и т.д. Но, не нужно списывать Apache со счетов только по тому, что Вы где-то начитались, что «Nginx быстрее». Оба сервера имеют полное право на существование, и у обоих есть свои как сильные, так и слабые стороны. Не нужно пытаться оптимизировать сайт по нагрузке, если его посещают 30 человек в месяц.

LAMP или не LAMP вот в чем вопрос?

Я не знаю, как ставиться LAMP и есть ли команда установки именно «LAMP»a, но Вам ничего не мешает набрать в консоли что-то типа «apt install apache php mysql» (условно) и поставить всё ровным счётом то же самое, что и ставит LAMP, или «apt install nginx php mysql» и поставить ровно то же, только с Nginx’ом вместо Apache’а.

UPD. Есть ещё Varnish, так на вскидку, в 70% проектов он будет выдавать просто феерическую производительность, особенно при ооочень тонкой его настройке, достаточном кол-ве памяти и т.д.. Я думаю, он даже в связке с Apache+PHP будет показывать куда большую производительность, чем «голый» Nginx+PHP, т.к. будет «выплёвывать» страницы целиком, из кэша, даже не обращаясь к бэкэнду (вернее, делая это не часто). Но, это не говорит о том, что нужно срочно всем собраться и бегом побежать ставить Varnish на каждый 2-й сайт с WordPress’ом и посещаемостью 100 человек в год.

Что такое LAMP? | KV.by

— В какие игрушки на компе режешься?
— В Apache 2.0.59.
— Леталка?
— Нет, про индейцев…

По мотивам bash.org.ru

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

Расшифровывается аббревиатура LAMP как «Linux, Apache, MySQL, PHP». Как видите, это просто первые буквы самых популярных в мире инструментов в области web-технологий. При этом, в общем-то, нужно сказать, что этой аббревиатурой не обязательно обозначается конкретная инфраструктура отдельно взятого сервера у какого-то конкретного взятого хостинг-провайдера. Можно сказать, что LAMP во многом является концепцией создания web-приложений, которая одинаково хорошо подходит как для сравнительно мелких, так и для действительно крупных web-приложений.

Стоит, наверное, сказать пару слов о каждом из составляющих LAMP для тех, кто не слишком хорошо с ними знаком. Linux (правильнее, конечно, было бы говорить GNU/Linux, и есть в честь этого даже малораспространённая аббревиатура GLAMP) — это свободная операционная система, новостям из мира которой посвящает свою колонку наш обозреватель Михаил Астапчик. Apache — это web-сервер, один из самых популярных web-серверов в мире; как и Linux, относится к свободному программному обеспечению. MySQL — это популярный сервер баз данных, который распространяется под различными лицензиями, часть из которых также подразумевают его «свободу». Ну и, наконец, PHP — это язык программирования и одноименный интерпретатор программ, написанных на этом языке, более чем широко используемый в World Wide Web. В настоящее время, впрочем, часто в LAMP используют другие интерпретаторы — Perl и Python, что, впрочем, не меняет ни сути, ни формы аббревиатуры.

Сам термин LAMP, кстати, достаточно старый — впервые его применил ещё в 1998 году немецкий журналист Майкл Кунзе. С тех пор термин стал весьма популярным, причём не только среди web-разработчиков и сторонников свободного программного обеспечения.

Сегодня по аналогии с LAMP используются многие аналогичные аббревиатуры. Например, часто можно встретить BAMP — т.е. вместо Linux используются BSD-системы; или SAMP — аналогично, но уже с Solaris.

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

Вадим СТАНКЕВИЧ,
[email protected]

Настройка систем LAMP, Часть 1: Знакомство с архитектурой LAMP

Настройка систем LAMP, Часть 1

Как работают системы LAMP, как измерять их производительность и как настраивать базовую операционную систему

Шон Волберг
Опубликовано 29.06.2007

Comments

Серия контента:

Этот контент является частью # из серии # статей: Настройка систем LAMP, Часть 1

https://www.ibm.com/developerworks/ru/views/global/libraryview.jsp?series_title_by=Настройка+систем+lamp,+Часть+1

Следите за выходом новых статей этой серии.

Этот контент является частью серии:Настройка систем LAMP, Часть 1

Следите за выходом новых статей этой серии.

Linux, Apache, MySQL и PHP (или Perl) являются основой многих Web-приложений, от текущих задач до блогов на сайтах электронной торговли. WordPress и Pligg — вот только два распространенных пакета программ, приводящих в действие крупномасштабные Web-сайты. Эта архитектура приобрела известность просто как LAMP. Apache, MySQL, PHP и Perl включаются почти во все дистрибутивы Linux, поэтому установить программное обеспечение LAMP почти также просто, как сказать об этом.

Эта легкость установки создает впечатление, что программное обеспечение работает само, что конечно не так. В конечном счете нагрузка на приложение перерастает параметры, связанные с back-end серверами, и страдает производительность приложения. Инсталляции LAMP требуют постоянного мониторинга, настройки и анализа.

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

Архитектура LAMP

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

Для того чтобы определить дальнейшие действия, приложения PHP получают информацию от клиента через запрашиваемый URL, из любых данных формы, независимо от того, какая информация о сессии была получена. Если необходимо, сервер извлекает информацию из базы данных MySQL (также работающей под Linux), комбинирует информацию с какими-то шаблонами HTML (Hypertext Markup Language) и возвращает результат клиенту. Этот процесс повторяется, поскольку пользователь работает с приложением, а также выполняется параллельно, поскольку множество пользователей получает доступ к системе. Однако поток данных не является односторонним, потому что база данных может быть обновлена информацией, полученной от пользователя в форме данных сеанса, статистической подборкой (включая голосование) и содержимым, предоставленным пользователю, например, комментарии или обновление сайта. Вдобавок к динамическим элементам существуют также статические элементы, такие как изображения, коды JavaScript и CSS (Cascading Style Sheets).

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

Измерение производительности

Постоянное измерение производительности помогает в двух случаях. Первое — измерение помогает выявлять тенденции, как хорошие, так и плохие. Вот простой пример: наблюдая за использованием центрального процессора (CPU) на Web-сервере, вы можете заметить его чрезмерную загрузку. Подобным образом, наблюдение за использованием общей пропускной способности в прошлом и экстраполяция на будущее помогает выявлять моменты, когда необходимо обновление сети. Эти измерения взаимосвязаны с другими измерениями и наблюдениями. Например, вы можете решить, что когда пользователи жалуются на медленную работу приложений, диски работают с максимальной нагрузкой.

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

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

Вы можете измерить время отклика приложения разными способами. Возможно, самый простой способ — использовать команду curl, как показано в Листинге 1.

Листинг 1. Использование curl для измерения времени отклика Web-сайта
$ curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total}\
    http://www.canada.com
0.081:0.272:0.779

В Листинге 1 показана команда curl, используемая для поиска популярных новостных сайтов. Вывод, который обычно был бы HTML-кодом, направлен при помощи опции -o в /dev/null, а также использована опция -s, отключающая вывод информации о ходе процесса. Опция -w дает указание вывести некоторые данные о ходе процесса, например, показанные в Таблице 1 таймеры:

Таблица 1. Таймеры, используемые curl
ТаймерОписание
time_connectВремя, необходимое для установки TCP-соединения с сервером
time_starttransferВремя, необходимое Web-серверу для возврата первого байта после того как произведен запрос
time_totalВремя, необходимое для полного выполнения запроса

Все эти таймеры ведут отсчет от старта транзакции, даже перед обращением к Domain Name Service (DNS). Таким образом, после того как был сделан запрос, требуется 0.272 — 0.081 = 0.191 секунды, чтобы Web-сервер обработал запрос и начал возвращать данные. Клиент затратил 0.779 — 0.272 = 0.507 секунды, загружая данные с сервера.

Наблюдение за данными curl и временной тренд позволят вам получить представление, насколько быстро реагирует сайт на запросы пользователей.

Конечно, Web-сайт — больше чем просто отдельная страница. Он содержит изображения, код JavaScript, CSS и cookies. Команда curl способна получать время отклика для одного элемента, но иногда вам необходимо видеть, как быстро загружается целая страница.

Tamper Data, расширение браузера Firefox (ссылку см. в разделе Ресурсы), регистрирует все запросы, сделанные Web-браузером, и показывает время, затраченное на загрузку каждого запроса. Чтобы использовать расширение, выберите Tools > Tamper Data, откроется окно Ongoing requests. Загрузите страницу, о которой идет речь, и вы увидите статус каждого запроса, сделанного браузером, а также время, затраченное на загрузку элемента. На Рисунке 1 показан результат загрузки домашней страницы developerWorks.

Рисунок 1. Схема организации запросов для загрузки домашней страницы developerWorks

Каждая строка описывает загрузку одного элемента. Показаны разнообразные данные, например, время отправки запроса, как долго он загружается, размер и результаты. Колонка Duration (Продолжительность) показывает время, которое требуется на загрузку элемента, в то время как колонка Total Duration (Общая продолжительность) показывает, сколько времени занимает загрузка всех суб-элементов. На Рисунке 1 видно, что на загрузку главной страницы затрачено 516 миллисекунд (мсек), но потребовалось 5101 мсек, прежде чем все было загружено, и могла быть показана вся страница.

Другой полезный вариант использования расширения Tamper Data — изображение данных о загрузке страницы в виде графика. Щелкните правой кнопкой в верхней части окна Ongoing requests и выберите Graph all. На Рисунке 2 показано графическое изображение данных из Рисунка 1.

Рисунок 2. Графическое изображение запросов для загрузки домашней страницы developerWorks

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

Несмотря на то, что внимание сосредоточено на времени загрузки страницы и опыте пользователя, важно не упускать из виду основные показатели системы, такие как диск, память, CPU и сеть. Для получения этой информации имеется множество утилит; возможно, наиболее полезные из них — sar, vmstat и iostat. Для получения более подробной информации об этих утилитах обратитесь к разделу Ресурсы.

Настройки базовой системы

Прежде чем вы настроите компоненты системы Apache, PHP и MySQL, вы должны потратить некоторое время на то, чтобы убедиться, что основные компоненты Linux функционируют правильно. Разумеется, вы уже отобрали из списка запущенных сервисов только те, которые вам необходимы. Помимо того, что это является хорошей практикой обеспечения безопасности, это экономит память и циклы CPU.

Оперативная настройка ядра

Большинство дистрибутивов Linux поставляется с традиционно определенными параметрами для буферов и других характеристик TCP (Transmission Control Protocol). Вы должны изменить эти параметры, чтобы выделить больше памяти для повышения производительности сети. Параметры ядра установлены через интерфейс proc путем чтения и записи переменных в /proc. К счастью программа sysctl управляет ими немного более легким образом, читая переменные из /etc/sysctl.conf и занося их при необходимости в /proc. В Листинге 2 показаны некоторые наиболее радикальные сетевые настройки, которые должны применяться на Интернет-серверах.

Листинг 2. Демонстрация наиболее радикальных сетевых настроек в /etc/sysctl.conf
# Использовать, когда необходимо, TCP syncookies
net.ipv4.tcp_syncookies = 1
# Разрешить масштабирование окна TCP
net.ipv4.tcp_window_scaling: = 1
# Увеличить максимальный размер буфера TCP
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
# Увеличить максимальное значение самонастраиваемого буфера TCP в Linux
net.ipv4.tcp_rmem = 4096 87380 16777216 
net.ipv4.tcp_wmem = 4096 65536 16777216
# Увеличить количество доступных портов
net.ipv4.ip_local_port_range = 1024 65000

Добавьте эти настройки к тому, что уже имеется в файле /etc/sysctl.conf. Эта первая настройка разрешит TCP SYN cookies. Когда клиент устанавливает новое TCP-соединение при помощи пакета с установленным битом SYN, сервер создает запись для наполовину открытого соединения и отвечает пакетом SYN-ACK. При нормальной работе удаленный клиент отвечает пакетом ACK, что меняет соединение с наполовину открытого на полностью открытое. Атака, называемая SYN flood, гарантирует, что пакет ACK никогда не будет возвращен из-за того, что процесс сервера исчерпал доступную память для входящих соединений. Функция SYN cookie учитывает это обстоятельство и начинает использовать изящный метод, сохраняющий место в очереди (более подробно см. в разделе Ресурсы). В большинстве систем эта возможность разрешена по умолчанию, но стоит удостовериться, что она сконфигурирована.

Возможность масштабирования окна TCP позволяет клиентам загружать данные с высокой скоростью. TCP позволяет отправку удаленной стороной без подтверждения многочисленных пакетов, по умолчанию до 64 килобайт (Кбайт), которые могут быть заполнены при информационном обмене с более высокой степенью задержки. Масштабирование окна позволяет использовать в заголовке некоторые дополнительные биты, чтобы увеличить размер этого окна.

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

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

Эти настройки вступят в силу при следующей загрузке или при следующем запуске sysctl -p /etc/sysctl.conf.

Конфигурирование дисков для достижения максимальной производительности

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

Первым делом необходимо убедиться, что журналирование atime в файловых системах отключено. atime — время последнего доступа к файлу, и при каждом обращении к файлу основная файловая система должна записывать эту отметку времени. Поскольку atime редко используется системными администраторами, ее отключение снизит нагрузку на диск. Это достигается путем добавления опции noatime в четвертой колонке файла /etc/fstab. В Листинге 3 показан пример конфигурации.

Листинг 3. Образец файла fstab, показывающий, как разрешить noatime
/dev/VolGroup00/LogVol00 /                      ext3    defaults,noatime        1 1
LABEL=/boot             /boot                   ext3    defaults,noatime        1 2
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
sysfs                   /sys                    sysfs   defaults        0 0
LABEL=SWAP-hdb2         swap                    swap    defaults        0 0
LABEL=SWAP-hda3         swap                    swap    defaults        0 0

В Листинге 3 изменения сделаны только для файловых систем типа ext3, поскольку опция noatime полезна только для файловых систем, расположенных на диске. Чтобы изменения вступили в силу, перезагрузка не нужна; вам только необходимо вновь подмонтировать каждую файловую систему, выполнив mount / -o remount.

Возможны разнообразные комбинации жестких дисков, и Linux не всегда верно определяет оптимальный метод доступа к жесткому диску. Команда hdparm используется для получения и установки методов, используемых для доступа к дискам IDE (integrated development environment, интегрированная среда разработки). hdparm -t /path/to/device выполняет тест скорости, который вы можете использовать в качестве точки отсчета. Для получения более достоверных результатов при запуске этой команды система должна быть незанята. В Листинге 4 показан тест скорости, выполняемый на hda.

Листинг 4. Тест скорости, выполняемый на /dev/hda
# hdparm -t /dev/hda

/dev/hda:
 Timing buffered disk reads:  182 MB in  3.02 seconds =  60.31 MB/sec

Как видно из теста, диски читают данные со скоростью около 60 мегабайт (Мбайт) в секунду.

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

В Таблице 2 перечислены некоторые часто используемые опции.

Таблицы 2. Часто используемые опции hdparm
ОпцияОписание
-viОпрашивает устройство с целью определения, какие настройки оно поддерживает и какие использует.
-cЗапрос/включение поддержки 32-битного (E)IDE ввода/вывода. hdparm -c 1 /dev/hda включает.
-mЗапрос/установка нескольких секторов в режиме прерывания. Если значение параметра больше нуля, повышение до такого количества секторов может быть передано через прерывание.
-d 1 -XВключение передач DMA (direct memory access, прямой доступ к памяти) и установка режима передачи IDE. Страница справки man команды hdparm уточняет число, которое может стоять после -X. Вы должны использовать эту опцию, только если -vi показывает, что вы не используете самый быстрый режим.

К сожалению для систем Fiber Channel и Small Computer Systems Interface (SCSI) настройка зависит от конкретного устройства.

Вы должны добавить в ваш стартовый скрипт, например, rc.local, те настройки, которые считаете полезными.

Настройка NFS

NFS (network file system, сетевая файловая система) — способ предоставления доступа к томам диска по сети. Использовать NFS полезно, чтобы гарантировать, что каждый хост имеет одну и ту же копию данных и что изменения отражены на всех узлах. Тем не менее по умолчанию NFS не сконфигурирована для массового использования.

Каждый клиент должен подмонтировать удаленную файловую систему при помощи rsize=32768,wsize=32768,intr,noatime, чтобы гарантировать следующее:

  • Используются большие размеры блоков чтения/записи (до определенного размера, в данном случае 32Кбайт).
  • Операции NFS могут быть прерваны в случае зависания.
  • atime не будет постоянно обновляться.

Вы можете поместить эти настройки в файл /etc/fstab, как показано в Листинге 3. Если вы используете автомонтирование, они входят в соответствующий файл /etc/auto.*.

На стороне сервера важно удостовериться, что имеется достаточное количество NFS kernel thread’ов, доступных для обслуживания всех клиентов. По умолчанию запущен только один thread, хотя системы Red Hat и Fedora запускают 8. Для сильно загруженного сервера NFS вы должны повысить это число, например, до 32 или 64. Вы можете отследить, была ли блокировка, при помощи команды nfsstat -rc, показывающей статистические данные Remote Procedure Call (RPC) клиента. В Листинге 5 показаны статистические данные клиента для Web-сервера.

Листинг 5. Демонстрация статистических данных RPC при использовании NFS-клиента
# nfsstat -rc
Client rpc stats:
calls      retrans    authrefrsh
1465903813   0          0

Во второй колонке, retrans, стоит ноль, что показывает, что, начиная с последней перезагрузки, не было необходимости ни в каких передачах. Если это число растет, вы должны подумать о добавлении большего количества NFS kernel thread’ов. Это делается путем передачи желаемого числа thread’ов rpc.nfsd, например, rpc.nfsd 128 запускает 128 thread’ов. Вы можете сделать это в любое время. Thread’ы запускаются или уничтожаются по мере необходимости. Кроме того, это должно войти в ваши стартовые скрипты, предпочтительно в скрипт, который стартует NFS на вашей системе.

Последнее замечание относительно NFS: если возможно, откажитесь от NFS версии 2, поскольку его производительность намного ниже производительности NFS версий 3 и 4. В современных дистрибутивах Linux это не является проблемой, но проверьте вывод nfsstat на сервере, чтобы узнать, делаются ли какие-либо запросы через NFS версии 2.

Забегая вперед

Эта статья охватила некоторые основы LAMP и рассмотрела некоторые простые настройки Linux для установок LAMP. Вы можете установить все параметры, описанные в этой статье, за исключением NFS kernel thread’ов, и затем не обращать на них внимания. Следующие две статьи из этой серии сфокусированы на настройке Apache, MySQL и PHP. Их настройка значительно отличается от настройки Linux, поскольку вам необходимо постоянно заново пересматривать такие параметры, как увеличение объема трафика, изменение распределений при чтении/записи и следить за эволюцией самого приложения.

Ресурсы для скачивания
Похожие темы
  • Tuning LAMP systems, Part 1: Understanding the LAMP architecture — оригинал этой статьи на developerWorks.
  • «Простой мониторинг системы при помощи SAR (Easy system monitoring with SAR)» (developerWorks, февраль 2006) — руководство по отслеживанию основных показателей системы с использованием sar.
  • Из статьи Мониторинг виртуальной памяти при помощи vmstat (Monitoring Virtual Memory with vmstat) (Linux Journal, октябрь 2005) вы узнаете, как отслеживать активность пейджинга на вашей системе Linux.
  • Если вы не знакомы с NFS, статья Хранить и защищать: предоставление информации для кластера (To Protect and Serve: Providing Data to Your Cluster) (Prentice Hall Professional Technical Reference, февраль 2005) — хорошее введение в NFS и автомонтирование, которая поможет при развертываниях крупномасштабных NFS-сервисов.
  • В статье «TCP и алгоритмы Linux для Pluggable Congestion Control (TCP and Linux’ Pluggable Congestion Control Algorithms)» (Linux Gazette, февраль 2007) обсуждается, как испробовать множество поддерживаемых Linux алгоритмов для осуществления контроля перегрузок, и, что более важно, значение и воздействие потерь и задержек в ваших сетевых сессиях.
  • TCP SYN cookies, как отмечалось ранее, защищают от атак отказа в обслуживании (DOS, denial of service) через SYN floods. В Wikipedia описана их реализация. Это блестящая идея.
  • Tamper Data — расширение для Firefox, позволяющее на лету просматривать и модифицировать заголовки HTTP и показывать загрузку элементов страницы в виде графика.
  • В Linux-разделе developerWorks найдите дополнительные ресурсы для Linux-разработчиков.
  • Постройте ваш следующий проект разработки в Linux при помощи ознакомительных версий ПО IBM, доступных для загрузки непосредственно с сайта developerWorks.

Подпишите меня на уведомления к комментариям

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *