Как использовать экземпляр виртуальной машины Google Cloud в качестве сервера, если у меня уже есть исполняемый файл .jar?

Я пытаюсь создать приложение для университетского проекта. Это приложение Spring Boot maven/tomcat (веб-сайт), которое я закодировал на своем локальном компьютере с помощью STS.

Приложение отлично работает на моем локальном компьютере, то есть я скомпилировал его в файл jar, запустил и вижу его с локального хоста. Ссылки, куки и все остальное работает как положено. Теперь я хочу запустить его в экземпляре виртуальной машины Google Cloud с предустановленным tomcat и статическим IP-адресом, но я совершенно не уверен, как это сделать.

Я попытался использовать scp для передачи файла jar (вместе со всеми ресурсами и классами) в мой экземпляр виртуальной машины и запустил его оттуда. Но когда я пытаюсь убить все процессы tomcat8, запускаю свой файл, мне все равно предлагается классическое «Это работает!» страница, а не мои страницы.

Я очень новичок в этих вещах, поэтому имейте в виду, что я могу слишком упростить процесс. Должен ли я вставлять файлы в какую-то определенную папку? Любое понимание того, как я должен действовать, более чем приветствуется. Спасибо всем за ваше время. ~Майк

Есть много онлайн-ресурсов, чтобы узнать, как это сделать. На YouTube есть хорошие видео. У Google есть учебники. В Qwiklabs есть лабораторные работы, которые проведут вас через каждый шаг. Нам не нужно дублировать это в Stackoverflow. Инвестируйте время, чтобы учиться. Чтобы настроить виртуальную машину, установить Java, управлять брандмауэрами, безопасностью и т. д., нужно знать, как это сделать. Если у вас возникнут проблемы с программированием, вернитесь и задайте вопрос. Прочитайте это, чтобы знать, как задавать вопросы: stackoverflow.com/help/как спросить

John Hanley 22.05.2019 00:00
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
81
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы хотите запустить файл .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.

Первый: Установите докер на сервер, используя этот связь

Во-вторых: установка/настройка весеннего загрузочного приложения для развертывания докеров.

  1. Установите подключаемый модуль Spotify Docker для Maven, чтобы образ Docker создавался во время процесса сборки maven, и мы также добавим сюда необходимую конфигурацию Docker для Maven.

а. Вверху вашего 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 создается с указанным именем и версией.

  1. В корне проекта создайте 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

  1. Теперь нам нужно настроить со стороны GCP: (Не будет описательным. Можно найти много хороших статей, пожалуйста, погуглите.)

    а. Настройка реестра контейнеров GCP, а также gcloud-cli на вашем ноутбуке (это немного сложно для начинающих пользователей, но немного исследований лучше, чем печатать прямой ответ)

  2. После настройки gcloud-cli отправьте образ в реестр.

    а. докер образы б. скопируйте идентификатор изображения встроенного образа. в. docker tag /: (Пожалуйста, просмотрите документацию GCP, например) д. докер толчок /:

Теперь мы отправили собранный образ в частный репозиторий докеров.

  1. 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, это больше не будет сбивать с толку. Дайте мне знать, если требуется какой-либо шаг в деталях.

Другие вопросы по теме