Создание для производства: веб-приложения - обзор

Вступление

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

Если вы заинтересованы в рассмотрении некоторых концепций, которые будут рассмотрены в этой серии, прочитайте эти руководства:

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

Наша цель

К концу этого набора учебников у нас будет настройка рабочего сервера для приложения PHP, WordPress для демонстрационных целей, доступного по адресу https://www.example.com/. Мы также включим серверы, которые будут поддерживать серверы производственных приложений. Окончательная настройка будет выглядеть примерно так (частный DNS и удаленные резервные копии не показаны):

изображение: https: //assets.digitalocean.com/articles/architecture/production/lamp/final.png [Настройка производства]

В этой настройке серверы в поле * Приложение * считаются необходимыми для правильной работы приложения. Помимо плана восстановления и удаленного сервера резервного копирования, для поддержки настройки производственного приложения будут добавлены остальные компоненты - резервные копии, мониторинг и ведение журнала. Каждый компонент будет установлен на отдельном сервере Ubuntu 14.04 в том же регионе DigitalOcean, в нашем примере NYC3, с включенной частной сетью.

Набор серверов, составляющих приложение, будет называться следующими именами хостов:

  • * lb1: * HAProxy Load Balancer, доступный через https://example.com/

  • * app1: * сервер приложений Apache и PHP

  • * app2: * сервер приложений Apache и PHP

  • * db1: * Сервер базы данных MySQL

Важно отметить, что этот тип настройки был выбран, чтобы продемонстрировать, как компоненты приложения могут быть построены на нескольких серверах; Ваши собственные настройки должны быть настроены в соответствии с вашими потребностями. Эта конкретная настройка сервера имеет отдельные точки отказа, которые можно устранить, добавив еще один балансировщик нагрузки (и https://www.digitalocean.com/community/tutorials/how-to-configure-dns-round-robin-load-balancing- для обеспечения высокой доступности [циклического перебора DNS]) и database server репликации или добавление статический IP-адрес, указывающий на активный или пассивный балансировщик нагрузки, о котором мы поговорим ниже.

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

  • * резервные копии: * сервер резервных копий Bacula

  • * мониторинг: * Сервер мониторинга Nagios

  • * протоколирование: * Elasticsearch, Logstash, Kibana (ELK) стек для централизованного ведения журнала

Кроме того, на диаграмме не показаны три следующих вспомогательных компонента:

  • * ns1: * Основной сервер имен BIND для частного DNS

  • * ns2: * Вторичный сервер имен BIND для частного DNS

  • * remotebackups: * Удаленный сервер, расположенный в другом регионе, для хранения копий резервных копий Bacula в случае физической аварии в производственном центре обработки данных - === \

Мы также разработаем базовые планы восстановления после сбоев в различных компонентах приложения.

Когда мы достигнем нашей цели, у нас будет всего 10 серверов. Мы создадим их все сразу (это упрощает такие вещи, как настройка DNS), но не стесняйтесь создавать каждый по мере необходимости. Если вы планируете использовать резервные копии DigitalOcean в качестве решения для резервного копирования, в дополнение к Bacula или вместо него, обязательно выберите этот параметр при создании капель.

Высокая доступность (опционально)

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

Существует несколько способов реализовать настройку высокой доступности. Чтобы узнать больше, прочитайте https://www.digitalocean.com/community/tutorials/how-to-use-floating-ips-on-digitalocean#how-to-implement-an-ha-setup[this раздел How To Использовать плавающие IP-адреса.

Виртуальная частная сеть (необязательно)

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

Если вы ищете VPN-решение с открытым исходным кодом, вы можете рассмотреть возможность использования Tinc или OpenVPN. В этом конкретном случае Tinc, который использует маршрутизацию сетки, является лучшим решением. Учебные руководства по обоим решениям VPN можно найти здесь:

Предпосылки

Каждый сервер Ubuntu 14.04 должен иметь суперпользователя без полномочий root, который можно настроить, следуя этому руководству: https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04 [ Начальная настройка сервера с Ubuntu 14.04]. Все команды будут выполняться от имени этого пользователя на каждом сервере.

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

Доменное имя

Мы предполагаем, что ваша заявка будет обслуживаться через доменное имя, например «example.com». Если у вас его еще нет, купите его у регистратора доменных имен.

Если у вас есть выбранное доменное имя, вы можете следовать этому руководству, чтобы использовать его с DNS DigitalOcean: https://www.digitalocean.com/community/tutorials/how-to-point-to-digitalocean-nameservers-from- общие доменные регистраторы [Как указать на серверы имен DigitalOcean от обычных доменных регистраторов].

Помимо облегчения доступа к вашему сайту (по сравнению с IP-адресом), доменное имя требуется для достижения преимуществ проверки доменного имени и проверки подлинности при использовании сертификатов SSL, которые также обеспечивают шифрование для обмена данными между вашим приложением и его пользователями.

Сертификат SSL

TLS / SSL обеспечивает шифрование и проверку домена между вашим приложением и его пользователями, поэтому мы будем использовать SSL-сертификат в наших настройках. В нашем примере, поскольку мы хотим, чтобы пользователи имели доступ к нашему сайту по адресу «http://www.example.com [www.example.com]», это то, что мы будем указывать в качестве общего имени сертификата (CN). Сертификат будет установлен на сервере HAProxy * lb1 *, поэтому для удобства вы можете сгенерировать ключи сертификата и CSR.

Если вам требуется сертификат, который обеспечивает проверку личности, вы можете получить бесплатный SSL-сертификат с помощью Let Encrypt или приобрести его в коммерческом центре сертификации. Подробнее о параметре Let’s Encrypt читайте по адресу https://www.digitalocean.com/community/tutorials/how-to-install-an-ssl-certificate-from-a-commercial-certificate-authority[How для установки Сертификат SSL от коммерческого центра сертификации. Пропустите раздел * Install Certificate on Web Server *.

В качестве альтернативы вы также можете использовать самозаверяющий сертификат SSL, который можно сгенерировать с помощью этой команды:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ~/.key -out ~/.crt

Шаги, чтобы достичь нашей цели

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

Компоненты, составляющие приложение, являются наиболее важными, поэтому мы хотим, чтобы они были запущены раньше. Однако, поскольку мы планируем использовать основанное на именах разрешение адресов в наших частных сетевых подключениях, * мы должны сначала настроить наш DNS *.

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

  1. Сервер базы данных

  2. Серверы приложений

  3. Балансировщик нагрузки

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

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

Заключение

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

Перейдите к следующему руководству, чтобы начать настройку приложения: Building для Production: веб-приложений - развертывание.

Related