我想尝试使用GCE连接到LINE的Messaging API
介绍
我不喜欢LINE,更倾向于使用Slack的人。然而,我周围有很多人频繁使用LINE。为了与他们一起工作,我制作了一个可以使用/提醒等功能的机器人。
我想这次我想要进行那个示威活动。
很抱歉,我并不是这个领域的专家,所以可能会有很多不足之处,请谅解。(对于我们内部使用的事情,只要有所行动就好,这是你也这样认为吧?)
环境
我们将使用Ubuntu和Node.js。
步骤 (Bù
好的,那么现在我想要写下实际的步骤。
创建一个实例
让我们在Compute Engine上创建一个实例。听说US区域的f1-micro可以一直免费使用一个。在这里我们选择Ubuntu 16.04 LTS。据说硬盘空间免费使用最多可达30GB,所以我们就这样吧。
重点是允许流量通过并设置静态的外部IP。请确保可以进行SSH连接。
安装Node.js、Nginx、Certbot和MongoDB。
请立即连接到实例。
$ sudo apt-get install build-essential nodejs npm -y
$ sudo npm install n -g
$ sudo n lts
$ sudo apt-get purge nodejs npm -y
$ sudo apt autoremove -y
作为参考,在Ubuntu上轻松安装最新的Node.js,我们将安装Node.js LTS版本。如果您不喜欢n,请使用其他工具。
下一个,
$ curl http://nginx.org/keys/nginx_signing.key | sudo apt-key add -
$ VCNAME=`cat /etc/lsb-release | grep DISTRIB_CODENAME | cut -d= -f2` && sudo -E sh -c "echo \"deb http://nginx.org/packages/ubuntu/ $VCNAME nginx\" >> /etc/apt/sources.list"
$ VCNAME=`cat /etc/lsb-release | grep DISTRIB_CODENAME | cut -d= -f2` && sudo -E sh -c "echo \"deb-src http://nginx.org/packages/ubuntu/ $VCNAME nginx\" >> /etc/apt/sources.list"
$ sudo apt-get update
$ sudo apt-get install nginx -y
作为参考,在Ubuntu上安装最新的Nginx。(参考:在Ubuntu上安装最新的nginx-Qiita)
$ sudo apt-get update
$ sudo apt-get install software-properties-common -y
$ sudo add-apt-repository ppa:certbot/certbot -y
$ sudo apt-get update
$ sudo apt-get install python-certbot-nginx -y
作为参考,请在Ubuntu 16.04(xenial)上安装Certbot,但请不要获取证书。由于尚无域名,因此无法执行此操作。
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
$ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
$ sudo apt-get update
$ sudo apt-get install mongodb-org -y
$ sudo systemctl enable mongod
$ sudo systemctl start mongod
在Ubuntu上安装MongoDB社区版。
到此为止,以及未来的部分,视情况而定。
$ sudo reboot
请按照步骤操作,至少不应出现错误。如果遇到问题,请重新启动。
获取一个免费的域名
我会获取一个域名。当然,不一定要免费,但这次我决定使用Freenom。
我已经获取了qiita.ga。
编辑 /etc/nginx/conf.d/default.conf
由于不太了解,所以请把这些作为参考而已。我真希望能得到一位Nespe的朋友的帮助。
$ sudo vim /etc/nginx/conf.d/default.conf
请将第三行的localhost替换为刚刚获取的域名,这里是qiita.ga。
$ sudo certbot --nginx
作为一种证明,最终获得了证书。请努力回答英文问题哦。
這樣應該可以使用https了。對於LINE的Webhook來說,安全性是必需的。
写代码
好吧,让我们开始编码吧。虽然我想说这句话,但是觉得麻烦,所以我准备了一个代码库。虽然叫做“boilerplate”,但实际内容有点乱。
$ git clone https://github.com/shamofu/line-bot-boilerplate.git
$ cd line-bot-boilerplate
$ npm install
在执行代码之前,请填写.env文件。
可以通过以下操作获得MONGODB_URI。
$ mongo
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.3
...
> exit
在这种情况下,请将MONGODB_URI设置为mongodb://127.0.0.1:27017/reminder。
CHANNEL_开头的值是从Messaging API的Channel基本设置中获得的。
CHANNEL_SECRET是基本信息>Channel Secret,CHANNEL_ACCESS_TOKEN是消息发送和接收设置>访问令牌(长期)的值。
好了,趁着浏览设置的机会,我们来设置一下Webhook吧。
在这里,我们将消息发送和接收设置>Webhook URL 设置为https://qiita.ga/line/webhook。即https://(域名)/line/webhook。
启动机器人
那么让我们启动机器人吧!这次我们将使用pm2。
$ sudo npm install pm2 -g
$ sudo pm2 startup
$ sudo pm2 start main.js --watch --name=line-bot
$ sudo pm2 save
现在通过重新启动实例,机器人将自动启动。
只需让Nginx识别该机器人。
$ sudo vim /etc/nginx/conf.d/default.conf
比较之下,
-
- 定义上游
- 设置代理
做吧。 (参考:在Qiita上使用nginx作为反向代理)
首先,放在服务器(server)块的上方。
upstream line-bot {
server localhost:1124;
}
请在下面追加。
然后是第二个。
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
在…的下面,
location /line {
proxy_pass http://line-bot;
}
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
请在下面添加注释。
恭喜!
请添加机器人为好友,然后试着这样和它交流。
/remind
簡単なのだ!
イエオイア!
in 10 seconds
预计在10秒后收到与预期相符的消息。
您可以在第一行指定命令,在最后一行指定日期和时间。
可以使用诸如in an hour | 3/9 | 3:34等等的日期和时间格式。 (参考:chrono-node – npm)
总结
辛苦了,起初可能有些难以理解每个人的意思。
但是,比预想的并不难吧。
希望我的自制机器人可以被朋友们使用!但如果不小心把数据库弄炸了的话…唉,万一发生这种情况的话…