[JAVA] Nginx + Spring Boot Papagei Return LineBot mit VPS gemacht

Ich habe einen LineBot erstellt, der einen Papagei von Nginx + SpringBoot in einer VPS-Umgebung zurückgibt.

Umweltzusammensetzung

・ VPS: Conoha (https://www.conoha.jp/) ・ Betriebssystem: CentOS7 ・ SSL-Zertifikat: Verschlüsseln ・ Nginx 1.12.2 ・ SpringBoot 2.1.6

https-Konvertierung

LineBot-Webhooks sind nur für https-URLs gültig. VPS ist Conoha und meine eigene Domain wurde von einer anderen Domain-Site erworben. Hier werden wir die Erfassungs- und Einstellungsmethode der ursprünglichen Domäne weglassen.

Ich habe das SSL-Zertifikat erhalten, indem ich mich auf Folgendes beziehe. Ich habe Nginx auch im folgenden Artikel installiert.

** Veröffentlichen Sie eine sichere Website mit dem Let 's Encrypt SSL-Zertifikat ** https://knowledge.sakura.ad.jp/5573/

Festlegen und Überprüfen von Linienentwicklern

Öffnen Sie die Grundeinstellungen des Kanals in Line Developers und konfigurieren Sie Einstellungen wie WebHook. Notieren Sie sich das Kanalgeheimnis, da Sie es in einem späteren Schritt verwenden werden. LineDev1.png

Stellen Sie das Zugriffstoken erneut aus und notieren Sie sich das angezeigte Zugriffstoken zur späteren Verwendung. Die Webhook-Übertragung wurde in "Verwenden" geändert. Bitte geben Sie den erworbenen Domainnamen im abgeblendeten Teil der Webhook-URL an. LineDev2.png

Wählen Sie "Nicht verwenden" für die automatische Antwortnachricht. Bitte wählen Sie "Nicht verwenden" für die Begrüßung, wenn Sie einen Freund hinzufügen. LineDev3.png

Erstellen Sie ein Spring Boot-Projekt

  1. Erstellen Sie ein Projekt mit Spring Initializr https://start.spring.io/ ・ Projekt: Gradle-Projekt ・ Sprache: Java ・ Spring Boot: 2.1.6 ・ Projektmetadaten ・ Gruppe: com.example ・ Artefakt: Linebot SpringInitializr.png

  2. Importieren Sie das erstellte Projekt mit STS und [line-bot-java sample (echo)](https://github.com/line/line-bot-sdk-java/blob/master/sample- Kopieren Sie spring-boot-echo / src / main / java / com / example / bot / spring / echo / EchoApplication.java) nach LinebotApplication.java. Zu diesem Zeitpunkt ist die Linebot-Bibliothek nicht enthalten, sodass ein Kompilierungsfehler auftritt, der in einem späteren Schritt behoben wird.

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. Bearbeiten Sie build.gradle. Ich habe den Ausgangszustand in den folgenden geändert und ihn in Jar erstellt.

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. Aktualisieren Sie das Gradle-Projekt Im vorherigen Schritt haben wir Gradle um "line-bot-spring-boot: 2.7.0" erweitert. Aktualisieren Sie daher das Gradle-Projekt und importieren Sie Jar. (Dies eliminiert Java-Kompilierungsfehler.)

Klicken Sie mit der rechten Maustaste auf das Projekt-> Gradle-> Gradle-Projekt aktualisieren GradleUPdate.png

  1. Fügen Sie die folgenden 3 Zeilen zu application.properties von Spring Boot hinzu

src/main/resources/application.properties


line.bot.channelSecret =XXX (Kanalgeheimnis der Linienentwickler)
line.bot.channelToken =XXX (Zugriffstoken für Linienentwickler)
line.bot.handler.path = /callback

Im nächsten Schritt "Verknüpfen von Nginx und Spring Boot" werden auch application.properties bearbeitet, sodass es noch nicht erstellt wird.

Zusammenarbeit zwischen Nginx und Spring Boot

Funktioniert mit Nginx und Spring Boot. Ich habe für die Kooperationsmethode auf Folgendes verwiesen.

** Verwenden Sie nginx, um SSL (HTTPS) im Spring Boot zu aktivieren ** https://qiita.com/keigohtr/items/5b2b423fe0e9da027db6

  1. Die ssl.conf im Artikel wurde wie folgt geändert.

/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. Der Inhalt von application.properties im obigen Artikel wird hinzugefügt. Schließlich sind die Anwendungseigenschaften wie folgt.

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

Bauen Sie mit Gradle Spring Boot auf Jar

Klicken Sie mit der rechten Maustaste auf das Projekt-> Ausführen als-> Gradle Build konnte nicht ausgeführt werden, daher habe ich mit der folgenden Methode von STS zu Jar erstellt

1 Klicken Sie mit der rechten Maustaste auf das Projekt-> Ausführen als-> Konfiguration ausführen ... GradleBuild01.png

  1. Doppelklicken Sie auf Gradle Project-> Select New_configration, geben Sie "Build" in Gradle Tasks: ein, klicken Sie auf Workspalce ... GradleBuild02.png

  2. Wählen Sie mit Projekt auswählen das zu erstellende Projekt aus GradleBuild03.png

  3. Klicken Sie auf Ausführen, wenn der Pfad im Arbeitsverzeichnis festgelegt ist GradleBuild04.png

  4. Wenn der Build erfolgreich ist, wird in build / libs ein JAR generiert. GradleBuild05.png

Starten Sie Spring Boot auf VPS

Laden Sie das erstellte JAR als Serverstandort in das Benutzerverzeichnis (/ home / [Benutzername]) hoch und führen Sie den folgenden Befehl aus, um Spring Boot zu starten.

sudo java -jar linebot-0.0.1-SNAPSHOT.jar

Spring Boot befindet sich im gebooteten Zustand. Die folgende Meldung wird angezeigt. Spring起動.png

Verbindungsbestätigung

Überprüfen Sie die Verbindung der eingestellten Webhook-URL in Line Developers. Wenn die Meldung "Erfolgreich" angezeigt wird, wurden die bisherigen Einstellungen korrekt vorgenommen und die Verbindung von LineBot zu VPS hergestellt. LineBot接続確認.png

Überprüfen Sie mit Line App

Wenn Sie eine Nachricht an einen Kanal senden, der über die Line-App erstellt wurde, wird dieselbe Nachricht zurückgegeben, die Sie gesendet haben. Jetzt haben Sie einen Papageienrückgabebot.

Lineメッセージ確認.png

Recommended Posts

Nginx + Spring Boot Papagei Return LineBot mit VPS gemacht
Starten Sie die Nginx + Spring Boot-Anwendung mit Docker-Compose
Mit Spring Boot herunterladen
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Implementieren Sie GraphQL mit Spring Boot
Beginnen Sie mit Spring Boot
Hallo Welt mit Spring Boot!
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Spring Boot beginnend mit Docker
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Verwenden Sie die Standardauthentifizierung mit Spring Boot
Einführung in Spring Boot x Offene API ~ Offene API, erstellt mit Generationslückenmuster ~
gRPC auf Spring Boot mit grpc-spring-boot-Starter
Erstellen Sie eine App mit Spring Boot 2
Hot Deploy mit Spring Boot-Entwicklung
Datenbankverknüpfung mit doma2 (Spring Boot)
Spring Boot Programmierung mit VS Code
Bis "Hallo Welt" mit Spring Boot
Erstellen Sie eine Anfrage-App mit Spring Boot
Erhalten Sie Validierungsergebnisse mit Spring Boot
Ich habe ein einfaches Suchformular mit Spring Boot + GitHub Search API erstellt.
Erstellen Sie eine App mit Spring Boot
Ich habe GraphQL mit Spring Boot ausprobiert
Beginnend mit Spring Boot 0. Verwenden Sie Spring CLI
Ich habe Flyway mit Spring Boot ausprobiert
Die Nachrichtenkooperation begann mit Spring Boot
[LINE BOT] Ich habe einen Ramen BOT mit Java (Maven) + Heroku + Spring Boot (1) gemacht.
Verarbeitung beim Starten einer Anwendung mit Spring Boot
Senden Sie regelmäßige Benachrichtigungen mit LineNotify + Spring Boot
Führen Sie einen Transaktionsbestätigungstest mit Spring Boot durch
HTTPS mit Spring Boot und Let's Encrypt
Starten Sie die Entwicklung von Webanwendungen mit Spring Boot
Ich habe Lazy Initialization mit Spring Boot 2.2.0 ausprobiert
Implementieren Sie CRUD mit Spring Boot + Thymeleaf + MySQL
Asynchrone Verarbeitung mit Spring Boot unter Verwendung von @Async
Implementieren Sie die Paging-Funktion mit Spring Boot + Thymeleaf
(IntelliJ + gradle) Hallo Welt mit Spring Boot
Verwenden Sie den Cache mit EhCashe 2.x mit Spring Boot
Formularklassenvalidierungstest mit Spring Boot
Führen Sie die WEB-Anwendung mit Spring Boot + Thymeleaf aus
Erreichen Sie die BASIC-Authentifizierung mit Spring Boot + Spring Security
Erstellen Sie eine Website mit Spring Boot + Gradle (jdk1.8.x)
Testen Sie den Controller mit Mock MVC im Spring Boot
Asynchrone Verarbeitung mit regelmäßiger Ausführung in Spring Boot
Bis zur Datenerfassung mit Spring Boot + MyBatis + PostgreSQL
Erstellen Sie mit Spring Boot eine einfache Such-App
Hash-Passwörter mit Spring Boot + Spring Security (mit Salt, mit Stretching)
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
Führen Sie die Scala-Anwendung mit Spring Boot über Gradle aus