Как загрузить на сервер программу

Развертывание исполняемого кода на сервере (деплой, от англ. – deploy), где ему предстоит работать, часто вызывает массу вопросов у начинающих разработчиков и системных администраторов. В этом материале мы собрали необходимый гайд, способный помочь развернуть проект без участия коллег с большим опытом. Понятно, что он не совсем универсальный, в ряде случаев придется интерпретировать информацию по-своему, с ориентиром на специфику системы.

Эксперименты можно проводить на облачных серверах провайдера Timeweb Cloud, у которого есть различные тарифы. Есть предложения по готовым решениям и чистые виртуальные машины. Для деплоя Java-приложения на сервер понадобится работающее приложение, созданное на Java с использованием фреймворка Spring Boot. Предполагаем, что разработка ведется на платформе Windows 10 с установленными PostgreSQL, Apache, Maven, Git Bash.

На удаленном хосте должны быть установлены Ubuntu, Nginx, сертификат SSL и панель управления Vesta. Сразу отметим, что в зависимости от версии Java возможны «нестыковки» с операционкой, поэтому при использовании другого релиза вы, возможно, столкнетесь с ошибками. Тогда каждый разбирается в ситуации самостоятельно или с помощью специалистов техподдержки провайдера.

Как установить программу на сервер ?

Настроим предустановленную Vesta

Использовать для деплоя Java-приложений допускается любую панель управления. Но в данном случае остановимся на варианте Vesta Control Panel. И будем подключаться к хосту через утилиту Putty, поддерживающую защищенные соединения по протоколу SSH. В ней есть особенность – при вводе пароля курсор стоит на месте, но, на самом деле, он вводится. Итак, подключимся к пользователю с правами root. На экране монитора пользователь увидит следующее:

sudo apt update
sudo apt-get install wget

Сразу зададим настройки панели управления:

sudo nano /usr/local/vesta/conf/vesta.conf

Если текстовый редактор nano еще не установлен, сделаем это командой:

sudo apt-get install nano

Кому больше нравится редактор vi, редактируйте конфигурацию с его помощью:

sudo vi /usr/local/vesta/conf/vesta.conf

В открытом файле добавим строку FILEMANAGER_KEY = ‘ILOVEREO’ (в самый конец). И еще одну – DB_SYSTEM – меняем на DB_SYSTEM=‘mysql,pgsql’. Закроем файл с сохранением и сразу же перезапустим веб-версию панели Vesta с выходом и повторным входом в аккаунт.

Инсталлируем БД PostgreSQL в Ubuntu и Vesta Panel

Теперь установим PostgreSQL. Выполняется это командой:

sudo apt-get install postgresql postgresql-contrib phppgadmin

Следом скачаем файлы конфигурации Vesta Control Panel:

wget http://c.vestacp.com/0.9.8/ubuntu/pg_hba.conf -O /etc/postgresql/*/main/pg_hba.conf

Перезагрузим процесс PostgreSQL:

service postgresql restart

Есть альтернативная команда:

systemctl restart postgresql

И зайдем в систему под пользователем postgres:

su – postgres

Пароль устанавливается разными способами. Вот один из них:

psql -c “ALTER USER postgres WITH PASSWORD ‘pgp4sw0rd’”
password postgres

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

Как установить программу на сервер? Круглосуточная работа программ на серверах vds/vps.

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

Зарегистрируем PostgreSQL в Vesta:

v-add-database-host pgsql localhost postgres pgp4sw0rd

Скачаем настроечные файлы для phppgadmin:

wget http://c.vestacp.com/0.9.8/ubuntu/pga.conf -O /etc/phppgadmin/config.inc.php
wget http://c.vestacp.com/0.9.8/ubuntu/apache2-pga.conf -O /etc/apache2/conf.d/phppgadmin

И перезапустим веб-модули:

service apache2 restart
service vesta restart
service nginx restart

Инсталлируем Java на Ubuntu

Java нужна для запуска тестового проекта, собранного в JAR. Инсталляция произойдет по команде:

sudo apt update
sudo apt install openjdk-8-jdk

Проверим версию Java:

java —version

На экране появится примерно следующее:

openjdk version «1.8.0_292»
OpenJDK Runtime Environment (build 1.8.0_292-8u292-b10-0ubuntu1~18.04-b10)
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)

Если установили не ту версию, ее легко удалить (на примере 1.8):

sudo apt-get remove —auto-remove openjdk
sudo apt-get autoremove openjdk-8-jre
sudo apt-get autoremove openjdk-8-jdk
sudo apt-get purge openjdk

Настроим Mail, User, Domain, DNS и прочее через веб-панель Vesta

Панель управления Vesta представляет собой продукт с графическим интерфейсом, где легко разобраться даже без инструкции. И на первом шаге создадим в ней новый аккаунт. Войдите в веб-версию панели под администратором, имеющим право на регистрацию других пользователей. Во вкладке USER создайте нового, указав его название в поле [username]. После сохранения настроек надо зайти в панель управления уже под ним.

  1. Подключим сайт. Кликнем на вкладку Web и там на Add web domain. Введем доменное имя своего ресурса без HTTP.
  2. Создадим email. Зайдем на вкладку Mail и сделаем новый ящик, например, с именем admin. На него будут поступать подтверждения, SSL-сертификат.
  3. Создадим новую БД PostgreSQL. Кликнем на графу DB и на Add database. По умолчанию Vesta задает имя базы данным с префиксом в виде названия текущего аккаунта. Если такое не устраивает, БД допускается добавлять вручную через код.
  4. Настроим DNS. Внесем значения адресов в соответствии с информацией, предоставленной провайдером. Кликнем на поле Default Name Servers и введем указанные данные. Затем зайдем на вкладку DNS и по клику Edit введем в поле SOA:

ns1.yourdomain.ru

5. Приобретем и настроим SSL-сертификат. Здесь мы предположим, что тот уже есть у нас, и остается только настроить его. Кликнем на вкладку Web, далее Edit и поставим галочку на SSL support. Заполним открывшиеся поля.

Нажмем Save для завершения процедуры.

Настроим Nginx

Очередной этап пригодится тем, кто планирует запускать программы через нестандартные порты вместо стандартного 8080. В нашем эксперименте изменим значение в в файле application.properties на server.port=8099 . Порт 80 обычно занят Nginx или Apache. При желании есть возможность создать переадресацию через файл .htaccess.

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

Теперь подключимся по протоколу SSH к удаленному хосту с использованием аккаунта root. И сразу проверим каталог созданного ранее пользователя, точно ли он существует:

ls -l /home/YOURUSER/conf/web/

Система выдаст примерно такое сообщение:

ssl.yourdomain.ca
ssl.yourdomain.crt
ssl.yourdomain.key
ssl.yourdomain.pem
yourdomain.apache2.conf
yourdomain.apache2.ssl.conf
yourdomain.nginx.conf
yourdomain.nginx.ssl.conf

Раз мы установили сертификат SSL, нужно настроить редирект с HTTP на HTTPS. Поэтому откроем файл nginx.conf:

sudo nano /home/YOURUSER/conf/web/YOURDOMAIN.nginx.conf

И в конце внесем строку (перед закрывающей скобкой):

return 301 https://YOURDOMAIN$request_uri;

Также включим перенаправление портов:

sudo nano /home/YOURUSER/conf/web/YOURDOMAIN.nginx.ssl.conf

В блоке location/, в поле proxy_pass меняем значение на предложенное выше – 8099.

location / proxy_pass https://7.12.12.01:8099;

Выйдите из файла с сохранением изменений. И перезапустите процессы:

service apache2 restart
service vesta restart
service nginx restart

Подготовим приложение Java для развертывания

Как я писал telegram-бота и заливал его на удаленный сервер

Как только на территории РФ вступил в силу запрет на анонимность в мессенджерах, у меня дошли руки написать пост про telegram-бота. По ходу создания бота столкнулся с большим количеством проблем, которые пришлось решать по отдельности, и буквально выцеживать крупинки информации со всего интернета. И вот после нескольких месяцев страданий и мучений (кодинг – не основное моё занятие) я наконец-то закончил с ботом, разобрался со всеми проблемами и готов поведать свою историю Вам.

Первые шаги

Внимание: token – единственный идентификационный ключ к боту. Нигде не выкладывайте его, иначе другие люди смогут управлять Вашим ботом. Бот с данным token на момент выкладывания статьи удалён.

Какой язык программирования выбрать для написания бота?

Тут я долго не заморачивался и остановился на Python, так как знаю его достаточно хорошо, да и удобная библиотека тоже присутствует. Я решил использовать PyTelagramBotAPI (на момент написания этой статьи последняя доступная версия 3.5.1).

Перейдём к первому коду.

Импортируем библиотеку PyTelegramBotAPI.

# -*- coding: utf-8 -*- import telebot
bot = telebot.TeleBot(«523870826:AAF0O8T-e7riRi8m6qlRz4pBKKdh0OfHKj8»)

Напишем простую обработку сообщений с помощью декоратора bot.message_handler.

Поставим бота в режим постоянной обработки информации, приходящей от серверов telegram.

bot.polling(none_stop=True, interval=0)

В переменной message telegram передаёт словарь (map) такого вида:

, ‘date’: None, ‘chat’: < ‘type’: ‘private’, ‘last_name’: None, ‘first_name’: None, ‘username’: None, ‘id’: None, ‘title’: None, ‘all_members_are_administrators’: None, ‘photo’: None, ‘description’: None, ‘invite_link’: None, ‘pinned_message’: None, ‘sticker_set_name’: None, ‘can_set_sticker_set’: None>, ‘forward_from_chat’: None, ‘forward_from’: None, ‘forward_date’: None, ‘reply_to_message’: None, ‘edit_date’: None, ‘author_signature’: None, ‘text’: ‘/start’, ‘entities’: ‘[]’, ‘caption_entities’: None, ‘audio’: None, ‘document’: None, ‘photo’: None, ‘sticker’: None, ‘video’: None, ‘video_note’: None, ‘voice’: None, ‘caption’: None, ‘contact’: None, ‘location’: None, ‘venue’: None, ‘new_chat_member’: None, ‘new_chat_members’: None, ‘left_chat_member’: None, ‘new_chat_title’: None, ‘new_chat_photo’: None, ‘delete_chat_photo’: None, ‘group_chat_created’: None, ‘supergroup_chat_created’: None, ‘channel_chat_created’: None, ‘migrate_to_chat_id’: None, ‘migrate_from_chat_id’: None, ‘pinned_message’: None, ‘invoice’: None, ‘successful_payment’: None>

Также существуют другие декораторы, которые могут принимать аудиофайлы, видео, картинки, документы, геолокацию и т.д.

Конечный код.

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

Для сохранения данных о пользователях решил воспользоваться базой данных sqlite3.

import sqlite3 connection = sqlite3.connect(«database», check_same_thread = True) cursor = connection.cursor() cursor.execute(«CREATE TABLE IF NOT EXISTS Inventory_on (ID INT, ‘Primary weapon’ TEXT, ‘Secondary weapon’ TEXT)») cursor.execute(«CREATE TABLE IF NOT EXISTS Clans (Name TEXT, Points INT)») cursor.execute(«CREATE TABLE IF NOT EXISTS WorkStatus (ID INT, Status INT)») connection.commit() connection.close()

Параллельные процессы запускал с помощью библиотеки threading. Например: функция расчета битв.

import threading threading.Thread(target=name_of_your_function).start()

Дальше всё зависит только от Вашей фантазии.

Где запустить Вашего бота?

Свой собственный ПК не хочется оставлять включенным 24/7, да и не практично это. Поэтому я решил воспользоваться бесплатным сервисом heroku, но меня постигла неудача из-за выбранной мною БД. Оказалось, что при каждом перезапуске бота, heroku удаляет все коммиты sqlite3 за последний сеанс без исключений.

После чего, я решил купить VDS (Virtual Dedicated Server, виртуальный выделенный сервер) – удаленный ПК, на котором выделяется определенная мощность и память под Вас, и к командной строке которого Вам даётся доступ. Чаще всего операционной системой такой машинки будет linux. Плата небольшая – 400 руб./месяц, так что без особых моральных страданий оплатил VDS на основе Debian GNU/Linux и начал разбираться с тем, как мне включить бота на удалённом сервере.

Как же подключаться к VDS?

Есть разные методы, я решил по SSH-соединению через Putty. Скачиваем Putty через официальный сайт и открываем. Вводим IP-address VDS и нажимаем open.

Должно открыться такое окно, где нужно ввести логин и пароль от сервера.

Все вышеупомянутые данные выдаст компания, у которой Вы приобретёте VDS. Далее VDS – сервер.

Как установить на сервер все необходимые Вам языки программирования и библиотеки?

Тут все просто. Введя эти 5 команд в консоль сервера в данной последовательности, Вы установите на сервер python3, setuptools, pip3 и библиотеку pyTelegramBotAPI.

apt-get update apt-get install python3 apt-get install python3-setuptools apt-get install python3-pip pip3 install pyTelegramBotAPI

Все дополнительные библиотеки, которые не входят в основной пакет python3, также необходимо установить по принципу.

pip3 install ‘name_of_site_package’

Как загрузить файлы с моего ПК на сервер?

Для начала создадим папку, в который будем заливать все необходимые файлы. На сервере пройдем в каталог /usr/local/bin и создадим папку bot.

cd /usr/local/bin mkdir bot

У меня на ПК установлен windows, соответственно и команды будут для командной строки windows. Для начала необходимо пройти в каталог, где находится putty.exe.

cd /program files/putty

Далее загружаем bot.py, который находится в каталоге C:UsersIlyaPycharmProjectsBot (нужно подставить Ваш каталог) в каталог на сервере /usr/local/bin/bot.

Как скачать файлы с сервера на ПК?

Так же, как и при загрузке файлов на сервер в командной строке в каталог, где лежит putty.exe. И вводим эту команду, чтобы скачать файл database на рабочий стол Вашего ПК.

Читайте также:
Сколько можно заработать по программе ворк энд тревел

Как запустить бота?

Первый и самый простой вариант – зайти в каталог с исполняемым файлов и прописать python3 bot.py, но тогда при закрытии putty бот будет выключаться.

Второй вариант – запустить бота с помощью screen – модуль, который создаёт параллельные рабочие столы, но тогда бот не будет перезапускаться автоматически в случае падения, а это происходит часто – несколько раз в неделю из-за ночного перезапуска серверов telegram (в 3:00 по МСК).

Третий способ – systemd – cистемный менеджер, демон инициализации других демонов в Linux. Проще говоря, systemd запустит бота и будет перезапускать его в случае падения.

apt-get install systemd
[Unit] Description=Telegram bot ‘Town Wars’ After=syslog.target After=network.target [Service] Type=simple User=root WorkingDirectory=/usr/local/bin/bot ExecStart=/usr/bin/python3 /usr/local/bin/bot/bot.py RestartSec=10 Restart=always [Install] WantedBy=multi-user.target

И загружаем его в нужный каталог:

Далее нужно прописать 4 команды в консоли сервера:

systemctl daemon-reload systemctl enable bot systemctl start bot systemctl status bot

В моём случаи из-за определённых ошибок реализации, а конкретно многопоточности, пришлось переносить функцию для расчёта битв (battle_counter.py) в отдельного демона.

[Unit] Description=Battle counter for telegram bot ‘Town Wars’ After=syslog.target After=network.target [Service] Type=simple User=root WorkingDirectory=/usr/local/bin/bot ExecStart=/usr/bin/python3 /usr/local/bin/bot/battle_counter.py RestartSec=10 Restart=always [Install] WantedBy=multi-user.target

После чего должно появится сообщение примерно такого содержания:

Ваш бот запущен и готов к работе!

БЛАГОДАРНОСТИ

Это был мой первый относительно большой проект и я столкнулся с колоссальным количеством новых для меня проблем. Огромную благодарность хочу выразить Yurii Drake, который помог мне разобраться с ними!

Источник: habr.com

Реализуем развертывание приложения — «Java-проект от А до Я»

“Java-проект от А до Я”: Реализуем развертывание приложения - 1

Всем привет. Продолжаем цикл статей по написанию своего проекта.

Сортируем ветки

Из важного, чтобы не потеряться в ветках и их порядке в репозитории, я решил их переименовать, добавив приставку STEP_ . Например, у нас есть три ветки помимо главной:

  • JRTB-0
  • JRTB-2
  • JRTB-3

Сразу не поймешь, какая за какой должна идти. Поэтому я их переименую следующим образом:

  • STEP_1_JRTB-0 — первый шаг
  • STEP_2_JRTB-2 — второй шаг
  • STEP_3_JRTB-3 — третий шаг

И так далее для следующих статей. Чтобы переименовать ветки, заходим на страницу репозитория, находим плашку branches , переходим по ней:“Java-проект от А до Я”: Реализуем развертывание приложения - 2Под каждой веткой нажимаем на карандашик и переименовываем ветку:“Java-проект от А до Я”: Реализуем развертывание приложения - 3И в результате получим:“Java-проект от А до Я”: Реализуем развертывание приложения - 4Кстати, все, кто подписан на мой телеграм-канал, узнали сразу же, что я переименовал ветки.

Немного о докере

Что такое Docker? Вкратце — это инструмент, с помощью которого можно быстро и безопасно развертывать (деплоить) приложения, создавая для них закрытую инфраструктуру, необходимую только для них. Пока что сложно, я понимаю. В общем и целом докер можно понимать как платформу для разработки, где можно быстро и эффективно работать.

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

Например для Java-приложения нам нужна JRE, чтобы запустить приложение, вот контейнер будет иметь это, нужно будет еще какое-то программное обеспечение — можно добавить это. А может быть, нам нужен Линукс и Tomcat сервлет контейнер. Такое тоже можно будет сделать.

Контейнеры создаются на основе image (образа): то есть, это определенный шаблон в котором написано все необходимое для создания докер контейнера. Как создать этот образ? В нашем случае нам нужно будет создать файл Dockerfile в корне проекта с описанием того, что должно быть в контейнере. Так как мы не хотим где-то показывать токен бота, придется извернуться и передавать его каждый раз, когда мы захотим развертывать приложение. Более детально об этой теме почитать можно здесь и здесь.

Пишем JRTB-13

Нужно настроить быстрый и легкий процесс развертывания (деплоя) нашего приложения на сервер. То есть на машину, которая работает 24/7. За основу возьмем докер. Но задачи в нашем списке, которая бы отвечала за добавление этой функциональности, нет. Как-то я его пропустил при создании. Ничего страшного, сейчас создадим.

Заходим на вкладку создания issue на гитхаб и выбираем Feature Request:“Java-проект от А до Я”: Реализуем развертывание приложения - 5Добавляем описание задачи, критерии его приемки, устанавливаем, к какому проекту этот issue относится и можно создавать новое issue:“Java-проект от А до Я”: Реализуем развертывание приложения - 6Теперь чтобы показать, что задача взята в работу, сменим статус задачи с To do на In Progress:“Java-проект от А до Я”: Реализуем развертывание приложения - 7Это будет сложная статья. Если будут проблемы — пишите в комментариях: я буду следить и отвечать на них в меру сил. Такой будет небольшой Customer Support 😀

Создаем Dockerfile

Что такое докерфайл? Для докера это скрипт (пошаговая инструкция), как создавать образ для докер контейнера. Для работы нашего приложения нужна JDK, причем 11-й версии. То есть, нам нужно найти докер-образ JDK 11 и добавить его в наш образ. Это что-то сродни с тем, как мы добавляем зависимость в помник. Для этого дела у докера есть DockerHub.

Чтобы локально загружать образы, нужно там зарегистрироваться. После регистрации идем искать нам JDK11. Из того, что получилось найти — вот этот контейнер: adoptopenjdk/openjdk11. В описании этого контейнера есть то, что нужно для докерфайла:

FROM adoptopenjdk/openjdk11:ubi RUN mkdir /opt/app COPY japp.jar /opt/app CMD [«java», «-jar», «/opt/app/japp.jar»]

Поправим папку, из которой мы берем jar файл. У нас он находится в target папке после того, как мы запускаем mvn package задачу мавена. Перед тем, как все это делать, на основе обновленной main ветки создаем новую, для нашей задачи: STEP_4_JRTB-13 . Теперь можно работать. В корне проекта создаем файл без расширения Dockerfile и добавим внутрь следующее:

FROM adoptopenjdk/openjdk11:ubi ARG JAR_FILE=target/*.jar COPY $ app.jar ENTRYPOINT [«java»,»-jar»,»/app.jar»]

  • bot.username
  • bot.token
  1. Запускаем баш скрипт.
  2. Баш скрипт запускает docker-compose.
  3. Docker-compose запускает docker контейнер с нашим приложением.
  4. Docker контейнер запускает наше приложение.
Читайте также:
Vozap программа установка на телефон

FROM adoptopenjdk/openjdk11:ubi ARG JAR_FILE=target/*.jar ENV BOT_NAME=test.javarush_community_bot ENV BOT_TOKEN=1375780501:AAE4A6Rz0BSnIGzeu896OjQnjzsMEG6_uso COPY $ app.jar ENTRYPOINT [«java», «-Dbot.username=$», «-Dbot.token=$», «-jar», «/app.jar»]
Видно, что мы добавили две строки и обновил ENTRYPOINT. Строки:
ENV BOT_NAME=test.javarush_community_bot ENV BOT_TOKEN=1375780501:AAE4A6Rz0BSnIGzeu896OjQnjzsMEG6_uso

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

«-Dbot.username=$», «-Dbot.token=$»

Здесь видно, что внутри строки при помощи $<> конструкции будут переданы значения BOT_NAME и BOT_TOKEN. Далее нам нужно научить получать и передавать эти переменные в docker-compose.

Создаем docker-compose.yml

Хорошо бы вам про YAML формат почитать отдельно, а то статья и так уже растет, как на дрожжах. Для нас это просто еще одно описание переменных по типу .properties. Только в пропертях записывается через точку, а в YAML это делается немного красивее. Например, так. Две переменные в .properties: javarush.telegram.bot.name=ivan javarush.telegram.bot.token=pupkin А вот в .yaml (тоже самое что и .yml) будет это так:

javarush: telegram: bot: name: ivan token: pupkin

Второй вариант более красивый и понятный. Пробелы должны быть именно такие, как указаны выше. Как-нибудь переведем наши application.properties и application.yml. Для начала нужно его создать. В корне проекта создаем файл docker-compose.yml и записываем туда следующее:

version: ‘3.1’ services: jrtb: build: context: . environment: — BOT_NAME=$ — BOT_TOKEN=$ restart: always

Первая строка — это версия docker-compose. services: говорит о том, что все следующие строки после этого (будут сдвинуты) — относятся к сервисам, которые мы настраиваем. У нас такой пока только один — java-приложение под названием jrtb . И уже под ним будут все его настройки.

Например, build: context: . говорит о том, что мы будем искать Dockerfile в той же директории, что и docker-compose.yml. А вот секция environment: будет отвечать за то, чтобы мы передали в Dockerfile необходимые переменные среды (environment variables). Как раз то, что нам и нужно. Поэтому ниже мы переменные и передаем. Их docker-compose будет искать в переменных операционной среды сервера.

Добавим их в баш скрипте.

Создаем баш скрипты

И последний шаг — создать баш скрипт. Создаем в корне проекта файл с именем start.sh и пишем туда следующее:

#!/bin/bash # Pull new changes git pull # Prepare Jar mvn clean mvn package # Ensure, that docker-compose stopped docker-compose stop # Add environment variables export BOT_NAME=$1 export BOT_TOKEN=$2 # Start new deployment docker-compose up —build -d

Первая строка нужна для всех баш скриптов: без нее работать не будет. А далее — просто набор команд в терминале, которые нужно выполнить. Я добавил комментарии в каждой команде, поэтому должно быть понятно.

Единственное, что хочется объяснить — это то, что значит $1 и $2. Это две переменные, которые будут переданы в запуске баш скрипта. При помощи команды export они будут добавлены в переменные сервера и считаны уже в docker-compose. Это работает для убунты, для виндоуса, наверно, нет, но я не уверен. Теперь нужно добавить скрипт stop.sh, который будет останавливать работу. В нем будет несколько строк:

#!/bin/bash # Ensure, that docker-compose stopped docker-compose stop # Ensure, that the old application won’t be deployed again. mvn clean

  • Dockerfile — файл для создания образа нашего приложения;
  • docker-compose.yml — файл с настройкой того, как мы будем запускать наши контейнеры;
  • start.sh — баш скрипт для развертывания нашего приложения;
  • stop.sh — баш скрипт для остановки нашего приложения.

# Release Notes ## 0.3.0-SNAPSHOT * JRTB-13: added deployment process to the project ## 0.2.0-SNAPSHOT * JRTB-3: implemented Command pattern for handling Telegram Bot commands ## 0.1.0-SNAPSHOT * JRTB-2: added stub telegram bot * JRTB-0: added SpringBoot skeleton project

И в README добавим новый параграф с описанием того, как деплоить наше приложение:

## Deployment Deployment process as easy as possible: Required software: — terminal for running bash scripts — docker — docker-compose to deploy application, switch to needed branch and run bash script: $ bash start.sh $ $ That’s all.

Разумеется, все пишет на английском. Уже как обычно, в нашей новосозданной ветке STEP_4_JRTB-13 создаем новый коммит с именем: JRTB-13: implement deployment process via docker и делаем пуш. Я перестаю подробно останавливаться на вещах, которые я уже описывал в прошлых статьях. Не вижу смысла повторять одно и тоже. К тому же, кто разобрался и сделал у себя, у того вопросов не возникнет.

Это я о том, как создать новую ветку, как создать коммит, как запушить коммит в репозиторий.

Итог

“Java-проект от А до Я”: Реализуем развертывание приложения - 8

За сегодня я показал тьму новой информации, которую нужно хорошо обдумать и расширить дополнительным чтением. Самое главное: при помощи ОДНОЙ(. ) команды все необходимое для развертывания нашего приложения будет сделано. Это настолько классно, что я даже передать не могу вам.

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

Все, кто подписан на мой телеграм-канал, узнали о деплое бота почти сразу же. Друзья, нравится проект? Ставьте ему звезду! Так он станет более популярным и больше людей смогут узнать о нем и поучиться. Традиционно предлагаю зарегистрироваться на GitHub и подписаться на мой аккаунт, чтобы следить за этой серией и другими моими проектами, которые я веду там.

Теперь мы готовы подключать базу данных. Следующая статья будет бооольшая и в ней мы сделаем все необходимое для работы с БД. Все описание — в JRTB-1.

Источник: javarush.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru