Можно ли запустить Spring-приложение на удаленном хосте с локального?
У меня есть какой-то удаленный хост, на котором я хочу запустить Spring-приложение, приложение лежит на локальном хосте, т.е. я хочу с локальной машины взять исходники и запустить на удаленной машине с возможностью дебага в локальное IDE. Как-то же в крупных компаниях делают дебаг(трассировка та же), не думаю, что у машин их сотрудников хватило вычислительной мощности. Мне интересно, как это делается?
P.S. Я предполагаю, что можно сделать два репозитория, один для прода, другой для дебага, т.е. коммитишь в дебаг репу, когда тебе нужно что-то проверить, дженкинс на удаленной машине, это видит, подсасывает изменения, запускает приложения, а я просто подключается через IDE, но выглядит немного костыльно.
Ответы (1 шт):
Сделать это несложно, но нужно иметь ввиду, что протокол JPDA, который используется для взаимодействия IDE и JVM, плохо оптимизирован для работы по сети (по крайней мере для java 8 и ниже) и работать сама отладка будет ну очень медленно.
В предположении, что у нас локально и на сервере у нас unix делается это так.
- сборка артефакта, который можем запустить
- копирование на удаленный сервер
- собственно запуск
- присоединение отладчика
Сборка
Проще всего, конечно, использовать gradle или мавен и собрать uberjar. В IDE всегда есть возможность запустить сборку gradle или maven.
Копирование
Тут можно использовать scp, ftp или sftp. Это будет одна команда типа такой (при условии, что сконфигурирована аутентификация с использованием ключей):
scp build/target/my-app.jar [email protected]:/home/myuser/my-app.jar
В IDE опять же есть возможность запустить команду или скрипт штатным способом. В Intellij:

Запуск
Тут проще всего запустить команду через ssh, при этом создав еще и ssh-тунель:
ssh -L5005:localhost:5005 [email protected] 'java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar /home/myuser/my-app.jar'
Придется, конечно, решить несколько проблем:
- нужно передать конфигурацию приложению. Тут зависит от реализации самого приложения. Или сначала сконфигурировать файл или файлы на сервере или передавать в переменных окружения или в system properties при запуске
java. - приложение может требовать каких-то ресурсов, например, БД. Это нужно будет либо сконфигурировать заранее либо запускать не просто
java, а более сложный скрипт.
Отладка
В IDE выбираем вариант запуска Remote Debug и указываем соединяться к локальному хосту. Через ssh соединение будет происходить с удаленным хостом.