- Что такое деплой
- Инсталлируем Vesta Control Panel
- Инсталлируем БД PostgreSQL в Ubuntu
- Инсталлируем Java на Ubuntu
- Настроим Nginx
- Подготовим приложение Java для развертывания
- Деплой приложения Java
При разработке Java-приложений на локальной машине все может казаться простым и понятным. Однако, чтобы приложение стало доступным пользователям, необходимо выполнить его деплой на сервер. Это важный и ответственный процесс, который включает подготовку серверной инфраструктуры, настройку окружения и автоматизацию обновлений.
В этой статье мы рассмотрим основные шаги и инструменты, которые помогут вам без лишних сложностей развернуть Java-приложение, обеспечив его стабильную работу в реальных условиях эксплуатации.
Что такое деплой
Деплой – это процесс развертывания приложения на сервере или другой целевой платформе для его дальнейшего использования пользователями. В контексте разработки программного обеспечения деплой включает в себя перенос программы из среды разработки в рабочую среду, где она будет функционировать в реальном времени.
Деплой обычно состоит из нескольких этапов:
- Подготовка окружения. К ней относится настройка всех необходимых зависимостей, библиотек, баз данных и серверного ПО, чтобы приложение могло корректно функционировать. В случае Java-приложений устанавливается JVM (Java Virtual Machine), веб-сервер, база данных и другие компоненты.
- Сборка приложения. На этом этапе исходный код компилируется и упаковывается в формат, готовый для развертывания. Для Java-приложений это обычно файл с расширением .jar или .war.
- Загрузка на сервер. После подготовки окружения и сборки приложение необходимо перенести на целевую машину – сервер, где оно будет работать. Это может быть локальный сервер, облачная платформа (например, AWS или Google Cloud) или контейнеризированное окружение (например, Docker или Kubernetes).
- Настройка и запуск. Завершающий этап – настройка конфигурационных файлов приложения, например, баз данных или параметров сети, и его запуск. Обычно на этом этапе проводятся тестирования, чтобы убедиться в корректной работе всех функций.
Деплой может выполняться вручную или с использованием специальных инструментов для автоматизации процесса: например, Jenkins, Ansible или GitLab CI/CD. Автоматизация позволяет избежать ошибок и сократить время на развертывание приложения.
Инсталлируем Vesta Control Panel
Для тех, кто предпочитает полный контроль над процессом, доступна ручная установка VestaCP. Вы можете скачать установочный пакет с официального сайта проекта и выбрать только те компоненты, которые вам необходимы. Так вы сможете тонко настроить панель управления под специфические задачи вашего сервера и избежать лишних элементов, которые могут не потребоваться.
Мы уже рассказывали, как это сделать, в инструкции «Установка панели VestaCP», где шаг за шагом описан весь процесс. Следуя ей, вы сможете без труда выполнить установку вручную и настроить панель под свои нужды.
Для начала настройки панели управления VestaCP нам потребуется подключиться к серверу по протоколу SSH. Вы можете сделать это через утилиту Putty, которая поддерживает шифрование для безопасности соединения.
Итак, подключитесь к серверу под пользователем с правами root. После подключения, вы увидите на экране примерно следующее:
Знак «@» отделяет имя пользователя от IP-адреса хоста, к которому вы подключились. В нашем примере это «1.123.45.67», но у вас будет указан ваш реальный IP-адрес сервера.
Теперь обновите систему и установите необходимые пакеты:
После этого перейдите к настройке конфигурации VestaCP. Откройте файл конфигурации, прописав:
Если редактор nano еще не установлен, добавьте его с помощью команды:
Если вам больше подходит редактор vi, вы можете использовать его для редактирования файла:
Добавьте строку в самый конец открывшегося файла конфигурации:
Также замените значение параметра DB_SYSTEM на:
После того как все изменения будут внесены, сохраните файл и перезапустите веб-интерфейс VestaCP. Выйдите из аккаунта и снова войдите, чтобы обновления вступили в силу.
Инсталлируем БД PostgreSQL в Ubuntu
Чтобы начать работу с PostgreSQL на сервере Ubuntu, нам нужно установить саму базу данных и дополнительные компоненты, которые обеспечат удобную работу. Для этого выполните следующую команду:
После успешной установки нужно скачать и настроить конфигурационные файлы для интеграции с панелью управления Vesta. Воспользуйтесь командой для скачивания файла конфигурации:
Далее перезагрузите PostgreSQL, чтобы изменения вступили в силу. Вы можете сделать с помощью одной из двух команд:
ИЛИ
Теперь зайдите в систему под пользователем postgres:
Установить пароль для пользователя postgres так же можно выполнить двумя способами:
Или воспользоваться альтернативным способом:
При вводе команды вам будет предложено задать новый пароль. После этого можно вернуться к пользователю root.
Чтобы зарегистрировать PostgreSQL в панели Vesta, используйте следующую команду:
Теперь необходимо настроить phpPgAdmin для удобной работы с базой данных через веб-интерфейс. Скачайте нужные файлы:
И перезапустите веб-модули для применения изменений:
Инсталлируем Java на Ubuntu
Чтобы запустить тестовый проект, собранный в JAR-файл, на вашем сервере или компьютере, необходимо установить Java. В этом случае подойдет OpenJDK – свободная реализация платформы Java.
Ее можно установить, выполнив следующие команды:
Убедитесь, что Java установлена корректно, и проверьте ее версию:
На экране вы увидите информацию о версии Java, которая должна выглядеть примерно так:
Если по какой-то причине вы установили неправильную версию Java или требуется ее замена, не переживайте – ее легко можно удалить:
После удаления можно установить нужную версию Java заново, следуя тем же шагам, или выбрать другую подходящую версию для ваших задач.
Настроим Nginx
Если вы планируете запускать свои программы через нестандартные порты, вместо стандартного 8080, этот шаг для вас. В нашем примере мы изменим порт в файле application.properties, установив значение server.port=8099. Это позволит программе работать на порту 8099. Порт 80 обычно занят веб-серверами Nginx или Apache, но при желании можно настроить переадресацию с помощью файла .htaccess.
Сначала подключитесь к удаленному серверу через SSH, используя учетную запись root. Далее проверьте, существует ли каталог ранее созданного пользователя:
Вывод системы будет выглядеть примерно так:
ssl.DOMAIN.crt
ssl.DOMAIN.key
ssl.DOMAIN.pem
DOMAIN.apache2.conf
DOMAIN.apache2.ssl.conf
DOMAIN.nginx.conf
DOMAIN.nginx.ssl.conf
Если у вас установлен SSL-сертификат, необходимо настроить перенаправление с HTTP на HTTPS. Для этого откройте конфигурационный файл Nginx:
Где «USERNAME» – имя пользователя, а «DOMAIN» – доменное имя.
В самом конце файла, перед закрывающей скобкой, добавьте строку для перенаправления на HTTPS:
Теперь нужно настроить перенаправление портов. Для этого откройте файл конфигурации для SSL:
В блоке location / в поле proxy_pass укажите порт 8099, как в примере ниже:
proxy_pass https://1.23.45.67:8099;
}
Те же изменения нужно внести в блок location @fallback:
proxy_pass https://1.23.45.67:8099;
}
Внеся все изменения, сохраните файл и выйдите из него. Чтобы новые настройки вступили в силу, перезапустите веб-серверы и процессы:
service vesta restart
service nginx restart
Теперь Nginx настроен, и ваш сервис должен работать через новый порт с поддержкой HTTPS.
Подготовим приложение Java для развертывания
Настройка Java-приложения для развертывания – важный этап, на котором часто могут возникнуть проблемы с конфигурацией. Если стандартные настройки не работают, придется подбирать их вручную.
В нашей инструкции мы будем следовать заранее определенному плану. Исходим из того, что на вашей системе установлена операционная система Windows без дополнительных компонентов. Если некоторые шаги уже выполнены, их можно пропустить:
- Скачайте последнюю версию Git с официального сайта и запустите установку. На каждом шаге жмите Next, пока не завершите процесс.
- Установка Maven аналогична установке Git. Скачайте его с официального сайта и следуйте инструкциям установщика.
- Скачайте файл сертификата (pfx) с сайта, где вы получили SSL-сертификат, и поместите его в каталог проекта. Например, вы можете добавить его в папку src > main > resources. Этот файл необходим для корректной работы приложения через HTTPS.
- Добавьте параметры в файл application.properties. Откройте файл и добавьте следующие строки:
server.ssl.key-store-type=PKCS12 # Метод шифрования
server.ssl.key-store=classpath:namefile.pfx # Путь к файлу pfx, где namefile – имя вашего домена
server.ssl.key-store-password=MyPassword # Пароль к файлу pfx, указанный на сайте, где вы получили сертификат
server.ssl.enabled=true # Включаем SSL
trust.store=classpath:namefile.pfx # Путь к файлу pfx
trust.store.password=MyPassword # Пароль к файлу pfx
log4j.rootLogger=INFO
log4j.logger.org.hibernate.type.descriptor.sql=TRACE
Параметры trust.store помогут решить возможные проблемы с сертификацией.
- Откройте файл pom.xml и внесите следующие зависимости:
<groupID>javax.xml.bind</groupID>
<artifactID>jaxb-api</artifactID>
<version>2.3.0</version>
</dependency>
<dependency>
<groupID>com.sun.xml.bind</groupID>
<artifactID>jaxb-core</artifactID>
<version>2.3.0</version>
</dependency>
<dependency>
<groupID>org.apache.httpcomponents</groupID>
<artifactID>httpclient</artifactID>
</dependency>
- Откройте файл класса WebSecurityConfig и добавьте следующий код для работы с SSL:
private Resource trustStore;
@Value("${trust.store.password}")
private String trustStorePassword;
public RestTemplate restTemplateWithTrustStore(RestTemplateBuilder builder) throws IOException, CertificateException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
SSLContext sslContext = new SSLContextBuilder()
.loadTrustMaterial(trustStore.getURL(), trustStorePassword.toCharArray())
.build();
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext);
HttpClient httpClient = HttpClients.custom()
.setSSLSocketFactory(socketFactory)
.build();
return builder
.requestFactory(() -> new HttpComponentsClientHttpRequestFactory(httpClient))
.build();
}
На этом этапе ваше Java-приложение будет готово к развертыванию, и вы сможете запустить его с настройками для работы через HTTPS.
Деплой приложения Java
Теперь приступаем к самому интересному – развертыванию Java-приложения на сервере. Начнем с создания скрипта, который автоматизирует процесс сборки и деплоя.
Для этого создайте файл deploy.sh и добавьте в него следующие строки:
mvn clean package
echo 'Copy files...'
scp PATH/target/NAMEFILE.jar \
root@IP:/home/USER/web/DOMAIN/public_shtml
echo 'Restart server...'
ssh -t root@IP << EOF
pgrep java | xargs kill -9
nohup java -jar /home/USER/web/DOMAIN/public_shtml/NAMEFILE.jar > /home/USER/web/DOMAIN/log.txt &
EOF
echo 'Bye'
Разберем используемые переменные:
- «PATH» – путь к каталогу, где находится ваш проект.
- «NAMEFILE.jar» – имя JAR-файла с вашим приложением.
- «IP» – IP-адрес вашего сервера, на который будет загружено приложение.
- «USER» – имя пользователя, который создан для работы с сервером.
- «DOMAIN» – доменное имя вашего сайта.
Важно! Лог-файлы, где будут записываться события запуска и работы приложения, находятся по пути /home/USER/web/DOMAIN/log.txt.
Чтобы запустить скрипт, откройте ранее установленный Git Bash или любую другую командную оболочку. Перейдите в каталог, где находится ваше приложение, и выполните команду:
Что произойдет далее:
- Скрипт выполнит команду mvn clean package, которая соберет проект с использованием Maven.
- После успешной сборки файл с приложением будет скопирован на сервер по указанному пути.
- Скрипт автоматически перезапустит сервер, завершив текущий процесс Java и запустив новое приложение через команду nohup java -jar.
В процессе выполнения скрипта система несколько раз запросит у вас пароль для доступа к серверу через SSH и для выполнения операций копирования и перезапуска.
Если все действия выполнены правильно и ошибок не возникло, ваше приложение будет развернуто, и вы сможете открыть его в браузере. Теперь ваше Java-приложение работает на сервере и готово к использованию!