Как развернуть приложение на сервере
В этой статье мы развернем приложение Flask на виртуальном частном сервере (VPS) с помощью программного обеспечения Apache Webserver и mod_wsgi WSGI.
В этой статье мы развернем приложение Flask на виртуальном частном сервере (VPS) с помощью программного обеспечения Apache Webserver и mod_wsgi WSGI.
Что такое VPS?
Различные компании, такие как Google, Amazon, предоставляют услуги облачных серверов (GCP, AWS и т. Д.). В рамках этой услуги вы можете предоставить в аренду различные серверы, расположенные в разных частях мира. Они взимают с вас плату в зависимости от различных стандартов, таких как используемые часы, загрузка процессора и т. Д.
Использование облачного сервера дает вам несколько преимуществ, таких как:
- Серверы, работающие 24 часа – С облачными серверами ваше приложение, развернутое на них, будет работать 24 часа. В случае локального хоста(вашего ноутбука) вам нужно поддерживать его в рабочем состоянии в течение 24 часов, что непрактично.
- Масштабируемость – В случае, если ваше хранилище заполнено, вы можете быстро масштабировать свои сервисы(хранилище, оперативную память и т. Д.) В облаке.
- Более безопасный – Поскольку все оборудование присутствует в облачном центре, оно более безопасно.
- Доступность – Вы можете получить доступ к облачному серверу с любого ноутбука или компьютера.
В этом уроке мы будем использовать веб – сервисы AWS- Amazon для развертывания. Вы можете обратиться к любому из поставщиков VPS.
Программное обеспечение, необходимое для запуска приложения в Интернете
Теперь приложение Flask, развернутое на VPS, должно выполнить следующие действия:
Для выполнения всех этих задач нам требуется различное следующее программное обеспечение:
Сервер приложений WSGI обеспечивает интерфейс шлюза между программным обеспечением Apache и приложением Flask. WSGI предназначен для фреймворков, написанных на python (Django/Flask)
Основное использование WSGI заключается в преобразовании запросов в формат , читаемый на python, и отправке их в код приложения (написанный на Flask-python) , который затем выполняет необходимые функции и возвращает веб-страницу ответа.
Таким образом, WSGI работает как шлюз между Apache и приложением Flask.
Давайте рассмотрим их по отдельности
Что такое программное обеспечение веб-сервера?
Основная роль программного обеспечения веб-сервера заключается в размещении веб-сайтов в Интернете. Он действует как посредник между сервером и клиентскими машинами .
Эти программные приложения обрабатывают запросы клиентов, а затем возвращают физические файлы(шаблоны/данные), присутствующие на сервере, и отображают их клиентам.
Примерами программного обеспечения веб-сервера являются Apache, NGINX и т. Д.
В этой статье мы будем использовать хороший старый Apache сервер, на котором размещается почти 47% веб-приложений в Интернете
Что такое сервер приложений mod_wsgi WSGI?
Он действует как интерфейс между программным обеспечением Apache и нашим приложением Flask, расположенным на облачном сервере.
Развертывание проекта Flask на VPS
Первым шагом является выбор сервера у поставщика VPS. Любые компании, предоставляющие VPS, будут иметь несколько серверов, работающих на разных операционных системах, как показано на рисунке
После выбора необходимого вам нужно будет выполнить несколько шагов для настройки и запуска сервера.
После настройки сервера вы получите IP адрес или Общедоступный DNS сервера, который позже потребуется для подключения к облачному серверу.
1. Подключение к Облачному серверу с локального компьютера
Мы используем команду ssh для подключения к серверу. Чтобы подключиться к облачному серверу с нашего локального компьютера, выполните следующие команды:
В оболочке просто запустите код:
Для Windows мы используем программное обеспечение под названием PuTTY , которое вы можете скачать непосредственно из Интернета. После загрузки введите cloud_IP и нажмите открыть .
Мой cloud_IP/Public DNS , который я буду использовать для доступа к своему серверу,:
Для AWS нам также необходимо использовать дополнительный закрытый ключ безопасности. Следовательно, в зависимости от поставщика VPS вам также может потребоваться добавить ключ security_key
Как только это будет сделано, вы войдете в ОС облачного сервера.
2. Установка необходимых пакетов
Как только сервер будет подключен, он будет похож на новый компьютер ubuntu. Сначала нам нужно установить в него все важные пакеты.
Поэтому выполните следующие команды:
Всегда обновляйте систему после запуска сервера.
Установка apache2 и mod_wsgi на сервере
Теперь давайте сначала установим Apache2 и пакеты mod_wsgi в системе
Чтобы проверить, работает Apache2 или нет, перейдите на общедоступный DNS/IP-адрес вашего облачного сервера. Вы увидите страницу Apache по умолчанию.
Теперь установите python3 и трубу в систему с помощью:
Установка колбы и ее расширений
Теперь установите Flask Framework и все другие необходимые Расширения Flask , такие как Flask_SQLAlchemy , Flask_login, | Flask_wtf, и т. Д
Просто установите все расширения колбы, которые вам нужны для вашего проекта колбы.
3. Перенос проекта Flask с локальной машины на облачный сервер
Вы можете создать новый каталог и закодировать в нем все приложение Flask, используя текстовый редактор nano .
Лучший вариант-закодировать проект на локальном компьютере, а затем перенести папку flask_project на облачный сервер.
Для передачи файла мы используем код
В AWS нам также необходимо вставить ключ безопасности. Если у вашего провайдера VPS нет ключа security_key, затем удалите key_path из команды
Свяжите Каталог проекта приложения Flask flask_project , присутствующий в домашнем каталоге, с конфигурациями Apache (присутствующими в каталоге /var/www/html ). Мы делаем это с помощью кода:
4. Кодирование приложения колбы
Внутри папки Flask_project у вас должны быть все файлы Flask – app.py , models.py , Шаблоны и т.д.
Давайте закодируем простое приложение Flask, поэтому в каталоге flask_project создайте файл app.py
После этого нам теперь нужно создать файл WSGI . Для этого создайте файл .wsgi с тем же именем, что и основной файл приложения Flask. В моем случае это app.wsgi
используя nano app.wsgi , добавьте код:
Отлично!! Теперь нам нужно включить mod_wsgi для взаимодействия Apache с приложением Flask.
Для этого перейдите в /etc/apache2/сайты с поддержкой/ :
Откройте файл conf 000-default.conf с помощью текстового редактора nano и ниже DocumentRoot/var/www/html строка, добавьте код:
Запуск приложения Flask
Вот и все теперь перезагрузите сервер apache:
И зайдите в общедоступный DNS, сайт будет запущен и запущен !!
Аналогично другому URL-адресу
Вывод
Ваше приложение Flask запущено и работает на облачном сервере. Попробуйте запустить свое собственное приложение Flask на облачном сервере и сообщите нам, что вы думаете. Увидимся в следующий раз, ребята 🙂
В качестве среды исполнения Java-приложений обычно используются серверы, у которых минимум 2 Гб оперативной памяти (не считая выделенной под ОС). Рассмотрим вариант запуска Java-приложения с базой данных MySQL на VDS-сервере «Danny» от Timeweb (1 Гб ОЗУ) без получения хорошо известной каждому «джависту» ошибки «Out of memory». Весь процесс от регистрации до запуска работающего Java-приложения с базой данных займет не более 15 минут!
Первым делом создаем VDS.
Выбираем конфигурацию ПО сервера – в нашем случае ОС Ubuntu (можно любую другую из предложенных) и «Docker».
Выбираем конфигурацию сервера «Danny» (2.8 ГГц CPU, 1Гб ОЗУ, 10Гб дискового пространства), которая является на момент написания статьи самым бюджетным вариантом.
Итак, мы создали сервер с установленным ПО «Docker».
Теперь нам необходима среда исполнения для нашего Java-приложения. Думали, дальше будет «оченьмноготекста» по установке и настройке Apache Tomcat? Нет. Думаю, на просторах интернета предостаточно материалов на данную тему, поэтому, чтобы не тратить время на полную установку Apache Tomcat, мы используем spring boot с embedded tomcat.
Далее нам необходима установленная версия Java для запуска приложения. Но мы, все по тем же причинам в духе «у меня нет времени, клиенты ждут работающий сайт еще до того как придумали Java как можно скорее», не будем устанавливать Java. Мы создадим docker-образ с нашим Java-приложением на основе docker-образа с уже установленной Java Runtime Environment 11 (JRE-11). Также такой подход делает наше приложение максимально портативным и хорошо масштабируемым.
Создаем простейший Dockerfile:
В данном файле описаны:
Копирование в docker-образ нашего приложения demo-1.0.war.
Установка рабочей директории «/usr/app».
Публикация порта 8080.
Команда, которая выполнится при запуске docker-контейнера.
Собираем docker-образ с помощью команды docker build и публикуем в своем репозитории.
Для разворачивания БД MySQL будем использовать официальный docker-образ «mysql:8.0.21».
Таким образом, у нас имеется:
Docker-образ нашего Java-приложения.
Docker-образ MySQL БД.
Теперь заходим удаленно (например, через Putty) на созданный VDS. С помощью команды docker pull загружаем docker-образы:
Вместо username необходимо написать свой docker-аккаунт.
Теперь запускаем docker-контейнеры (предварительно заменив some_name_mysql/some_password_mysql/some_name_java/username на свои значения):
Проверяем (IP-адрес берем из панели управления сервером):
Ура! Работает! Но где же «java.lang.OutOfMemoryError: Java heap space»?
Приведу скриншот показателей загрузки, полученных командой htop:
Для большей практической ценности показатели взяты с сервера, на котором установлено функционирующее боевое приложение (достаточно небольшое, но все же активно используемое). Как видите, суммарное потребление оперативной памяти превышает 1Гб, хотя на старте приложения это значение было
800Мб. Повышение потребления ОЗУ в ходе эксплуатации произошло в связи с созданием множества необходимых объектов и постоянным хранением их в памяти в целях оптимизации. Все это приводило к достижению лимита heap size и ошибке «Out of memory». Решение, как вы видите, состоит в подключении swap-пространства. Для этого выполните набор следующих команд:
Подведем итог. Мы получили работающее Java-приложение с базой данных MySQL на сервере Danny менее чем за 30 минут! И никаких непредвиденных «OutOfMemory».
Стоит добавить, что самое лучшее решение с точки зрения оптимизации – повышение конфигурации сервера до «Scarlett», на котором и дискового пространства в 3 раза больше (30Гб), и ОЗУ в 2 раза больше (2Гб), чего должно хватить для большинства небольших проектов.
Но с целью апробации услуг VDS, предоставляемых компанией Timeweb, временное решение, описанное в данной статье, более чем актуально даже для владельцев крупных enterprise-приложений (при необходимости можно увеличить размер swap-файла).
1- Цель статьи
В данной статье я покажу вам как развернуть приложение Spring Boot на WebLogic Server. Это Web Server предоставленный с помощью Oracle, бесплатно для скачивания, развития (developing), теста (testing), макетирования (prototyping) и демонстрации (demonstrating) вашего приложения. WebLogic выпущен по лицензии OTN.
Удостоверьтесь, что вы успешно установили WebLogic, если не вы можете посмотреть способ установки WebLogic в статье ниже:
На самом деле, приложение Spring Boot может быть упаковано в выполняемый файл JAR (Executable JAR file). С данным файлом вы можете запустить приложение напрямую без необъодимости развертывания ни на какомWeb Server. Executable JAR file может быть несовместимым со всеми Web Server. Поэтому если вы хотите развернуть на определенном Web Server, то вам нужно упаковать приложение Spring Boot в файл WAR.
2- Edit code
Здесь у меня имеется проект Spring Boot, разработанный с помощью Eclipse IDE. При создании проекта Spring Boot у вас есть 2 выбора для упаковки данного проекта это WAR или JAR.
Когда вы создаете проект Spring Boot с опцией "Packaging = War", Eclipse создает для вас 2 класс это "AbcApplication & ServletInitializer". Файлы WAR подходящие для развертывания (deploy) на Web Server.
При это если вы создаете проект Spring Boot с опцией "Packaging = Jar", будет создан только один класс AbcApplication. Приложение Spring Boot при упаковке в файл JAR, может выполняться (Executabe) независимо, без необходимости развертывания на каком-либо Web Server. Но файл JAR не подходит для развертывания на Web Server.
Если у вас есть готовый проект Spring Boot, вам нужно изменить метод упаковки (Packaging) на WAR:
На Eclipse открыть файл pom.xml, и измените метод упаковки (packaging) на war.
Если ваш проект не имеет класс ServletInitializer, создайте его.
Добавить следующую сниппет конфигурацию в pom.xml:
Если имеется больше чем 1 класс Application в вашем проекте, скажите Spring Boot какой класс будет использоваться для вашего приложения.
Создать 2 файла weblogic.xml & dispatcherServlet-servlet.xml в папке src/main/webapp/WEB-INF. Заметьте, если данная папка не существует, создайте ее.
Ваше приложение при развертывании на WebLogic будет иметь "context-root = /myweb", вы можете его изменить с помощью конфигурации в файле weblogic.xml:
3- Install Spring Boot
В следующем шаге, вам нужно использовать Maven чтобы создать файл WAR. Вам нужно удостовериться ваш Eclipse использует JDK вместо JRE. Если нет, произойдет ошибка в данном процессе.
Нажмите на правую кнопку мыши на Project и выберите:
Теперь вы получите файл WAR расположенный в папке target проекта, вы можете использовать данный файл для развертывания на Tomcat Server.
4- Развернуть на WebLogic
После упаковки приложения в файл WAR, вы можете развернуть данный файл на WebLogic:
- Копировать файл WAR расположить в определенную папку сервер, потом развернуть данный файл на WebLogic. Если хотите переразвернуть приложение, вам нужно только скопировать новый файл WAR перезаписать старый файл и объявить WebLogic обновить приложение.
- Использовать функцию Upload для развертывания файла WAR.
OK, здесь я скопировал файл WAR и расположил его в папке на сервере.
Нажмите на "Activate Changes" для активации изменений.
Теперь ваше приложение имеет статус "Prepared" (Подготовленный), оно еще не активировано для работы.
5- Отмена развертывания (Undeploy)
- Остановить (Stop) приложение.
- Удалить приложение из WebLogic.
6- Обновить развертывание
- Отмена развертывания (Undeploy) приложения и переразвернуть (Redeploy).
- Скопировать новый файл WAR и перезписать старый файл WAR, и объявить WebLogic переобновить приложение (Или перезагрузить WebLogic). Примечание: Данный способ применяется только когда ваше приложение развернуто напрямую из файла WAR, расположенный на сервере.
В предыдущем шаге я развернул приложение напрямую с файла WAR расположеный в папке сервера. Теперь я скопирую новый файл, чтобы перезаписать старый.
View more Tutorials:
Это онлайн курс вне вебсайта o7planning, который мы представляем, он включает бесплатные курсы или курсы со скидкой.
Сортируем ветки
- JRTB-0
- JRTB-2
- JRTB-3
- STEP_1_JRTB-0 — первый шаг
- STEP_2_JRTB-2 — второй шаг
- STEP_3_JRTB-3 — третий шаг
Немного о докере
Что такое Docker? Вкратце — это инструмент, с помощью которого можно быстро и безопасно развертывать (деплоить) приложения, создавая для них закрытую инфраструктуру, необходимую только для них. Пока что сложно, я понимаю. В общем и целом докер можно понимать как платформу для разработки, где можно быстро и эффективно работать. Докер можно понимать как программу, которая работает на сервере. Эта программа имеет возможность хранить контейнеры с приложениями. Что такое контейнер? Это отдельная инфраструктура, в которую можно добавить все, что нужно. Например для Java-приложения нам нужна JRE, чтобы запустить приложение, вот контейнер будет иметь это, нужно будет еще какое-то программное обеспечение — можно добавить это. А может быть, нам нужен Линукс и Tomcat сервлет контейнер. Такое тоже можно будет сделать. Контейнеры создаются на основе image (образа): то есть, это определенный шаблон в котором написано все необходимое для создания докер контейнера. Как создать этот образ? В нашем случае нам нужно будет создать файл Dockerfile в корне проекта с описанием того, что должно быть в контейнере. Так как мы не хотим где-то показывать токен бота, придется извернуться и передавать его каждый раз, когда мы захотим развертывать приложение. Более детально об этой теме почитать можно здесь и здесь.
Пишем JRTB-13
Нужно настроить быстрый и легкий процесс развертывания (деплоя) нашего приложения на сервер. То есть на машину, которая работает 24/7. За основу возьмем докер. Но задачи в нашем списке, которая бы отвечала за добавление этой функциональности, нет. Как-то я его пропустил при создании. Ничего страшного, сейчас создадим. Заходим на вкладку создания issue на гитхаб и выбираем Feature Request:Добавляем описание задачи, критерии его приемки, устанавливаем, к какому проекту этот issue относится и можно создавать новое issue:Теперь чтобы показать, что задача взята в работу, сменим статус задачи с To do на In Progress:Это будет сложная статья. Если будут проблемы — пишите в комментариях: я буду следить и отвечать на них в меру сил. Такой будет небольшой Customer Support :DСоздаем Dockerfile
Создаем docker-compose.yml
Хорошо бы вам про YAML формат почитать отдельно, а то статья и так уже растет, как на дрожжах. Для нас это просто еще одно описание переменных по типу .properties. Только в пропертях записывается через точку, а в YAML это делается немного красивее. Например, так. Две переменные в .properties: javarush.telegram.bot.name=ivan javarush.telegram.bot.token=pupkin А вот в .yaml (тоже самое что и .yml) будет это так: Второй вариант более красивый и понятный. Пробелы должны быть именно такие, как указаны выше. Как-нибудь переведем наши application.properties и application.yml. Для начала нужно его создать. В корне проекта создаем файл docker-compose.yml и записываем туда следующее: Первая строка — это версия docker-compose. services: говорит о том, что все следующие строки после этого (будут сдвинуты) — относятся к сервисам, которые мы настраиваем. У нас такой пока только один — java-приложение под названием jrtb . И уже под ним будут все его настройки. Например, build: context: . говорит о том, что мы будем искать Dockerfile в той же директории, что и docker-compose.yml. А вот секция environment: будет отвечать за то, чтобы мы передали в Dockerfile необходимые переменные среды (environment variables). Как раз то, что нам и нужно. Поэтому ниже мы переменные и передаем. Их docker-compose будет искать в переменных операционной среды сервера. Добавим их в баш скрипте.
Создаем баш скрипты
- Dockerfile — файл для создания образа нашего приложения;
- docker-compose.yml — файл с настройкой того, как мы будем запускать наши контейнеры;
- start.sh — баш скрипт для развертывания нашего приложения;
- stop.sh — баш скрипт для остановки нашего приложения.
И в README добавим новый параграф с описанием того, как деплоить наше приложение:
Разумеется, все пишет на английском. Уже как обычно, в нашей новосозданной ветке STEP_4_JRTB-13 создаем новый коммит с именем: JRTB-13: implement deployment process via docker и делаем пуш. Я перестаю подробно останавливаться на вещах, которые я уже описывал в прошлых статьях. Не вижу смысла повторять одно и тоже. К тому же, кто разобрался и сделал у себя, у того вопросов не возникнет. Это я о том, как создать новую ветку, как создать коммит, как запушить коммит в репозиторий.
Читайте также:
- Как отменить регистрацию на рейс аэрофлота в приложении
- Windows 7 как сервер приложений
- Какой из рычагов изображенных на рисунках потребует приложение наименьшей силы чтобы поднять груз
- Как узнать пользовательский пин код для блокировки приложений на андроид
- Буфер обмена используется для копирования или перемещения данных как внутри одного приложения