在VPS上创建一个Nginx+SpringBoot的复读LineBot

我在VPS环境中创建了使用Nginx + SpringBoot的对话机器人,可进行自动回复的LineBot。

环境组成

・VPS:Conoha(https://www.conoha.jp/)
・操作系统:CentOS7
・SSL证书:Let’s Encrypt
・Nginx版本:1.12.2
・SpringBoot版本:2.1.6

进行HTTPS加密

LineBot的Webhook只能使用https的URL才有效。
VPS使用的是Conoha,并且已在另一個網站上取得了獨立的域名。
在這裡不再討論獨立域名的取得和設定方法。

我已根据以下参考内容获取了SSL证书。
并在以下文章中安装了Nginx。

使用Let’s Encrypt的SSL证书,发布一个安全的网站

线上开发者的设置和确认

LineDev1.png
LineDev2.png
LineDev3.png

创建SpringBoot项目

SpringInitializr.png

在STS中,导入您创建的项目,并将line-bot-java示例(回声)复制到LinebotApplication.java文件中。
由于此时尚未安装linebot库,因此会发生编译错误,但之后的步骤会予以解决。

@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);
    }
}

3. 编辑 build.gradle 文件。将其从初始状态修改为以下内容,并进行 Jar 构建。

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'
    }
}

请刷新Gradle项目。
由于在前一步骤中已经将”line-bot-spring-boot:2.7.0″添加到了Gradle中,所以请刷新Gradle项目并导入Jar文件。(这样就能消除Java编译错误。)

GradleUPdate.png

在Spring Boot的application.properties文件中添加以下3行:
※请不要用单引号括住channelSecret和channelToken。

line.bot.channelSecret = XXX(Line DevelopersのChannnelSecret)
line.bot.channelToken = XXX(Line Developersのアクセストークン)
line.bot.handler.path = /callback

在接下来的步骤「Nginx与Spring Boot的协作」中,还需要编辑application.properties,因此还不需要进行构建。

Nginx与SpringBoot的结合

我們將Nginx和Spring Boot進行連接。
連接方法參考如下。

如果要在Spring Boot中启用SSL(HTTPS),请使用nginx

以下是对文章中的ssl.conf文件进行的更改:
请将example.com替换为您独立的域名。

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;
    }
}

2. 我在上述文章中添加了application.properties的内容。
最终的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

使用Gradle将SpringBoot项目构建为Jar文件。

由于无法通过单击项目 -> 运行为 -> Gradle构建来执行此操作,我使用以下方法通过STS将构建转换成Jar文件。

GradleBuild01.png
GradleBuild02.png
GradleBuild03.png
GradleBuild04.png
GradleBuild05.png

在VPS上启动SpringBoot。

将创建的jar文件上传到服务器的用户目录(/home/[用户名]),然后执行以下命令以启动Spring Boot。

sudo java -jar linebot-0.0.1-SNAPSHOT.jar
Spring起動.png

确认连接

LineBot接続確認.png

在Line应用中查看

当您通过Line应用向创建的频道发送消息时,将收到与发送的消息相同的回复消息。
这样就可以创建一个模仿鹦鹉的机器人。

Lineメッセージ確認.png
bannerAds