[JAVA] Nginx + Spring Boot Parrot Return LineBot fait avec VPS

J'ai créé un LineBot qui renvoie un perroquet de Nginx + SpringBoot dans un environnement VPS.

Composition environnementale

・ VPS: Conoha (https://www.conoha.jp/) ・ Système d'exploitation: CentOS7 ・ Certificat SSL: Let's Encrypt ・ Nginx 1.12.2 ・ SpringBoot 2.1.6

conversion https

Les webhooks LineBot ne sont valides que pour les URL https. VPS est Conoha, et mon propre domaine a été acquis à partir d'un autre site de domaine. Ici, nous omettons la méthode d'acquisition et la méthode de paramétrage du domaine d'origine.

J'ai obtenu le certificat SSL en me référant à ce qui suit. J'ai également installé Nginx dans l'article ci-dessous.

** Publiez un site Web sécurisé avec le certificat SSL Let's Encrypt ** https://knowledge.sakura.ad.jp/5573/

Définition et vérification des développeurs de ligne

Ouvrez les paramètres de base du canal dans Line Developers et configurez les paramètres tels que WebHook. Notez le secret du canal, car vous l'utiliserez ultérieurement. LineDev1.png

Réémettez le jeton d'accès et notez le jeton d'accès affiché pour une utilisation ultérieure. La transmission Webhook a été remplacée par "utiliser" Veuillez spécifier le nom de domaine acquis dans la partie grisée de l'URL du Webhook. LineDev2.png

Sélectionnez "Ne pas utiliser" pour le message de réponse automatique. Veuillez sélectionner "Ne pas utiliser" pour le message d'accueil lors de l'ajout d'un ami. LineDev3.png

Créer un projet Spring Boot

  1. Créez un projet avec Spring Initializr https://start.spring.io/ ・ Projet: Projet Gradle ・ Langue: Java ・ Botte de printemps: 2.1.6 ・ Métadonnées du projet ・ Groupe: com.example ・ Artefact: linebot SpringInitializr.png

  2. Importez le projet créé avec STS et [line-bot-java sample (echo)](https://github.com/line/line-bot-sdk-java/blob/master/sample- Copiez spring-boot-echo / src / main / java / com / example / bot / spring / echo / EchoApplication.java) dans LinebotApplication.java. À ce stade, la bibliothèque linebot n'est pas incluse, donc une erreur de compilation se produira, qui sera résolue dans une étape ultérieure.

com/example/linebot/LinebotApplication.java


@SpringBootApplication
@LineMessageHandler
public class LinebotApplication {

	public static void main(String[] args) {
		SpringApplication.run(LinebotApplication.class, args);
	}

    @EventMapping
    public Message handleTextMessageEvent(MessageEvent<TextMessageContent> event) {
        System.out.println("event: " + event);
        final String originalMessageText = event.getMessage().getText();
        return new TextMessage(originalMessageText);
    }

    @EventMapping
    public void handleDefaultMessageEvent(Event event) {
        System.out.println("event: " + event);
    }
}
  1. Modifiez build.gradle. J'ai changé l'état initial pour le suivant et l'ai construit dans Jar.

build.gradle


plugins {
	id 'org.springframework.boot' version '2.1.6.RELEASE'
	id 'java'
}

apply plugin: 'io.spring.dependency-management'
apply plugin: 'java'

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	compile 'com.linecorp.bot:line-bot-spring-boot:2.7.0'
}

jar {
    manifest {
        attributes 'Main-Class': 'LinebotApplication'
    }
}
  1. Actualiser le projet Gradle Depuis que nous avons ajouté "line-bot-spring-boot: 2.7.0" à Gradle à l'étape précédente, actualisez le projet Gradle et importez Jar. (Cela élimine les erreurs de compilation Java.)

Faites un clic droit sur le projet-> Gradle-> Refresh Gradle Project GradleUPdate.png

  1. Ajoutez les 3 lignes suivantes à application.properties de Spring Boot

src/main/resources/application.properties


line.bot.channelSecret =XXX (Channnel Secret of Line Developers)
line.bot.channelToken =XXX (jeton d'accès des développeurs de ligne)
line.bot.handler.path = /callback

L'étape suivante "Lier Nginx et Spring Boot" éditera également application.properties, donc il ne sera pas encore construit.

Coopération entre Nginx et Spring Boot

Fonctionne avec Nginx et Spring Boot. J'ai évoqué ce qui suit pour la méthode de coopération.

** Utilisez nginx pour activer SSL (HTTPS) dans Spring Boot ** https://qiita.com/keigohtr/items/5b2b423fe0e9da027db6

  1. Le ssl.conf de l'article a été modifié comme suit.

/etc/nginx/conf.d/ssl.conf


server {
    listen       80;
    listen       [::]:80;
    return       301 https://$host$request_uri;
}

upstream spring-boot {
    server 127.0.0.1:8443;
}

server {
    listen      443 ssl;
    listen      [::]:443 ssl;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl         on;
    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!DSS;

    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    resolver     8.8.8.8;
    add_header   Strict-Transport-Security 'max-age=31536000; includeSubDomains;';

    server_name  example.com;
    location / {
        proxy_pass    http://spring-boot;
    }
}
  1. Le contenu de application.properties dans l'article ci-dessus est ajouté. Enfin, application.properties sera comme suit.

src/main/resources/application.properties


line.bot.channelSecret = XXX
line.bot.channelToken = XXX
line.bot.handler.path = /callback

server.port=8443
#server.ssl.key-store=keystore.p12
#server.ssl.key-store-password=mypassword
#server.ssl.keyStoreType=PKCS12
#server.ssl.keyAlias=tomcat
endpoints.enabled=false
management.add-application-context-header=false

Construisez Spring Boot sur Jar avec Gradle

Cliquez avec le bouton droit sur le projet-> Exécuter en tant que-> Gradle Build n'a pas pu être fait, j'ai donc construit de STS à Jar par la méthode suivante

1 Faites un clic droit sur le projet -> Exécuter en tant que -> Exécuter la configuration ... GradleBuild01.png

  1. Double-cliquez sur Projet Gradle-> Sélectionnez New_configration, entrez "build" dans Gradle Tasks:, cliquez sur Workspalce ... GradleBuild02.png

  2. Sélectionnez le projet à construire avec Select Project GradleBuild03.png

  3. Cliquez sur Exécuter lorsque le chemin est défini dans le répertoire de travail GradleBuild04.png

  4. Si la construction réussit, un fichier jar sera généré dans build / libs. GradleBuild05.png

Lancer Spring Boot sur VPS

Téléchargez le fichier jar créé dans le répertoire utilisateur (/ home / [nom d'utilisateur]) en tant qu'emplacement du serveur et exécutez la commande suivante pour démarrer Spring Boot.

sudo java -jar linebot-0.0.1-SNAPSHOT.jar

Spring Boot est à l'état démarré avec le message suivant affiché. Spring起動.png

Confirmation de connexion

Vérifiez la connexion de l'URL Webhook définie dans Line Developers. Si le message «Successful» s'affiche, les réglages ont été effectués correctement jusqu'à présent et la connexion entre LineBot et VPS a été établie. LineBot接続確認.png

Vérifier avec l'application Line

Lorsque vous envoyez un message à un canal créé à partir de l'application Line, le même message que vous avez envoyé sera renvoyé. Vous avez maintenant un robot de retour de perroquet.

Lineメッセージ確認.png

Recommended Posts

Nginx + Spring Boot Parrot Return LineBot fait avec VPS
Lancez l'application Nginx + Spring Boot avec docker-compose
Télécharger avec Spring Boot
Générer un code à barres avec Spring Boot
Hello World avec Spring Boot
Implémenter GraphQL avec Spring Boot
Démarrez avec Spring Boot
Bonjour tout le monde avec Spring Boot!
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Spring Boot à partir de Docker
Hello World avec Spring Boot
Définir des cookies avec Spring Boot
Utiliser Spring JDBC avec Spring Boot
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
Créer un micro service avec Spring Boot
Envoyer du courrier avec Spring Boot
Utiliser l'authentification de base avec Spring Boot
Introduction à Spring Boot x Open API ~ Open API créée avec le modèle d'écart de génération ~
gRPC sur Spring Boot avec grpc-spring-boot-starter
Créez une application avec Spring Boot 2
Déploiement à chaud avec le développement Spring Boot
Liaison de base de données avec doma2 (Spring boot)
Programmation Spring Boot avec VS Code
Jusqu'à "Hello World" avec Spring Boot
Créer une application d'enquête avec Spring Boot
Obtenez des résultats de validation avec Spring Boot
J'ai créé un formulaire de recherche simple avec Spring Boot + GitHub Search API.
Créez une application avec Spring Boot
J'ai essayé GraphQL avec Spring Boot
À partir de Spring Boot 0. Utilisez Spring CLI
J'ai essayé Flyway avec Spring Boot
La coopération des messages a commencé avec Spring Boot
[LINE BOT] J'ai créé un Ramen BOT avec Java (Maven) + Heroku + Spring Boot (1)
Traitement lors du démarrage d'une application avec Spring Boot
Envoyez des notifications régulières avec LineNotify + Spring Boot
Effectuer un test de confirmation de transaction avec Spring Boot
HTTPS avec Spring Boot et Let's Encrypt
Démarrez le développement d'applications Web avec Spring Boot
J'ai essayé l'initialisation paresseuse avec Spring Boot 2.2.0
Implémenter CRUD avec Spring Boot + Thymeleaf + MySQL
Traitement asynchrone avec Spring Boot en utilisant @Async
Implémenter la fonction de pagination avec Spring Boot + Thymeleaf
(IntelliJ + gradle) Hello World avec Spring Boot
Utiliser le cache avec EhCashe 2.x avec Spring Boot
Test de validation de classe de formulaire avec Spring Boot
Exécutez l'application WEB avec Spring Boot + Thymeleaf
Obtenez une authentification BASIC avec Spring Boot + Spring Security
Créez un site Web avec Spring Boot + Gradle (jdk1.8.x)
Testez le contrôleur avec Mock MVC dans Spring Boot
Traitement asynchrone avec exécution régulière dans Spring Boot
Jusqu'à l'acquisition de données avec Spring Boot + MyBatis + PostgreSQL
Créez une application de recherche simple avec Spring Boot
Hash des mots de passe avec Spring Boot + Spring Security (avec sel, avec étirement)
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
Exécutez l'application Scala avec Spring Boot via Gradle