Я пытаюсь создать приложение для университетского проекта. Это приложение Spring Boot maven/tomcat (веб-сайт), которое я закодировал на своем локальном компьютере с помощью STS.
Приложение отлично работает на моем локальном компьютере, то есть я скомпилировал его в файл jar, запустил и вижу его с локального хоста. Ссылки, куки и все остальное работает как положено. Теперь я хочу запустить его в экземпляре виртуальной машины Google Cloud с предустановленным tomcat и статическим IP-адресом, но я совершенно не уверен, как это сделать.
Я попытался использовать scp для передачи файла jar (вместе со всеми ресурсами и классами) в мой экземпляр виртуальной машины и запустил его оттуда. Но когда я пытаюсь убить все процессы tomcat8, запускаю свой файл, мне все равно предлагается классическое «Это работает!» страница, а не мои страницы.
Я очень новичок в этих вещах, поэтому имейте в виду, что я могу слишком упростить процесс. Должен ли я вставлять файлы в какую-то определенную папку? Любое понимание того, как я должен действовать, более чем приветствуется. Спасибо всем за ваше время. ~Майк
Если вы хотите запустить файл .jar
напрямую, выполните следующие действия:
1. scp app.jar <IP>:.
2. cp /home/ubuntu/app.jar /opt/tomcat/webapps/
3. cd /opt/tomcat/bin/ // Assuming tomcat is properly installed with users configured.
4. ./catalina.sh start // Start the tomcat
Приведенной выше настройки должно быть достаточно для развертывания приложения. Если вы отслеживаете журналы запуска Tomcat, вы получите зарегистрированный URL-адрес, для которого было зарегистрировано приложение.
Развертывание tomcat в порядке, но есть лучший способ: использование докера (для пользователей, которые впервые настраивают, шаги могут быть немного запутанными. Я попытаюсь объяснить все шаги, но требуется немного Google, если какой-либо шаг не работает должным образом .)
Следующее решение включает следующие шаги:
1. Install docker on the server.
2. SpringBoot application configuration for containerization on the host machine.
3. GCP configuration on the host machine for pushing the built image to private container repository.
4. Configuration of the server for GCP for pulling the image from private container repository and finally starting the application.
Первый: Установите докер на сервер, используя этот связь
Во-вторых: установка/настройка весеннего загрузочного приложения для развертывания докеров.
а. Вверху вашего pom.xml
после тега <parent>
добавьте следующую метаинформацию о вашем проекте.
<groupId>com.companyName</groupId>
<artifactId>projectArtifact</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Project Name</name>
б. В разделе <build><plugins>
добавьте следующий код:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.9</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<!-- <goal>push</goal> -->
</goals>
</execution>
</executions>
<configuration>
<repository>companyName/${project.artifactId}</repository>
<tag>${project.version}</tag>
<noCache>true</noCache>
<buildArgs>
<JAR_FILE>target/${project.artifactId}-${project.version}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
На предыдущем шаге мы добавили плагин docker в процесс сборки maven, а также добавили метаинформацию о проекте, так что .jar
создается с указанным именем и версией.
В корне проекта создайте Dockerfile
и добавьте следующий контент:
# Use java 8 on bare linux as our base image
FROM openjdk:8-jdk-alpine
# Accepting argument from mvn plugin
ARG JAR_FILE
# Set ENV mode
#ENV STAGE=default
ENV DOCKER=true
# Renaming Jar File
COPY ${JAR_FILE} app.jar
# Starting the application
CMD ["java", "-jar", "/app.jar"]
# For actual prod applications, profiles wrt application.properties are used, but for college project, its ok*(Ignoring for first time configuration)
# CMD ["java", "-Dspring.profiles.active=${STAGE}", "-Dserver.port=6262", "-jar", "/app.jar"]
# Assuming the application port to be 6262. Replace with the appropriate port.
EXPOSE 6262
Теперь необходимая конфигурация на стороне SpringBoot выполнена. Чтобы получить приложение для развертывания, нам нужно сначала собрать файл docker image
. Это можно сделать:
a. cd to root of the project.
b. docker build -t companyname/projectname .
Вышеупомянутый шаг создаст образ. Созданные изображения можно просмотреть по docker images
Теперь нам нужно настроить со стороны GCP: (Не будет описательным. Можно найти много хороших статей, пожалуйста, погуглите.)
а. Настройка реестра контейнеров GCP, а также gcloud-cli
на вашем ноутбуке (это немного сложно для начинающих пользователей, но немного исследований лучше, чем печатать прямой ответ)
После настройки gcloud-cli
отправьте образ в реестр.
а. докер образы б. скопируйте идентификатор изображения встроенного образа. в. docker tag /: (Пожалуйста, просмотрите документацию GCP, например) д. докер толчок /:
Теперь мы отправили собранный образ в частный репозиторий докеров.
ssh на сервер: (Этот шаг можно выполнить несколькими способами, и для реальных случаев использования идеально подходит инструмент конвейера CICD.) Здесь мы будем следовать простому методу.
a. Configure gcloud-cli with new IAM user in the server.
b. Login to gcloud repository
c. docker pull <asia.gcr.io/gcp-project-id>/<project>:<tag>
d. docker run -p <hostport>:<applicationport(6262 here)> --name container_name -d <asia.gcr.io/gcp-project-id>/<project>:<tag>
Вышеупомянутый шаг должен запустить контейнер докера, и должно быть запущено приложение SpringBoot. Отсюда можно настроить обратный прокси-сервер, если это необходимо, или обновить настройки брандмауэра, чтобы трафик мог быть доставлен на указанный порт.
Я понимаю, это немного сложно и запутанно, но я полагаю, что вам поможет много исследований. Однажды познакомившись с docker
, gcloud-cli
, это больше не будет сбивать с толку. Дайте мне знать, если требуется какой-либо шаг в деталях.
Есть много онлайн-ресурсов, чтобы узнать, как это сделать. На YouTube есть хорошие видео. У Google есть учебники. В Qwiklabs есть лабораторные работы, которые проведут вас через каждый шаг. Нам не нужно дублировать это в Stackoverflow. Инвестируйте время, чтобы учиться. Чтобы настроить виртуальную машину, установить Java, управлять брандмауэрами, безопасностью и т. д., нужно знать, как это сделать. Если у вас возникнут проблемы с программированием, вернитесь и задайте вопрос. Прочитайте это, чтобы знать, как задавать вопросы: stackoverflow.com/help/как спросить