[JAVA] Déployez l'application créée par Spring Boot sur Heroku (public) ①

introduction

L'application créée par SpringBoot fonctionnait comme prévu dans l'environnement local, et je prenais une pause pour la télécharger dans l'environnement de production et simplement la publier, mais j'en étais accro deux fois plus que je l'imaginais ...

Maintenant que nous l'avons finalement publié, jetons un coup d'œil à ce que nous avons fait pour le publier sur Heroku.

J'espère que cet article sera utile à toute personne autre que moi qui a des difficultés à se déployer avec Heroku.

environnement

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

À propos de l'application créée

L'auteur a créé une application CRUD avec Spring MVC en se référant à "[Introduction à ne pas regretter] Spring demantling new book". Les principales fonctions implémentées dans l'application sont les suivantes.

・ Connexion / déconnexion ・ Inscription / retrait d'un nouveau membre ・ Mettre à jour les informations d'enregistrement ・ Recherche de contenu Créer des écrans à l'aide de thymeleaf pour le moteur de modèle et Bootstrap pour le framework CSS

Je ne parlerai pas du contrôleur créé et du fichier html dans cet article. Vous êtes peut-être tombé sur le déploiement sur Heroku et vous vous demandez si vous devez le recréer à partir de zéro, mais ce n'est pas nécessaire.

① Inscription de membre à Heroku / Installation de Heroku CLI

Veuillez vous référer à l'article ci-dessous pour vous inscrire en tant que membre d'Heroku. https://blog.cloud-acct.com/posts/u-heroku-deploy-intro/

↓ Vous pouvez vous inscrire en tant que membre ci-dessous. https://signup.heroku.com/login

Ensuite, installez la CLI Heroku. Assurez-vous de l'installer car il sera déployé par opération de terminal. Ce qui suit est pour mac.

 brew tap heroku/brew && brew install heroku

Après l'installation, veuillez vérifier la version pour confirmation.

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

② Créez "Procfile" et "system.properties"

Créez un fichier appelé Procfile qui définit la commande à exécuter sur Heroku sous le répertoire racine. Sans cela, lors du déploiement sur Heroku, il est dit "code = H14 desc =" Aucun processus Web en cours d'exécution "" Une erreur s'est produite et l'application ne peut pas être exécutée.

Dans Procfile, "P" est une majuscule et aucune extension n'est ajoutée.

L'auteur a cloné l'exemple de projet Java d'heroku avec la commande suivante, J'ai réécrit le contenu dans le répertoire racine et l'ai utilisé.

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

Procfile est ce fichier dans la figure ci-dessous. Exemple «exemple de projet heroku Java» スクリーンショット 2020-10-28 0.59.39.png

Écrivez le contenu du Procfile comme indiqué ci-dessous

web: java -Dserver.port=$PORT -jar target/Chaîne de caractères arbitraire-0.0.1-SNAPSHOT.jar

Je vais expliquer dans l'ordre à partir de la gauche.

Partie 1 "Web" Il s'agit d'un type de processus appelé "Web". L'application Heroku exécute plusieurs machines virtuelles de «différentes manières», Le "type de processus" spécifie comment déplacer cela. Le Procfile décrit les paramètres du type de processus ligne par ligne. Décrivez le nom du type de processus, insérez:, puis décrivez la commande pour définir chaque type de processus.

Assurez-vous de définir le type de processus "Web". S'il n'est pas défini, la machine virtuelle ne traitera pas les requêtes HTTP.

Partie 2 "java" Comme j'ai oublié, le côté droit de "web:" est la commande "java -jar 〇〇.jar" lors de l'exécution d'un fichier jar avec java.

Référence: https://teratail.com/questions/91621

Partie 3 "-D"

Selon le document officiel "45. Heroku" Rendre l'argument SpringBoot "-D" disponible en tant que propriété accessible à partir de l'instance Spring Environment

Il semble y avoir un sens ...

Partie 4 "server.port = $ PORT" Définition du port HTTP du serveur. $ PORT contient les variables d'environnement assignées par Heroku PaaS.

Partie 5 "-jar target / chaîne de caractères arbitraires -0.0.1-SNAPSHOT.jar" Comme je l'expliquerai plus tard, lorsque vous effectuez une construction de déplacement, "une chaîne de caractères arbitraire -0.0.1-SNAPSHOT.jar" est créée dans le dossier "cible" directement sous le répertoire racine. "Chaîne de caractères cible / arbitraire -0.0.1-SNAPSHOT.jar" est "chaîne de caractères arbitraire -0.0.1-SNAPSHOT.jar dans le dossier" cible "", n'est-ce pas?

En ce qui concerne le nom du fichier jar, cela s'applique aux informations contenues dans la balise de version et la balise artifactId de pom.xml. La "chaîne de caractères arbitraires" ci-dessus est la chaîne de caractères décrite dans la balise artifactId.

Dans l'exemple ci-dessous, "hoge-0.0.1-SNAPSHOT.jar" est créé. Lors de la création du contenu dans Procfile, veuillez décrire la chaîne de caractères dans la balise artifactId dans n'importe quelle chaîne de caractères.

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>

    <!--Les informations des deux dernières lignes sont reflétées comme le nom du fichier-->
	<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>

Ensuite, créez "system.properties" comme indiqué ci-dessous.

Ce fichier spécifie la version java. Puisque l'auteur utilise JDK 14.0.1, il est décrit comme 14. Veuillez le réécrire en fonction de votre version.

system.properties


java.runtime.version=14

Stocker directement sous les répertoires racine "Procfile" et "system.properties".

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

référence Document officiel (anglais): https://docs.spring.io/spring-boot/docs/0.0.10.BUILD-SNAPSHOT/reference/htmlsingle/ Document officiel (japonais) "2.3. Heroku": https://spring.pleiades.io/spring-boot/docs/current/reference/html/deployment.html

À propos du profil: https://creepfablic.site/2019/06/15/heroku-procfile-matome/ À propos du "web": http://info-i.net/heroku-ps

③ "webapp-runner" et "maven-compiler-plugin" pour les dépendances

Ajoutez "webapp-runner" à pom.xml.

Webapp Runner est une application de lancement qui lance Tomcat en interne. Il est nécessaire pour exécuter l'application sur Heroku.

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>

Ajoutez "maven-compiler-plugin" à pom.xml. Dans mon environnement, si je n'ai pas ajouté cela, le code d'erreur suivant a été généré sur la console Heroku au moment du déploiement.

Cela semble être une erreur qui se produit lorsque maven essaie de s'exécuter sur une version plus ancienne de Java que la version JDK du projet spécifié par "maven-compiler-plugin". Il existe une incompatibilité de version.

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]

source et cible sont des options de compilation, mais dans cette balise, vous spécifiez la version de jdk.

À propos, "source" spécifie la version du code source à accepter, et "cible" spécifie la version jdk du fichier de classe créé lorsque la compilation est terminée. J'ai mis «source» et «cible» sur «1,8».

Lorsque j'ai essayé de le régler sur "14", les erreurs ont continué et je n'ai pas trouvé de solution ... Si vous le réglez sur "1.8", cela fonctionne sans aucun problème pour une raison quelconque, et il y a de la place pour une enquête plus approfondie.

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>

Voici un résumé des dépendances ajoutées.

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>

N'oubliez pas de mettre à jour le projet.

référence À propos de "Web app Runner": https://codezine.jp/article/detail/8187 Version "Webapp Runner": https://mvnrepository.com/artifact/com.heroku/webapp-runner À propos de "Webapp Runner" (document officiel): https://devcenter.heroku.com/articles/java-webapp-runner À propos de "Impossible d'exécuter l'objectif org.apache.maven.plugins: maven-compiler-plugin": https://python5.com/q/laifarhi À propos de «Erreur fatale lors de la compilation: version cible non valide: x.x»: https://qiita.com/gishi_yama/items/67e4c12ae90ad34e652b À propos de «L'option source X n'est actuellement pas prise en charge»: https://qiita.com/opengl-8080/items/bb32732f9aa5cb3495d2 À propos de "cible" et "source": http://dodododo.jp/java/javase_6_docs_ja/technotes/tools/solaris/javac.html

Déployez l'application créée par Spring Boot sur Heroku (public) Continuez vers ② ... ↓ ② https://qiita.com/hiroki1994/items/72a52f2139c1088c623b

Recommended Posts

Déployez l'application créée par Spring Boot sur Heroku (public) ②
Déployez l'application créée par Spring Boot sur Heroku (public) ①
WAR l'application WEB par Spring Boot et la déployer sur le serveur Tomcat
Déployez des applications Spring Boot sur Heroku sans utiliser la CLI Heroku
[Java] Déployer l'application Spring Boot sur Azure App Service
Déployer le projet Spring Boot sur Tomcat dans XAMPP
L'histoire de la montée de la série Spring Boot 1.5 à la série 2.1
Déployer l'application Spring Boot sur Elastic Beanstalk
◆ Obtenez l'API créée par Spring Boot à partir de React
[Spring Boot] Comment se référer au fichier de propriétés
Connectez-vous aux applications Web Spring Boot sur la plate-forme Microsoft ID
Comment définir des variables d'environnement dans le fichier de propriétés de l'application Spring Boot
Botte de printemps + Heroku Postgres
Étapes de déploiement sur Heroku
Disponibilité de l'application Spring Boot 2.3
05. J'ai essayé de supprimer la source de Spring Boot
J'ai essayé de réduire la capacité de Spring Boot
Comment démarrer par environnement avec Spring Boot de Maven
L'histoire de la montée de Spring Boot de la série 1.5 à la série 2.1 part2
Introduction à Spring Boot ② ~ AOP ~
Application Java CICS-Run - (4) Application Spring Boot
Déployer l'application sur WildFly
Introduction à Spring Boot, partie 1
Déployez votre application sur EDAS à l'aide du plugin Cloud Toolkit Maven
[Rails / Heroku / MySQL] Comment réinitialiser la base de données de l'application Rails sur Heroku
Ce que j'ai fait lors de la migration de la série Spring Boot 1.4 vers la série 2.0
Ce que j'ai fait lors de la migration de la série Spring Boot 1.5 vers la série 2.0
Je veux contrôler le message d'erreur par défaut de Spring Boot
J'ai pu déployer l'application Docker + laravel + MySQL sur Heroku!
Développement d'applications Spring Boot dans Eclipse
Points de révision du code de l'application Spring Boot
Spring Boot pour la première fois
Déploiement à chaud avec le développement Spring Boot
Créer une application d'enquête avec Spring Boot
Implémenter l'application Spring Boot dans Gradle
Comment utiliser ModelMapper (Spring boot)
Mise à niveau de la botte à ressort de la série 1.5 à la série 2.0
Déployer des rails sur Docker vers heroku
Déployer l'application SpringBoot sur AWS EC2
Comment appliquer immédiatement les modifications de Thymeleaf au navigateur avec #Spring Boot + maven
[Spring Boot] J'ai étudié comment implémenter le post-traitement de la demande reçue.
Examiner le contenu du fichier WAR généré par le projet créé par Spring Initializr
Étapes pour rendre Spring Boot capable de faire référence à la valeur dans le fichier de propriétés
Un débutant Java a essayé de créer une application Web simple à l'aide de Spring Boot
Déployer automatiquement des applications Web développées en Java à l'aide de Jenkins [Spring Boot App Edition]
J'ai utilisé Docker pour solidifier le modèle à développer avec Spring Boot.
[Java] Déployer une application Web créée avec Eclipse + Maven + Ontology avec Heroku
[Pour usage interne] Pour ceux affectés au projet Spring Boot (en construction)
Déployer une application Node.js sur une instance ECS à l'aide du Cloud Toolkit
Traitement lors du démarrage d'une application avec Spring Boot
[Introduction à Spring Boot] Vérification de la validation du formulaire
Déployer sur heroku avec Docker (Rails 6, MySQL)
Étapes pour publier une application sur Heroku
Application Web dont la création est prévue (édition)
Démarrez le développement d'applications Web avec Spring Boot
Déployer sur Heroku [Ruby on Rails] Débutant
Modifications lors de la migration de Spring Boot 1.5 vers Spring Boot 2.0
Lancez l'application Nginx + Spring Boot avec docker-compose