Мне 43 года и я профессиональный юрист. Неуемная интеллектуальная энергия и неудовлетворенность основной профессией 2,5 года назад привели меня в IT. Да-да, вот так – взрослая тетя с гуманитарным образованием решила попробовать себя на ниве программирования и замахнулась аж на такой язык как… JAVA! Замахнулась, переквалифицировалась на дистанционных курсах одного крупного рогатого скота образовательного ресурса и, поскольку прагматичная жажда наживы необходимость зарабатывать на кусок хлеба с маслом здесь и сейчас не дает ей возможности оставить основное место работы и уйти на неведомые просторы для it-специалиста, решила совместить опыт юриста и знания java-разработчика.  Оглянувшись по сторонам и не встретив направленных на меня глаз, я поняла – все эти глаза устремлены в гаджеты! Месседжеры и социальные сети правят умами. Значит, надо действовать через них. И тут я вспомнила, что самый частый юридический вопрос, с которым ко мне обращаются друзья/знакомые – это просьба дать ту или иную форму документа (договора, расписки, заявления, доверенности и т.д.). Эврика! – нужна несложная мобильная программа с формами самых востребованных документов, чтобы их оставалось просто скачать и наполнить необходимыми сведениями. И тут самым коротким путем к конечному пользователю мне представился telegram-бот. Поскольку на курсах таким тонкостям не учили, вооружившись статьями и видеороликами из всемирной паутины, закатав рукава я принялась создавать свою первую «взрослую» программу-помощника человечеству! Про регистрацию бота через BotFather, структуру кода и возможности Telegram Bot Api создано достаточно статей и видео-уроков, чтобы новичок самостоятельно написал программу, прекрасно функционирующую в среде разработки (у меня это IntelliJ IDEA Community Edition).  Но вот с какими трудностями я столкнулась после того, как мой бот стал отвечать на команды и успешно присылать в чат формы документов: Бот должен сохранять посетителей в базе данных для последующего использования статистики его востребованности независимо от того, на каком оборудовании этот бот запущен; Бот должен жить сам по себе, не завися от работоспособности и активности моего ноутбука. Да, есть Docker, который позволит собрать программу со всеми зависимостями и взаимодействиями с другими приложениями. Но, как новичку, использование Dockerа в такой простой программе как telegram-бот мне показалось несопоставимо сложно (особенно, если учесть специфику Windows 10 Home (кто знает, о чем речь, тот поймет, как «устают ноги в танцах с бубнами» при установке Docker на эту операционную систему). Поэтому нужен был какой-то более просто инструмент.  Трудности были также в вопросе деплоя и запуска программы – основная масса статей и инструкций, помогающих новичку дать независимую жизнь своему боту, касается ботов, написанных на Python, а также посвящены платформам Heroku и DigitalOcean hosting, которые с марта 2022 года практически недоступны российскому пользователю (если через VPN доступ к самим ресурсам еще возможен, то оплатить их услуги во сто крат сложнее, чем установить Docker на Windows 10 Home). Для решения своих проблем я решила использовать один из хостингов, без проблем функционирующих в России, поддерживающих использование баз данных MySQL и управление ими, а также предоставляющий в аренду виртуальный VPS, куда можно выгрузить и запустить своего бота! Для создания исполняемого jar-файла (для запуска его на виртуальных ресурсах), я использовала плагин Apache Assembly (build моего файла pom.xml):  Процесс выгрузки telegram-бота на VPS (после регистрации и создания виртуального сервера Ubuntu 22.04 с SSL-сертификатом):  1. Для общения с VPS установить клиент удалённого доступа (у меня - PuTTY) , открыть его и подключиться к своему серверу. Все требуемые данные для входа предоставляются провайдером после аренды VPS (в т.ч. присылаются на электронную почту).  2. В открывшемся терминале ввести имя пользователя и пароль. Установить необходимые пакеты, введя команды: Для обновления: apt update Для установки нужного пакета Java (в моем в проекте использована 11-я версия): apt-get install openjdk-11-jdk.  Для проверки, установилась ли нужная версия, ввести: java -version. Для установки утилиты screen (консольная утилита, позволяющая в действующей SSH сессии открывать виртуальные терминалы, чтобы после завершения удалённого подключения бот продолжал работать в независимом режиме): install screen. Перенести бот на сервер: для передачи на сервер файлов бота установить FTP-клиент (у меня – FileZilla), в котором активироваться (данные для входа те же, что предоставил провайдер для сервера),   после чего полностью перенести всю директорию с приложением в root (вместе с исполняемым jar-файлом)        5. Запустить бота на сервере: в терминале PuTTY выполнить команду, создающую screen, который будет поддерживать непрерывную работу приложения: screen -S docBot (где docBot - имя директории с проектом). в этом скрине перейти в директорию, где расположен исполняемый jar-файл: cd /root/docBot/out/artifacts/docBot_jar, запустить jar-файл, для чего ввести: java -jar docBot.jar В случае успеха в терминале PuTTY отобразятся те же процессы, что и в консоли среды разработки. После можно выйти из клиента.  Отдельно следует обратить внимание на такой нюанс: функционал моего бота был основан на отправке пользователю готовых форм документов в формате word. Такие формы хранились в соответствующей папке в директории /src/main/resources/… После переноса бота на удаленный сервер и его запуска, при кажущейся беспроблемной самостоятельной жизни программы у меня перестали отправлять файлы пользователю, вместо этого в терминале PuTTY стала выдаваться ошибка: "I/O exception (java.io.FileNotFoundException) caught when processing request to {s}->https://api.telegram.org:443: src/main/resources/… (No such file or directory)" При этом в среде разработки все по-прежнему функционировало без проблем.  За пару часов кипящего мозга ко мне пришло озарение, что «ларчик открывается очень просто»: поскольку директорию с ботом мы перенесли в root сервера, путь к файлам изменился, и необходимо внести соответствующие корректировки в тех местах кода, где указан путь к файлам (у меня это были классы пакета handler, содержащие в наименовании «… PathsConst.java», где в константе, определяющей начало пути до файла, я дополнительно указала расположение «/root/docBot/src/…»).  Пересобрала бот, перезалила его на сервер через все тот же FileZilla, закрыла предыдущий screen (сперва использовала команду screen -ls, чтобы найти имя сеанса, который хочу закрыть, после чего ввела команду screen -X -S "sessionname" quit), открыла новый и запустила jar-файл обновленного бота. И, вуаля, все чудесным образом работает уже какой день. Выпуская своего бота в большой мир из маленького мира среды разработки на ноутбуке я поняла, что самым простым в его рождении было – это написание кода. На курсах нас не учили, как коду воплотиться во что-то завершенное и обрести самостоятельность. Пройдя пошаговый путь от разработки до деплоя я захотела поделиться с другими новичками результатами этого пути, которые может быть опытному программисту покажутся смешными и ничего не стоящими, но когда трудности возникают на пути джуниора, они ему кажутся порой непреодолимыми препятствиями, о которые бьешься, ломаешь копья и либо все бросаешь, либо рушишь эти преграды и, окрепнув, идешь дальше.  В конце концов без статей других энтузиастов и альтруистов для таких it-малышей как я не было бы и моего бота)). Если интересно, код бота с демонстрацией функционала выложен: GitHub. Адрес бота: Формы документов.