在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证书,发布一个安全的网站
线上开发者的设置和确认



创建SpringBoot项目

在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编译错误。)

在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文件。





在VPS上启动SpringBoot。
将创建的jar文件上传到服务器的用户目录(/home/[用户名]),然后执行以下命令以启动Spring Boot。
sudo java -jar linebot-0.0.1-SNAPSHOT.jar

确认连接

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