Как приложения развертываются на серверах
Нужен совет новичку на Java. Во всяких технологиях, IDE. уже как-то разбираемся (в основном для desktop приложений), но про развертывание приложений на web-сервере еще много вопросов.
Основные особенности разрабатываемого приложения:
- От чего отталкиваться, от desktop или web, т.е. выкладывать настольную версию на сервер или можно наоборот - заставить web-версию запускаться в Windows, Linux, Mac OS?
- Можно ли desktop-приложение Java разместить на web, что бы оно выполнялось на стороне сервера?
- Если web-приложение работает локально, надо запускать соответствующие сервера, что уже неудобно для обычного пользователя, нельзя ли обойтись по другому?
Не надо ни от чего отталкиваться. Разрабатывайте общие части в виде отдельных модулей-библиотек. Так получится переиспользование кода.
Можно, но ни в коем случае не нужно.
А зачем обычному пользователю запускать у себя сервера?
хороший вариант, т.е. создаем два проекта и используем общие модули? еще не понимаю как интерфейс разрабатывать, отдельно придется писать?
Ну да, делаете общую модель данных и общую бизнес логику в shared модулях и два отдельных приложения, которые эти модули используют.
не нужно с учетом условия выполнения приложения на сервере?
А какой смысл запускать десктопное приложение на сервере? Как вы себе это представляете? Как пользователь окно увидит?
не совсем еще понимаю, а как локально можно запустить web-приложение?
Традиционно веб-приложения выполняются на сервере и отображаются в веб-браузере пользователя + JavaScript выполняется на стороне клиента.
UPD2
Чтобы показать друзьям, веб-приложение надо развернуть на сервере или на своей машине и открыть к нему доступ из интернета путём настройки своей машины и роутерамодемаetc.
Если надо показать без доступа к интернету, то придётся все необходимые сервера устанавливать у них, либо использовать какие-то portable-версии этих серверов, которые работают без установки.
Можно в одну директорию затолкать все нужные сервера (тот же tomcat не требует установки) и сервер БД, если требуется. И напишите скрипт, чтобы всё это запускать одним движением руки.
19.9k 1 1 золотой знак 29 29 серебряных знаков 37 37 бронзовых знаков 1. хороший вариант, только вот опыта нет, хотели по-проще сделать, хотя наверное только усложняем 2. не нужно с учетом условия выполнения приложения на сервере? 3. не совсем еще понимаю, а как локально можно запустить web-приложение? Не могли привести примеры реализованных приложений или инструментов, подсказать, например, названия проектов (в том или ином IDE) для web и desktop, как их можно связывать. Чего-нибудь, или навести на учебник, на примерах проще понимать. <li>А какой смысл запускать десктопное приложение на сервере? Как вы себе это представляете? Как пользователь окно увидит?</li> Смысл такой, запускать десктопное приложение на сервере в качестве web-приложения, для упрощения разработки, чтобы не плодить один и тот же код. Или все таки это не возможно? <li>Традиционно веб-приложения выполняются на сервере и отображаются в веб-браузере пользователя + JavaScript выполняется на стороне клиента.</li> Возможен ли вариант, что сервером является сам клиент и приложение отображается на его же броузере? Да откуда там возьмётся один и тот же код? Будет два разных приложения, одно в виде war/ear для развёртывания на сервере и одно в виде jar. Попытка объединить их в одно - это будет не упрощение, а усложнение. Такой вариант возможен. Только это редко бывает нужно. Не в вашем случае точно. Сам изначально за отдельную разработку этих двух версий, однако ТЗ говорит обратное - один код, одинаковый интерфейс.Хотелось бы не писать один и тот же код по два раза каждый раз в ходе разработки и поддержки (для desktop и web отдельно).
Прочитайте про шаблон MVC, это поможет вам разобраться, каким образом избежать дубликации кода, когда необходимо иметь несколько различных представлений для одного и того же функционала (веб-приложение, десктопные приложения на различные ОС, мобильные платформы и т.д.)
Если вкратце, вам необходимо разделить на отдельные независимые модули безнес-логику и визуальное отображение.
Можно ли desktop-приложение Java разместить на web, что бы оно выполнялось на стороне сервера?
При разработке классических приложений необходимо учитывать, как ваше приложение будет упаковываться и развертываться на компьютерах пользователей. Проблема, связанная с упаковкой, развертыванием и установкой, заключается в том, что ими обычно занимаются исключительно ИТ-специалисты, которых волнуют совсем не те вещи, что и разработчиков.
". В воздухе появляется напряженность, и небольшое исследование приводит к молодому и уставшему разработчику, который внес сторонний элемент управления, который определенно "работал на компьютере разработки".
Установка классических приложений всегда была настоящим кошмаром по двум основным причинам:
- Отсутствие культуры тесного сотрудничества между разработчиками и ИТ-специалистами.
- Отсутствие единой технологии упаковки и развертывания, на которую можно положиться.
На самом деле нам приходилось мириться с тем фактом, что установка приложения могла вызвать только сожаление, так как:
- На вашем компьютере в работе приложения возникают нежелательные побочные эффекты.
- Некоторые из установленных ранее приложений перестают работать.
Кроме того, вы не можете просто восстановить систему в исходное состояние путем удаления приложения. Мы постоянно сталкивались с подобной ситуацией, которую прозвали "DLL-путаницей", "захламлением" или "Winrot".
В этой главе мы поговорим о MSIX. MSIX — это новая технология от корпорации Майкрософт, которая стремится взять лучшее из предыдущих технологий, чтобы обеспечить надежную основу для технологии упаковки будущего.
Как технология упаковки связана с модернизацией? Оказалось, что упаковка является основополагающей для корпоративных ИТ-служб, и в нее вкладываются значительные средства. Модернизация не ограничивается использованием новейших технологий. Она также нацелена на сокращение времени выхода на рынок с момента определения бизнес-требования и до момента, когда ваша организация доставляет соответствующий компонент клиенту.
Жизненный цикл современного приложения
Сейчас разработчики пишут и собирают код для приложения, после чего передают созданные ресурсы ИТ-специалистам. После этого ИТ-специалисты перестраивают приложение и переупаковывают его, как правило, в формате MSI или более новом App-V. Затем приложение развертывают с помощью различных каналов и средств. Одна из основных проблем такого подхода обычно называется "коллапсом упаковки". Проблема заключается в том, что этот цикл повторяется каждый раз при обновлении приложения или операционной системы.
Данный процесс проиллюстрирован на следующем рисунке:
Организациям требуется способ разбить этот цикл упаковки на три независимых цикла:
- Обновления ОС
- Обновления приложений
- Настройка
На предыдущей схеме показано, что вам доступны следующие возможности:
- Обновление базовой ОС без необходимости переупаковки приложений.
- Реализация настроек со стороны ИТ-специалистов без необходимости переупаковки исходного пакета разработчика.
Это радикальное изменение приводит нас к новому и современному жизненному циклу ИТ, как показано на следующем рисунке:
Разработчики создают приложение и формируют пакет MSIX, который ИТ-специалисты могут использовать и настраивать без переупаковки. Вместе с технологией MSIX корпорация Майкрософт создала средства, позволяющие ИТ-специалистам настраивать пакеты без переупаковки.
MSIX: следующее поколение развертывания
До MSIX существовало несколько технологий упаковки, таких как мастера установки, MSI, ClickOnce, App-V и сценарии. Каждая из этих технологий имеет свои сильные стороны, и корпорация Майкрософт решила взять из них все лучшее для создания MSIX. Технология MSIX основана на этих существующих технологиях, вбирая в себя преимущества каждой из них:
- App-V => контейнеризация
- ClickOnce => автоматическое обновление
- MSI => простота распространения
Благодаря MSIX вы получаете одну технологию установщика со всеми этими функциями.
Преимущества gRPC
Установка приложений без сожалений
MSIX обеспечивает предсказуемое, надежное и безопасное развертывание. Декларативный метод, содержащийся в манифесте пакета, позволяет операционной системе отслеживать каждый из ресурсов, необходимых приложению. Он также обеспечивает действительно чистое удаление без побочных эффектов.
Оптимизация дискового пространства
Технология MSIX оптимизирована для уменьшения места, занимаемого приложением на диске компьютера пользователя. Она создает хранилище единственных копий ваших файлов. То есть если у вас есть два разных пакета с одной и той же библиотекой DLL, она не устанавливается дважды. Платформа может решить эту проблему, так как она знает обо всех файлах, установленных конкретным приложением, благодаря своей декларативной природе. Она также позволяет использовать разные версии библиотеки DLL, работающие параллельно.
С помощью пакетов ресурсов можно легко создавать многоязычные приложения, и операционная система позаботится об установке нужных из них.
Оптимизация сети
MSIX обнаруживает различия в файлах на уровне байтового блока, позволяя использовать функцию разностных обновлений. Это означает, что при обновлениях приложения скачиваются только обновленные байтовые блоки.
Благодаря потоковой установке пользователь может быстро начать работу над приложением, пока другие части приложения скачиваются в фоновом режиме. Эта функция влияет на вовлечение пользователей в работу.
С помощью дополнительных пакетов вы можете реализовать компонентное представление развертывания приложения, поэтому их можно скачивать по мере необходимости.
Простота упаковки и развертывания
Манифест приложения объявляет управление версиями, нацеливание устройств и обеспечивает идентификацию стандартным образом для каждого приложения. Он также позволяет подписывать активы, создавая надежную основу для системы безопасности.
Управляемая операционная система
Операционная система обрабатывает все процессы по установке, обновлению и удалению приложения. Приложения устанавливаются для отдельных пользователей, но скачиваются только один раз, что сводит к минимуму используемое дисковое пространство. Корпорация Майкрософт работает над предоставлением технологии MSIX также и в Windows 7.
Обеспечение целостности приложения в Windows
Цифровые подписи позволяют гарантированно предотвратить установку приложения из ненадежных источников. Кроме того, система MSIX предотвращает незаконное изменение, поскольку:
- хранит записи о хэшах файлов;
- определяет, был ли файл изменен после установки.
Поддержка всего каталога приложений
Одним из самых интересных аспектов технологии MSIX является то, что она работает для всего каталога приложений, Windows Forms, WPF, MFC/ATL, Delphi, даже если вы хотите выполнить развертывание xCopy, используете ClickOnce или переходите в Store, вы можете использовать один и тот же пакет MSIX.
Инструменты
Проект упаковки приложений Windows
Для создания пакета для классического приложения в Visual Studio можно использовать Проект упаковки приложений Windows. Затем можно опубликовать этот пакет в Microsoft Store или загрузить его в неопубликованном виде на один или несколько компьютеров.
Средство упаковки MSIX
Средство упаковки MSIX позволяет повторно упаковывать существующие пакеты приложений Win32 в формате MSIX. Оно включает интерактивный пользовательский интерфейс и командную строку для преобразования, позволяя преобразовывать приложения без использования исходного кода.
Платформа поддержки пакетов
Платформа поддержки пакетов представляет собой набор с открытым кодом, который помогает применять исправления к существующему приложению Win32, когда у вас нет доступа к исходному коду для работы в контейнере MSIX. Платформа поддержки пакетов помогает настроить приложения в соответствии с требованиями современных сред выполнения.
Установщик приложений
Установщик приложений позволяет устанавливать приложения Windows 10, дважды щелкнув пакет приложения. Это означает, что пользователям не нужно использовать PowerShell или другие средства разработчика для развертывания приложений Windows 10. Кроме того, Установщик приложений может устанавливать приложения из Интернета, дополнительных пакетов и связанных наборов.
Создание пакета MSIX из существующего классического приложения Win32
Давайте рассмотрим процесс создания пакета MSIX из существующего классического приложения Win32. В этом примере мы будем использовать приложение Windows Forms.
Чтобы начать, добавьте в решение новый проект, выберите "Проект упаковки приложений Windows" и присвойте ему имя.
Вы увидите структуру проекта упаковки и заметите специальную папку Applications. В ней можно указать приложения, которые требуется включить в пакет. Их может быть несколько.
Щелкните правой кнопкой мыши папку Applications и выберите проект Windows Forms, который хотите упаковать из решения Visual Studio.
На этом этапе вы можете скомпилировать и создать пакет, но давайте рассмотрим несколько аспектов. Чтобы улучшить взаимодействие с пользователем, Visual Studio может автоматически создавать все визуальные ресурсы, необходимые современным приложениям для работы со значками, а также ресурсы плиток для панели плиток и меню "Пуск". Откройте файл Package.appxmanifest для доступа к конструктору манифеста. После этого вы можете создать все визуальные ресурсы из заданного образа, присутствующего в проекте, просто нажав кнопку Создать.
Если открыть код для файла Package.appxmanifest, можно увидеть несколько интересных вещей.
Непосредственно под узлом <Package> находится узел <Identity> . Именно здесь упакованное приложение получит удостоверение, которым будет управлять операционная система.
В узле <Capabilities> можно найти все требования, необходимые приложению, обращая особое внимание на элемент <rescap:Capability Name="runFullTrust" \> , который предписывает операционной системе запустить приложение в режиме полного доверия, так как это приложение Win32.
Задайте проект упаковки в качестве запускаемого проекта для решения и выберите Выполнить. Будут выполнены следующие операции:
- Компиляция приложения Windows Forms.
- Создание пакета MSIX из результатов сборки.
- Развертывание пакетов.
- Локальная установка на компьютере разработки.
- запуск приложения;
Благодаря этому вы получаете чистую процедуру установки и удаления, которую MSIX полностью интегрирует в Windows 10.
Последним этапом является развертывание пакета MSIX на другом компьютере.
Щелкните проект упаковки правой кнопкой мыши, выберите меню Store и затем параметр Создание пакетов приложения.
После этого вы можете выбрать, будете ли вы создавать пакет для отправки в Store или создавать пакеты для загрузки неопубликованных приложений. В большинстве сценариев модернизации вы выберете Я хочу создать пакеты для загрузки неопубликованных приложений.
В этом случае можно выбрать различные архитектуры, на которые нужно ориентироваться, так как в один пакет MSIX можно включить любое число архитектур.
Последним шагом является объявление того, где вы хотите развернуть окончательные ресурсы установки.
Вы можете использовать веб-сервер из общего UNC-пути на файловых серверах предприятия. Обратите особое внимание на параметры, позволяющие указать способ обновления приложения. Обновления мы рассмотрим в следующем разделе.
Автоматические обновления в MSIX
В Microsoft Store есть отличный механизм обновления, использующий Центр обновления Windows. В большинстве корпоративных сценариев магазин Store для распространения классических приложений не используется. Поэтому вам нужен аналогичный способ настройки обновлений для приложения и отправки их пользователям.
Используя сочетание функций Windows 10 и пакетов MSIX, вы можете предоставить пользователям удобную процедуру обновления. Фактически пользователь может совершенно не разбираться в технических аспектах, но при этом пользоваться преимуществами беспрепятственного обновления приложения.
Вы можете настроить обновление для взаимодействия с пользователем двумя разными способами:
Обновления, запрошенные пользователем: операционная система отображает автоматически сформированный удобный пользовательский интерфейс для уведомления пользователя о том, что приложение готово к установке. Этот пользовательский интерфейс создается на основе свойств, указанных вами в файлах установки.
Автоматические обновления в фоновом режиме: в этом случае пользователям не нужно знать об обновлениях.
Вы также можете настроить время выполнения обновлений — при запуске приложения или на регулярной основе. Благодаря функциям загрузки неопубликованных приложений эти обновления можно получать даже во время работы приложения.
При использовании этого типа развертывания создается специальный файл APPINSTALLER. Этот простой файл состоит из следующих разделов:
- Расположение файла APPINSTALLER
- Основные свойства пакета MSIX приложения
- Поведение при обновлении
Совместно с этим файлом корпорация Майкрософт разработала специальный протокол URL-адресов для запуска процесса установки по ссылке:
Этот протокол работает во всех браузерах и запускает процесс установки в Windows 10 удобным для пользователя образом. Так как операционная система управляет процессом установки, она учитывает расположение, из которого было установлено это приложение, и отслеживает все файлы, затронутые этим процессом.
MSIX создает пользовательский интерфейс для автоматической установки, отображая некоторые свойства пакета. Это обеспечивает единый процесс установки для каждого приложения.
После создания пакета MSIX и его перемещения на сервер развертывания вам нужно просто изменить файл APPINSTALLER, чтобы отразить эти изменения, главным образом версию и путь нового файла MSIX. Когда пользователь запустит приложение в следующий раз, система обнаружит изменение и скачает файлы для новой версии в фоновом режиме. После этого установка при запуске приложения будет осуществляться незаметно для пользователя.
Создание веб-проекта в Python разработчикам, привыкшим использовать другой язык программирования, может показаться немного запутанным процессом.
Данная статья описывает компоновку приложения Pyramid WSGI, создание списка его зависимостей, а также его развертывание (публикацию).
Примечание: примеры, приведенные в данной статье, тесно связаны со статьей, описывающей начало работы с Pyramid. Чтобы получить базовые инструкции по разработке веб-приложений с помощью Pyramid, читайте данную статью.
Вкратце о Pyramid
Этот хорошо продуманный и обслуживаемый проект достаточно популярен. В целом, Pyramid предоставляет несколько разных способов (веб-серверов и подходов) развертывания приложений.
Развертывание веб-приложений
На всех серверах на основе Python WSGI развертывание веб-приложений состоит из подготовки модуля WSGI, содержащего ссылку на объект приложения, который затем используется в качестве точки входа на веб-сервер для передачи запросов.
Nginx как обратный прокси-сервер
Сервер веб-приложений Python WSGI
Они работают путем принятия модуля Python, который, как описано выше, содержит веб-приложение и обслуживает его в сети.
Хотя некоторые из них очень мощны, все же, Nginx рекомендуется использовать как основу по указанным выше причинам (например, из-за более высокой производительности). Аналогично, серверы разработки, которые, как правило, поставляются с фреймворками веб-приложений, использовать для разработки не рекомендуется в связи с их недостаточной функциональностью (конечно, есть исключения).
Популярные веб-серверы Python WSGI:
Развертывание веб-приложения WSGI на основе Pyramid
Благодаря связующему программному обеспечению (или промежуточному, англ. middleware) для WSGI Python, существует множество вариантов серверов веб-приложений.
Модернизация системы
Чтобы сервер развертывания работал стабильно, очень важно использовать последние версии программ.
Чтобы обеспечить использование последних доступных версий приложений по умолчанию, необходимо обновить систему.
Для систем на основе Debian (т.е, Ubuntu, Debian) запустите:
aptitude update
aptitude -y upgrade
Для систем на основе RHEL (т.е., CentOS), используйте:
Установка Python, pip и virtualenv
Примечание для пользователей CentOS / RHEL:
По умолчанию CentOS / RHEL не содержит многих необходимых приложений. Инструментарий, содержащийся на сервере по умолчанию, предназначен не для работы пользователя, а для поддержки системных инструментов (таких как YUM).
Чтобы подготовить систему CentOS, нужно установить (скомпилировать из исходного кода) Python, а затем использовать его интерпретатор для установки инструментов pip и virtualenv.
На Ubuntu и Debian последняя версия интерпретатора Python (которую можно использовать) поставляется по умолчанию. Все, что остается установить:
python-dev: это общесистемный пакет, содержащий расширенные средства разработки для построения модулей Python.
Для установки python-dev используйте следующую команду:
aptitude install python-dev
pip: это менеджер пакетов, который помогает установить необходимые пакеты приложений.
Для установки pip запустите следующее:
curl https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py | python -
curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python -
export PATH="/usr/local/bin:$PATH"
Для этого могут потребоваться привилегии sudo.
Чтобы установить virtualenv с помощью pip, используйте:
sudo pip install virtualenv
Примечание: данный раздел сфокусирован на создании простого приложения, состоящего из одной страницы, онлайн.
Текущий рабочий каталог находится в
Текущее приложение Pyramid (application.py) выглядит так:
from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
def hello_world(request):
return Response('<h1>Hello world!</h1>')
if __name__ == '__main__':
config = Configurator()
config.add_view(hello_world)
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 8080, app)
server.serve_forever()
Чтобы превратить этот образец в модуль, содержащий WSGI, нужно выполнить следующие изменения:
Внеся все поправки, нажмите CTRL+X, чтобы сохранить и выйти, а затем Y для подтверждения.
Теперь данный файл можно использовать как модуль приложения с любым веб-сервером Python WSGI.
Многоуровневый объект приложения
Примечание: данный файл должен находиться в root-папке приложения, вместе с файлами requirements.txt или .ini. Это работает путем добавления приложения как модуля.
Чтобы создать файл wsgi.py с помощью редактора nano, запустите:
Скопируйте и вставьте приведенные ниже конфигурации:
Обработка зависимостей приложения с помощью PIP
Поскольку разработка приложений, как правило, начинается на локальной машине, необходимо убедиться, что все зависимости приложения установлены в виртуальной среде.
Создание списка зависимостей приложения
Примечание: данный раздел содержит команды, которые необходимо выполнить на локальной машине разработки или же там, где нужно создать список зависимостей приложения. Этот файл должен быть помещен в каталог приложения и загружен на сервер.
Чтобы создать список установленных пакетов с помощью pip:
pip freeze > requirements.txt
Данная команда создаст файл по имени requirements.txt, содержащий список всех установленных ранее пакетов. Если запустить эту команду в virtualenv, то список будет содержать только пакеты, установленные внутри среды. В противном случае, будут перечислены все пакеты, установленные глобально.
Скачивание зависимостей по списку
Примечание: Этот раздел содержит команды, которые должны быть выполнены на машине/в среде разработки.
Чтобы установить зависимости с помощью pip:
pip install -r requirements.txt
Данная команда скачает и установит все пакеты из списка. При работе с активированной средой файлы будут скачаны непосредственно в эту среду. В противном случае они будут установлены глобально (не рекомендуется).
Установка сервера веб-приложения Python WSGI
Установив приложение Pyramid, можно перейти непосредственно к процессу развертывания и установки выбранного сервера веб-приложений.
Данная статья сфокусирована на использовании простого и в то же время мощного сервера CherryPy.
Обслуживание приложений Pyramid с помощью веб-сервера CherryPy
Поскольку проект имеет отдельную виртуальную среду (
/pyramid_sites/env), CherryPy можно установить внутри этой среды.
Чтобы создать файл server.py, запустите:
Сохраните изменения и выйдите, нажав CTRL+X и Y для подтверждения.
Запуск и обслуживание сервера приложений
Чтобы начать обслуживать приложение, запустите server.py с помощью Python.
Для этого используйте:
Это запустит сервер в приоритетном режиме. Чтобы отключить его, нажмите клавиши CTRL + C.
Чтобы запустить сервер в фоновом режиме, выполните следующую команду:
Запуская приложение в фоновом режиме, используйте менеджер процессов (например, htop), чтобы прервать его.
Настройка Nginx
Установка Nginx
Примечание для пользователей CentOS / RHEL:
Запустите следующую команду, чтобы установить Nginx с помощью aptitude:
sudo aptitude install nginx
Чтобы запустить Nginx:
sudo service nginx start
Чтобы отключить Nginx:
sudo service nginx stop
Чтобы перезагрузить Nginx:
Настройка Nginx
Выбрав и установив веб-сервер для запуска приложения, нужно подготовить Nginx к работе с внутренним сервером (запускающим приложение WSGI).
Для этого нужно отредактировать конфигурационный файл nginx.conf.
Чтобы открыть и отредактировать данный файл с помощью текстового редактора nano, запустите:
sudo nano /etc/nginx/nginx.conf
Можно заменить содержимое файла приведенными ниже конфигурациями, чтобы Nginx работал как инвертированный прокси-сервер, взаимодействуя с приложением.
Скопируйте и вставьте приведенный ниже пример конфигураций.
Отредактировав конфигурации, нажмите CTRL+X, чтобы выйти и сохранить изменения, и Y для подтверждения. Чтобы активировать внесенные изменения, нужно перезапустить Nginx.
Для этого введите:
sudo service nginx stop
sudo service nginx start
Готово! Подключив сервер приложения к Nginx, можете просмотреть его; для этого введите IP-адрес сервера в браузер.
Данное руководство поможет вам развернуть PHP-приложение, WordPress и частный DNS.
Для реализации такой инфраструктуры нужны шесть серверов, которые создаются в следующем порядке:
- Частные DNS-серверы (ns1 и ns2).
- Сервер баз данных (db1).
- Серверы приложений (app1 и app2).
- Балансировщик нагрузки (lb1).
1: Частные DNS-серверы
Использование имен в адресах помогает идентифицировать серверы, с которыми вы работаете, и упрощает обслуживание объемных инфраструктур (чтобы заменить сервер, достаточно просто обновить свои записи DNS в одном файле, а обновлять бесчисленные конфигурационные файлы не нужно). В данной настройке DNS используется для того, чтобы иметь возможность ссылаться на частные сетевые адреса серверов по имени вместо IP-адресов.
Примечание: Поддомен почти всегда выбирается произвольно (обычно при его выборе предпочтение отдается варианту, который упростит настройку).
В результате вы получите два BIND-сервера, ns1 и ns2. Если вы уже знаете IP-адреса всех серверов, добавьте их в DNS. Если вы не знаете адреса, добавляйте DNS-записи по мере создания серверов.
2: Сервер баз данных
Чтобы внедрить распределение нагрузки между серверами приложений (то есть, между Apache и PHP), нужно отделить от них базу данных, выделив для нее отдельный сервер. Отделение БД от приложения является важным этапом для горизонтального масштабирования многих типов приложений.
Установка MySQL
Перейдите на сервер БД, db1, и установите MySQL:
sudo apt-get update
sudo apt-get -y install mysql-server
По запросу введите root-пароль MySQL.
sudo mysql_install_db
sudo mysql_secure_installation
MySQL снова запросит root-пароль, а затем предложит изменить его. Если вы не хотите менять этот пароль, введите N. На остальные вопросы программы можно выбрать опции по умолчанию.
Настройка MySQL для прослушивания частного сетевого интерфейса
Откройте конфигурационный файл MySQL:
sudo vi /etc/mysql/my.cnf
Найдите параметр bind-address и укажите в нем частный сетевой адрес сервера базы данных:
Сохраните и закройте файл.
sudo service mysql restart
Создание пользователя и базы данных
Теперь нужно создать БД и пользователя, с помощью которого приложение сможет подключаться к БД.
Откройте консоль MySQL:
Введите root-пароль MySQL.
Чтобы создать БД, введите:
CREATE DATABASE app;
MySQL связывает своих пользователей с серверами, которые будут подключаться к базе данных. В данном случае у вас есть два сервера приложений, которые будут подключаться к БД, поэтому необходимо создать пользователя для каждого из них.
Создайте пользователя базы данных appuser, к которому можно подключиться с частного сетевого адреса каждого из серверов приложений (app1 и app2). Используйте один и тот же пароль для каждого пользователя:
Теперь нужно передать пользователю appuser права на базу данных app.
Теперь инсталлятор приложения сможет получить доступ к БД и внести туда все данные.
Примечание: Если вы используете больше двух серверов приложений, создайте пользователей базы данных для каждого из них.
Выйдите из командной строки MySQL:
3: Настройка серверов приложений
Серверы приложений будут запускать код приложения, который будет подключаться к серверу базы данных. В данном случае используется PHP-приложение WordPress, которое обслуживается веб-сервером Apache или Nginx. Чтобы реализовать балансировку нагрузки между серверами приложений, настройте два одинаковых сервера.
Установка Apache и PHP
На оба сервера приложений, app1 и app2, нужно установить Apache и PHP.
sudo apt-get update
sudo apt-get -y install apache2 php5-mysql php5 libapache2-mod-php5 php5-mcrypt
Настройка Apache
Для распределения нагрузки и обработки SSL-терминации будет использоваться HAProxy. Это предотвратит прямой доступ к приложению. Свяжите Apache с частным сетевым адресом каждого сервера.
На каждом сервере приложений (app1 и app2) откройте конфигурационный файл портов Apache. По умолчанию это файл ports.conf:
sudo vi /etc/apache2/ports.conf
Найдите строку Listen 80 и добавьте в нее свой внутренний IP-адрес:
Сохраните и закройте файл.
Теперь Apache прослушивает только частный сетевой интерфейс, что означает, что к нему нельзя получить доступ по внешнему IP-адресу или имени хоста.
Перезапустите Apache, чтобы обновить настройки:
sudo service apache2 restart
Теперь веб-сервер Apache доступен только через частный сетевой адрес серверов приложений. Чтобы веб-сервер мог получать запросы пользователей, настройте балансировку нагрузки.
Загрузка и настройка приложения
В данном примере используется приложение WordPress. Если вы используете другое PHP-приложение, самостоятельно загрузите его и выполните соответствующую настройку (например, добавьте информацию о подключении к базе данных), а затем перейдите к следующему разделу.
Загрузите архив WordPress на первый сервер приложений, app1.
tar xvf latest.tar.gz
Перейдите в полученный каталог:
Для загрузок WordPress необходим каталог wp-content/uploads.
В качестве шаблона конфигурационного файла WordPress можно использовать образец, который поставляется с установкой. Скопируйте его:
cp wp-config-sample.php wp-config.php
Откройте файл в редакторе:
Настройте подключение WordPress к БД приложения. Для этого укажите следующие данные:
Примечание: Вместо условных данных укажите свои данные.
Балансировщик нагрузки будет шифровать данные с помощью TLS/SSL. Добавьте в настройки WordPress следующие строки, чтобы приложение могло взаимодействовать с обратным прокси-сервером и поддерживать SSL.
Сохраните и закройте файл.
Копирование файлов приложения в корневой каталог
Теперь приложение настроено. Можно скопировать его файлы в корневой каталог (document root) веб-сервера Apache, из которого он будет обслуживать контент.
По умолчанию DocumentRoot Apache находится в каталоге /var/www/html.
Сначала удалите стандартный файл index.html:
sudo rm /var/www/html/index.html
С помощью rsync скопируйте файлы WordPress в /var/www/html и передайте права на них пользователю www-data (он запускает Apache).
/wordpress/ /var/www/html
sudo chgrp -R www-data /var/www/html/*
Первый сервер приложений готов. Теперь нужно настроить второй сервер.
4: Репликация файлов приложения на остальные серверы
Чтобы сохранить целостность файлов приложения на всех серверах, нужно настроить репликацию каталога document root.
При загрузке файлов и установке плагинов веб-интерфейс WordPress будет сохранять файлы на том сервере, который обрабатывает запрос. Если эти файлы не реплицируются на все серверы приложений, некоторые из пользователей будут получать неполные страницы с отсутствующими изображениями и неработающими плагинами.
Примечание: Если вы используете не WordPress, а другое приложение PHP, которое не сохраняет данные (например, загруженные файлы или загруженные плагины) на сервере приложений, вы можете просто один раз скопировать файлы приложения вручную. Для копирования файлов с app1 на app2 используйте rsync.
GlusterFS позволяет создать реплицированный том необходимых файлов.
Настроив репликацию данных между серверами приложений, можно приступать к настройке распределения нагрузки.
5: Настройка балансировщика нагрузки
Копирование SSL-сертификата
Примечание: Данный раздел нужно выполнить на сервере lb1.
Откройте каталог, в котором хранится SSL-сертификат, и объедините все файлы сертификата в единый файл .pem. К примеру:
Затем скопируйте полученный файл в /etc/ssl/private:
HAProxy будет использовать этот файл для SSL-терминации.
Установка HAProxy
На сервер lb1 установите HAProxy.
sudo add-apt-repository ppa:vbernat/haproxy-1.5
sudo apt-get update
sudo apt-get -y install haproxy
Настройка HAProxy
Выберите параметры HAProxy, настройте SSL-терминацию, фронтенд и бэкенд.
Откройте конфигурационный файл.
sudo vi /etc/haproxy/haproxy.cfg
Общие настройки HAProxy
Для начала нужно выбрать значение maxconn. Этот параметр определяет максимальное количество одновременных соединений, которое будет поддерживать HAProxy. Это может повлиять на QoS и защитить веб-сервер от слишком большого количества запросов. Подберите оптимальное значение maxconn для вашей среды самостоятельно. Добавьте следующую строку в глобальные настройки и укажите выбранное значение.
Добавьте эту строку, чтобы настроить максимальный размер создаваемых временных ключей DHE:
Если вы хотите включить страницу статистики HAProxy, добавьте следующие строки в раздел defaults (укажите имя пользователя и надежный пароль):
stats enable
stats uri /stats
stats realm Haproxy\ Statistics
stats auth user:password
Настройки прокси
Затем нужно настроить бэкенд. Добавьте в файл:
Теперь сохраните и выйдите из haproxy.cfg. HAProxy готов к запуску, но сначала нужно настроить логирование.
Логирование HAProxy
Откройте файл rsyslog.
sudo vi /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514
$UDPServerAddress 127.0.0.1
sudo service rsyslog restart
Настройка логирования HAProxy завершена. После запуска HAProxy создаст лог /var/log/haproxy.log.
Перезапуск HAProxy
Чтобы обновить настройки, перезапустите HAProxy.
sudo service haproxy restart
6: Настройка WordPress
Запустите сценарий установки WordPress, который подготовит БД.
Откройте в браузере:
На экране появится экран установки WordPress. Следуя его инструкциям. Заполните все формы и нажмите Install WordPress.
После установки WordPress приложение будет готово к работе.
Заключение
Обязательно проверьте работу приложения и убедитесь, что все работает должным образом.
Читайте также:
- Яндекс использует файлы cookie как убрать рекламу на телефоне
- Находясь в личном почтовом ящике электронной почты gmail как найти приложения google
- Не запускается реклама в инстаграм с телефона
- Укажите с какими приложениями может работать программный робот
- Как узнать арестована ли карта втб в приложении