[JAVA] Stellen Sie die von Spring Boot erstellte Anwendung für Heroku (öffentlich) bereit ①

Einführung

Die von SpringBoot erstellte Anwendung funktionierte wie erwartet in der lokalen Umgebung, und danach machte ich nur eine Pause, um sie in die Produktionsumgebung hochzuladen und zu veröffentlichen, aber ich war doppelt so süchtig danach, wie ich es mir vorgestellt hatte ...

Nachdem wir es endlich veröffentlicht haben, schauen wir uns an, was wir getan haben, um es in Heroku zu veröffentlichen.

Ich hoffe, dieser Artikel ist hilfreich für alle anderen als mich, die Probleme bei der Bereitstellung mit Heroku haben.

Umgebung

OS: macOS Catalina 10.15.6 JDK:14.0.1 Spring Boot 2.3.3 jquery 3.3.1-1 bootstrap 4.2.1 maven eclipse

Informationen zur erstellten Anwendung

Der Autor erstellte eine CRUD-Anwendung mit Spring MVC unter Bezugnahme auf "[Einführung, um es nicht zu bereuen] Spring zerlegt ein neues Buch". Die in der Anwendung implementierten Hauptfunktionen sind wie folgt.

· Einloggen Ausloggen ・ Registrierung / Rückzug neuer Mitglieder ・ Registrierungsinformationen aktualisieren ・ Inhaltssuche Erstellen Sie Bildschirme mit thymeleaf for Template Engine und Bootstrap for CSS Framework

Ich werde den erstellten Controller und die HTML-Datei in diesem Artikel nicht berühren. Möglicherweise stolpern Sie über die Bereitstellung in Heroku und fragen sich, ob Sie es von Grund auf neu erstellen müssen, aber das ist nicht erforderlich.

① Registrierung der Mitgliedschaft bei Heroku / Installation von Heroku CLI

Bitte lesen Sie den folgenden Artikel, um sich als Mitglied von Heroku zu registrieren. https://blog.cloud-acct.com/posts/u-heroku-deploy-intro/

↓ Sie können sich unten als Mitglied registrieren. https://signup.heroku.com/login

Installieren Sie dann die Heroku-CLI. Stellen Sie sicher, dass Sie es installieren, da es vom Terminalbetrieb bereitgestellt wird. Das Folgende ist für Mac.

 brew tap heroku/brew && brew install heroku

Bitte überprüfen Sie nach der Installation die Version zur Bestätigung.

$ heroku --version
heroku/7.46.2 darwin-x64 node-v12.16.2

② Erstellen Sie "Procfile" und "system.properties"

Erstellen Sie eine Datei namens Procfile, die den Befehl definiert, der auf Heroku im Stammverzeichnis ausgeführt werden soll. Ohne dies wird bei der Bereitstellung in Heroku "code = H14 desc =" Keine Webprozesse ausgeführt "" angezeigt. Ein Fehler ist aufgetreten und die Anwendung kann nicht ausgeführt werden.

In Procfile ist "P" ein Großbuchstabe und es wird keine Erweiterung hinzugefügt.

Der Autor hat Herokus Java-Beispielprojekt mit dem folgenden Befehl geklont: Ich habe den Inhalt im Stammverzeichnis umgeschrieben und verwendet.

git clone https://github.com/heroku/java-getting-started.git

Procfile ist diese Datei in der folgenden Abbildung. Beispiel "Heroku Java Beispielprojekt" スクリーンショット 2020-10-28 0.59.39.png

Schreiben Sie den Inhalt des Procfile wie unten gezeigt

web: java -Dserver.port=$PORT -jar target/Beliebige Zeichenfolge-0.0.1-SNAPSHOT.jar

Ich werde in der Reihenfolge von links erklären.

Teil 1 "Web" Dies ist ein Prozesstyp namens "Web". Die Heroku-Anwendung führt mehrere virtuelle Maschinen auf "unterschiedliche Weise" aus. Der "Prozesstyp" gibt an, wie dies verschoben werden soll. Das Procfile beschreibt die Einstellungen für den Prozesstyp zeilenweise. Beschreiben Sie den Namen des Prozesstyps, fügen Sie: ein und beschreiben Sie dann den Befehl zum Festlegen der einzelnen Prozesstypen.

Stellen Sie sicher, dass Sie den Prozesstyp "Web" einstellen. Wenn nicht festgelegt, verarbeitet die virtuelle Maschine keine HTTP-Anforderungen.

Teil 2 "Java" Wie ich vergessen habe, ist die rechte Seite von "web:" der Befehl "java -jar 〇〇.jar", wenn eine JAR-Datei mit Java ausgeführt wird.

Referenz: https://teratail.com/questions/91621

Teil 3 "-D"

Nach dem offiziellen Dokument "45. Heroku" Stellen Sie das SpringBoot-Argument "-D" als Eigenschaft zur Verfügung, auf die über die Spring Environment-Instanz zugegriffen werden kann

Es scheint eine Bedeutung zu geben ...

Teil 4 "server.port = $ PORT" Festlegen des Server-HTTP-Ports. $ PORT enthält die von Heroku PaaS zugewiesenen Umgebungsvariablen.

Teil 5 "-jar Ziel / beliebige Zeichenfolge -0.0.1-SNAPSHOT.jar" Wie ich später erläutern werde, wird beim Erstellen eines Umzugs "beliebige Zeichenfolge -0.0.1-SNAPSHOT.jar" im Ordner "target" direkt unter dem Stammverzeichnis erstellt. "Ziel- / beliebige Zeichenfolge -0.0.1-SNAPSHOT.jar" ist "beliebige Zeichenfolge -0.0.1-SNAPSHOT.jar im Ordner" Ziel "", nicht wahr?

Der Name der JAR-Datei gilt für die Informationen, die im Versions-Tag und im Artefakt-ID-Tag von pom.xml enthalten sind. Die obige "beliebige Zeichenfolge" ist die im Artefakt-ID-Tag beschriebene Zeichenfolge.

Im folgenden Beispiel wird "hoge-0.0.1-SNAPSHOT.jar" erstellt. Beschreiben Sie beim Erstellen des Inhalts in Procfile die Zeichenfolge im Tag arifactId in einer beliebigen Zeichenfolge.

pom.xml


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.3.3.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>

    <!--Die Informationen in den unteren beiden Zeilen werden als Dateiname wiedergegeben-->
	<artifactId>hoge</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<name>hoge</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>14</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.hamcrest</groupId>
			<artifactId>hamcrest</artifactId>
		</dependency>

Erstellen Sie als Nächstes "system.properties" wie unten gezeigt.

Diese Datei gibt die Java-Version an. Da der Autor JDK 14.0.1 verwendet, wird es als 14 beschrieben. Bitte schreiben Sie es entsprechend Ihrer Version um.

system.properties


java.runtime.version=14

Speichern Sie direkt unter den Stammverzeichnissen "Procfile" und "system.properties".

root/
 ├system.properties
 ├Procfile
 ├mvnw
 ├mvnw.cmd
 ├pom.xml
 ├target/
 ├src/
 ├docs/
 └README.md

Referenz Offizielles Dokument (Englisch): https://docs.spring.io/spring-boot/docs/0.0.10.BUILD-SNAPSHOT/reference/htmlsingle/ Offizielles Dokument (Japanisch) "2.3. Heroku": https://spring.pleiades.io/spring-boot/docs/current/reference/html/deployment.html

Über das Profil: https://creepfablic.site/2019/06/15/heroku-procfile-matome/ Über "Web": http://info-i.net/heroku-ps

③ "Webapp-Runner" und "Maven-Compiler-Plugin" für Abhängigkeiten

Fügen Sie "webapp-running" zu pom.xml hinzu.

Webapp Runner ist eine Launcher-Anwendung, die Tomcat intern startet. Es ist erforderlich, die Anwendung auf Heroku auszuführen.

pom.xml


<plugin>
       <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals><goal>copy</goal></goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>com.heroku</groupId>
                                <artifactId>webapp-runner</artifactId>
                                <version>9.0.30.0</version>
                                <destFileName>webapp-runner.jar</destFileName>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
            	</execution>
            </executions>
</plugin>

Fügen Sie "maven-compiler-plugin" zu pom.xml hinzu. Wenn ich dies in meiner Umgebung nicht hinzugefügt habe, wurde zum Zeitpunkt der Bereitstellung der folgende Fehlercode an die Heroku-Konsole ausgegeben.

Dies scheint ein Fehler zu sein, der auftritt, wenn maven versucht, auf einer älteren Java-Version als der JDK-Version des vom "maven-compiler-plugin" angegebenen Projekts auszuführen. Es liegt eine Versionsinkongruenz vor.

Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project app: Fatal error compiling: invalid target release: 11 -> [Help 1]

Quelle und Ziel sind Optionen zur Kompilierungszeit, aber innerhalb dieses Tags geben Sie die Version von jdk an.

Übrigens gibt "source" die Version des zu akzeptierenden Quellcodes an, und "target" gibt die JDK-Version der Klassendatei an, die nach Abschluss der Kompilierung erstellt wird. Ich setze "Quelle" und "Ziel" auf "1.8".

Als ich versuchte, es auf "14" zu setzen, gingen die Fehler weiter und ich konnte keine Lösung finden ... Wenn Sie "1.8" einstellen, funktioniert es aus irgendeinem Grund problemlos und es besteht Raum für weitere Untersuchungen.

pom.xml


<build>
	    <plugins>
			<plugin>
	            <groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
			<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

Das Folgende ist eine Zusammenfassung der hinzugefügten Abhängigkeiten.

pom.xml


<build>
	    <plugins>
			<plugin>
	            <groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
			<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals><goal>copy</goal></goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>com.heroku</groupId>
                                <artifactId>webapp-runner</artifactId>
                                <version>9.0.30.0</version>
                                <destFileName>webapp-runner.jar</destFileName>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
            	</execution>
            </executions>
        	</plugin>
		</plugins>
	</build>

Vergessen Sie nicht, das Projekt zu aktualisieren.

Referenz Informationen zu "Web App Runner": https://codezine.jp/article/detail/8187 Version "Webapp Runner": https://mvnrepository.com/artifact/com.heroku/webapp-runner Informationen zu "Webapp Runner" (offizielles Dokument): https://devcenter.heroku.com/articles/java-webapp-runner Über "Fehler beim Ausführen des Ziels org.apache.maven.plugins: maven-compiler-plugin": https://python5.com/q/laifarhi Informationen zu "Schwerwiegender Fehler beim Kompilieren: ungültige Zielversion: x.x": https://qiita.com/gishi_yama/items/67e4c12ae90ad34e652b Informationen zu "Quelloption X wird derzeit nicht unterstützt": https://qiita.com/opengl-8080/items/bb32732f9aa5cb3495d2 Über "Ziel" und "Quelle": http://dodododo.jp/java/javase_6_docs_ja/technotes/tools/solaris/javac.html

Stellen Sie die von Spring Boot erstellte Anwendung für Heroku bereit (öffentlich). Fahren Sie fort mit ... ↓ ② https://qiita.com/hiroki1994/items/72a52f2139c1088c623b

Recommended Posts

Stellen Sie die von Spring Boot erstellte Anwendung für Heroku (öffentlich) bereit ②
Stellen Sie die von Spring Boot erstellte Anwendung für Heroku (öffentlich) bereit ①
WAR die WEB-Anwendung per Spring Boot und stellen Sie sie auf dem Tomcat-Server bereit
Stellen Sie Spring Boot-Anwendungen für Heroku bereit, ohne die Heroku-CLI zu verwenden
[Java] Stellen Sie die Spring Boot-Anwendung für den Azure App Service bereit
Stellen Sie das Spring Boot-Projekt in XAMPP für Tomcat bereit
Die Geschichte der Erhöhung der Spring Boot 1.5-Serie auf die 2.1-Serie
Stellen Sie die Spring Boot-Anwendung für Elastic Beanstalk bereit
◆ Rufen Sie die von Spring Boot erstellte API von React ab
[Spring Boot] So verweisen Sie auf die Eigenschaftendatei
Melden Sie sich bei Spring Boot-Webanwendungen auf der Microsoft ID-Plattform an
So legen Sie Umgebungsvariablen in der Eigenschaftendatei der Spring-Boot-Anwendung fest
Frühlingsstiefel + Heroku Postgres
Schritte zur Bereitstellung in Heroku
Spring Boot 2.3 Verfügbarkeit von Anwendungen
05. Ich habe versucht, die Quelle von Spring Boot zu löschen
Ich habe versucht, die Kapazität von Spring Boot zu reduzieren
Booten nach Umgebung mit Spring Boot of Maven
Die Geschichte der Erhöhung von Spring Boot von 1.5 auf 2.1 Serie Teil2
Einführung in Spring Boot ② ~ AOP ~
CICS-Java-Anwendung ausführen- (4) Spring Boot-App
Stellen Sie die Anwendung auf WildFly bereit
Einführung in Spring Boot Teil 1
Stellen Sie Ihre Anwendung mithilfe des Cloud Toolkit Maven-Plugins für EDAS bereit
[Rails / Heroku / MySQL] So setzen Sie die Datenbank der Rails-App auf Heroku zurück
Was ich bei der Migration von der Spring Boot 1.4-Serie zur 2.0-Serie getan habe
Was ich bei der Migration von der Spring Boot 1.5-Serie zur 2.0-Serie getan habe
Ich möchte die Standardfehlermeldung von Spring Boot steuern
Ich konnte die Docker + Laravel + MySQL App für Heroku bereitstellen!
Spring Boot-Anwendungsentwicklung in Eclipse
Überprüfungspunkte für den Spring Boot-Anwendungscode
Spring Boot zum ersten Mal
Hot Deploy mit Spring Boot-Entwicklung
Erstellen Sie eine Anfrage-App mit Spring Boot
Implementieren Sie die Spring Boot-Anwendung in Gradle
Verwendung von ModelMapper (Spring Boot)
Rüsten Sie den Federstiefel von der 1.5-Serie auf die 2.0-Serie auf
Stellen Sie Rails on Docker für Heroku bereit
Stellen Sie die SpringBoot-Anwendung in AWS EC2 bereit
So wenden Sie Thymeleaf-Änderungen sofort mit #Spring Boot + maven auf den Browser an
[Spring Boot] Ich habe untersucht, wie die Nachbearbeitung der empfangenen Anforderung implementiert werden kann.
Untersuchen Sie den Inhalt der WAR-Datei, die von dem von Spring Initializr erstellten Projekt generiert wurde
Schritte zum Ausführen von Spring Boot beziehen sich auf die Werte in der Eigenschaftendatei
Java-Anfänger haben versucht, mit Spring Boot eine einfache Webanwendung zu erstellen
Automatische Bereitstellung von in Java entwickelten Webanwendungen mit Jenkins [Spring Boot App Edition]
Ich habe Docker verwendet, um die Vorlage zu verfestigen, die mit Spring Boot entwickelt werden soll.
[Java] Stellen Sie eine mit Eclipse + Maven + Ontology mit Heroku erstellte Webanwendung bereit
[Für den internen Gebrauch] Für diejenigen, die dem Spring Boot-Projekt zugewiesen sind (im Aufbau)
Bereitstellen einer Node.js-Anwendung auf einer ECS-Instanz mithilfe des Cloud Toolkit
Verarbeitung beim Starten einer Anwendung mit Spring Boot
[Einführung in Spring Boot] Überprüfung der Formularvalidierung
Mit Docker auf Heroku bereitstellen (Rails 6, MySQL)
Schritte zum Veröffentlichen einer Anwendung auf Heroku
Webanwendung soll erstellt werden (Bearbeitung)
Starten Sie die Entwicklung von Webanwendungen mit Spring Boot
Bereitstellen für Heroku [Ruby on Rails] Anfänger
Änderungen bei der Migration von Spring Boot 1.5 auf Spring Boot 2.0
Starten Sie die Nginx + Spring Boot-Anwendung mit Docker-Compose