Настройка VDS на Ubuntu 14.04. Часть 4. Необходимое ПО

Обсудить
VDS на Ubuntu

Мы продолжаем цикл статей о настройке VDS с операционной системой Ubuntu 14.04 и сегодня поговорим об основных служебных компонентах, которые потребуются на сервере. 
В данной статье мы не будем касаться алгоритмов установки того или иного приложения; она будет являться скорее ознакомительной. Ее цель - помочь Вам составить примерную схему того, какое именно программное обеспечение будет необходимо на Вашем сервере, и продумать план дальнейших шагов по установке.
В статье мы рассмотрим основные компоненты - веб-сервер, базу данных, ftp-сервер и др. - и приведем примеры приложений, которые призваны выполнять эти функции.
Список упоминаемого в данной статье ПО не “абсолютен” - существует множество альтернатив той или иной утилиты, и Вы можете выбрать любой другой вариант, если он для Вас привычнее или удобнее.
Со своей стороны, однако, мы постарались упомянуть те приложения, которые считаем наиболее полезными и функциональными и которые можем рекомендовать к использованию.

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

Веб-сервер

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

Apache

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

Настройка Apache производится с помощью конфигурационных файлов .htaccess, что позволяет децентрализовать конфигурацию веб-сервера и задавать необходимые параметры (ограничение доступа, модификацию URL, авторизацию и аутентификацию) на уровне директории. Кроме того, так как файлы .htaccess обрабатываются сервером при каждом запросе, становится возможным вносить корректировки в настройки без перезагрузки веб-сервера.

В сети доступно множество информации по работе с Apache, начать изучение можно с официальной документации: https://httpd.apache.org/docs/ или для удобства с русскоязычного сайта: http://www.apache.ru.

Nginx

Если для Вас важна скорость обработки запросов и удобство работы, то Nginx в качестве веб-сервера является отличным выбором. Данный сервер имеет широкое применение в различных областях; он позволяет не только обрабатывать запросы, но и качественно балансировать нагрузку, проксировать и фильтровать запросы.  
Nginx можно дополнять различными модулями.
В отличие от Apache, Nginx не имеет встроенных возможностей для обработки динамических данных. Соответственно, при запросе к динамическому контенту Nginx будет перенаправлять запрос к внешнему процессору, взаимодействие с которым (на основе какого-либо из протоколов - FastCGI, SCGI, uWSGI) необходимо настроить дополнительно. Процесс настройки мы рассмотрим в одной из следующих частей данного цикла.

Настройка Nginx производится на уровне основного конфигурационного файла веб-сервера; плюсом такой “негибкой” настройки является высокая производительность сервера, которому при запросе к файлу не требуется дополнительно запрашивать и интерпретировать конфигурационные файлы каждой родительской директории. 

Подробную информацию о возможностях Nginx и управлении им Вы можете найти в официальной документации проекта: http://nginx.org/ru/docs/.

Выбор веб-сервера

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

  1. Nginx + FastCGI (php-fpm, uWSGI/Gunicorn) - для работы c различными приложениями.
  2. Nginx + Apache + mod_php/mod_python - производительная связка с использованием сильных сторон обоих серверов.
  3. Apache + mod_php/mod_python - классическая схема.

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

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

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

Язык

Помимо выбора сервера также необходимо определить, с каким языком программирования будут работать Ваши сайты. Узнать, какой язык программирования и в какой версии используется на Вашем сайте, Вы можете в системных требованиях сайта (CMS). 

PHP - один из самых распространенных языков программирования. Большинство популярных CMS - например, Bitrix, WordPress, Drupal, Joomla - работают именно с PHP различных версий. Соответственно, на сервер будет необходимо установить интерпретатор данного языка (php5); также Вам будут полезны такие утилиты, как php5-fpm - менеджер пакетов, или, если Вы используете Apache, модуль libapache2-mod-php5.

Node.js - еще один это современный и популярный инструмент для веб-разработки. Если Ваш сайт работает с Node.js, набор устанавливаемого ПО также изменится. Например, потребуется менеджер пакетов npm, с помощью которого будет возможно установить большинство необходимых модулей для работы node.js-приложений.

Для разворачивания сайта на Python (или Django, который является фреймворком для Python) потребуется иное программное обеспечение - например, виртуальное окружение virtualenv, которое позволит развернуть на одном сервере сайты на разных версиях Python; а также WSGI-сервер, например, uWSGI или Gunicorn, который будет отвечать за взаимодействие веб-сервера и Python-приложений.

Базы данных

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

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

MariaDB - уверенно набирающая популярность система управления базами данных, разрабатываемая создателем MySQL. MariaDB содержит определенные улучшения в коде (в сравнении с MySQL), которые делают ее высокопроизводительной, способной выдерживать большие нагрузки и при этом не слишком ресурсоемкой.
В настоящее время уже многие проекты (например, такие как Wikipedia или booking.com) заявили о том, что “переехали” с MySQL на MariaDB - что демонстрирует, что произведенная оптимизация кода и другие нововведения в MariaDB ощутимы и показывают заметные результаты.
В связи с тем, что управление этой БД не отличается принципиально от привычной MySQL, Вы можете без особых затруднений попробовать использовать именно MariaDB, чтобы самостоятельно оценить ее преимущества. Почти полная совместимость MariaDB с MySQL позволит Вам в случае необходимости легко заменить одну на другую (аналогичной версии) без опасения потерять какие-либо данные и без необходимости корректировать настройки остального ПО.

PostgreSQL - это еще одна бесплатная система управления базами данных с открытым исходным кодом. Она обладает ничуть не меньшими (а вероятно, и большими) возможностями, чем популярные СУБД, и не уступает им в производительности. Ее администрирование может показаться несколько более сложным, чем у MySQL, но PostgreSQL имеет подробную и понятную документацию и множество инструкций, как в различных источниках в сети, так и на официальном сайте: http://www.postgresql.org/docs. Информация на русском языке доступна в wiki проекта: https://wiki.postgresql.org/wiki/Russian.
Возможно, для небольшого сайта функционал PostgreSQL несколько избыточен, но если Вы запускаете крупный, сложный проект и имеете возможность посвятить какое-то время изучению данного инструмента - попробуйте воспользоваться PostgreSQL. Скорее всего, результат будет того стоить и в итоге будет экономить Вам время и усилия.

ElasticSearch, являясь поисковым сервером, представляет из себя альтернативу привычным СУБД. Зачастую он используется как дополнение к основной базе данных, но может выступать и в качестве хранилища. Добавление информации и поиск производятся с помощью простых HTTP-запросов. Если прежде Вы не работали с данным инструментом, вероятно, потребуется некоторое время на изучение его алгоритмов. К сожалению, доступно не так много инструкций на русском языке (хотя они есть), но официальная документация подробна и понятна: https://www.elastic.co/guide/index.html.
Необходимо принимать во внимание, что ElasticSearch требует достаточно много оперативной памяти. Еще одной особенностью ElasticSearch, которую обязательно нужно учитывать, является отсутствие встроенных инструментов для аутентификации и авторизации, поэтому для обеспечения безопасности данных потребуется принять дополнительные меры (к примеру, ограничить подключения только доверенными адресами). Подробная информация о безопасности в ElasticSearch, а также о его функциях и особенностях, доступна на официальном сайте: https://www.elastic.co/guide/index.html и в блоге компании: https://www.elastic.co/blog/found-elasticsearch-in-production#security.

FTP

Еще одним необходимым элементом для полноценного использования Вашего VDS является FTP-сервер, который будет использоваться для доступа к файлам, их передачи и работы с ними. В качестве FTP-сервера мы рекомендуем устанавливать vsftpd. Это эффективный, безопасный и простой в работе сервер; его легко настраивать и поддерживать.
В нашем цикле будем рассмотрена только установка vsftpd, но если для работы с файлами Вам потребуются другие службы, Вы можете также их установить. 

Мониторинг

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

Collectd - это демон (программа, запускаемая системой для работы в фоновом режиме), который с определенной регулярностью собирает статистику использования системных ресурсов. Сам Collectd не отображает полученные данные в виде графиков, но Вы можете использовать разнообразные скрипты или утилиты, подходящие для этой цели. Так, например, с помощью плагина write graphite Вы можете настроить Collectd на отправку данных в Graphite.
Graphite - система агрегации и хранения данных и отображения графиков в реальном времени. Хотя Graphite может использоваться самостоятельно, мы рекомендуем дополнительно установить Grafana. 
Grafana - это своеобразная “надстройка” на Graphite, используемая для более удобного и наглядного отображения данных.

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

Логирование

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

Резервное копирование

Очень важный фактор, о котором часто забывают начинающие администраторы, - резервное копирование на сторонние серверы (в качестве “стороннего сервера” в данном случае может выступать и Ваш домашний компьютер). Это позволит Вам не потерять данные Вашего сайта и оперативно восстановить их. Существует большое количество как индивидуальных скриптов, так и программного обеспечения (и платного, и свободно распространяемого), выполняющих данную задачу.
Рассмотрите, например, утилиту rsnapshot - она создает резервные копии (снапшоты) содержимого файловой системы с заданной регулярностью. Rsnapshot использует инкрементное копирование (то есть при создании новой копии в нее включаются только те данные, которые были изменены со времени последнего бэкапа), что позволяет значительно экономить как время, затрачиваемое на создание резервной копии, так и занимаемое бэкапами место.

Отказоустойчивость

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

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

VDS

Комментарии