前回まででOSインストールとSSHポート変更ができました。
さて、お次は
・ルーターの設定
・無料ドメインの取得
・無料SSL証明書の取得
です。
なんで外部から参照できないとダメなの?
徐々に話がそれていって、本来の目的を忘れてしまいそうなので、もう一度おさらいしておきます。
なんでラズパイが必要になったのか、というと、、、
それは、LINEでの投稿をGoogle Homeにしゃべらせることが目的でした。
ってことは、LINEとラズパイを繋がないといけない。
そのためにはLINEからWebhookでラズパイにメッセージを渡してあげる必要があります。
渡す元はLINE developersからですが、
渡す先はラズパイのWebhookなのでhttpかhttpsで待ち受けないといけません。(LINEのwebhookはhttps)
となると、ポート443を開けてあげないといけない。
なので、外部からアクセスできないといけないんです。
そうなると、ルーターで443のポートを開けてあげないといけない。
で、ルーターのマニュアル読んで443と80を開けてあげてください。
ちなみに443はhttpsのために、80は証明書取得のために開ける必要があります。
なんでドメイン取って証明書も必要なの?
いや別にngrokでいいんですが、、、
実は別で外部公開したいものが出てきたんです。。。
それは、、、
次回以降に詳細を説明しますが、homeassisitantというスマートホーム統合環境を構築したいんです。
実は、これまで紹介してきた、
・スマートリモコン
・スマートコンセント
・anova
などなど、多数のiot機器を一括で管理できる環境なんです。
しかも、それぞれ中華サーバを介さなくても、なんです。
なので、ドメイン取得と証明書を個別に入れるんです。
でもまそんな難しくないので大丈夫。
ラズパイで無料ドメインを取得する
まとめてくれているサイトがあったのでこれまた他力本願です。
・freenumでtkドメインを取得して
・CloudFlareでダイナミックDNS(DDNS)を構築します
DNS更新用のshellはcrontabでもいいですが、システム全体の話なので /etc/cron.d/ の下に置いたほうがいいかもです。
これで無料ドメインでDDNS環境ができました。
無料SSL証明書を取得する
こちらもよくある無料証明書の取得ですが、ラズパイに特化した記事があったので、、、
で、追加で証明書の自動更新をcronで設定します。
1 2 3 4 5 | SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 0 */1 * * * root /usr/local/bin/update-cf-ddns.sh 0 3 * * * root perl -e 'sleep int(rand(3600))' && /usr/bin/certbot-auto renew --apache && service apache2 reload |
これでOK。
apacheのバーチャルホストを設定する
最後にapacheのバーチャルホストを設定します。
さっきも書きましたが、メインでhomeassistantなるものを動かしたいので、LINEのwebhookにはサブドメインを使いたいと思います。
なので、apacheでバーチャルホストを設定します。
こんな感じ。ここでは「line」というサブドメインを振りました。
あ、そうするとサブドメインでSSLを取らないといけないですね。
なので、サブドメインでも無料証明書を取って置いてください。
1つ目のVirtualHostは最初から設定されているやつです。その設定内の証明書ファイル設定2カ所を下記のように変更します。
2つ目のVirtualHostはこの後入れるhomeassistantの設定です。
3つ目がLINEとの連携のための設定です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <VirtualHost _default_:443> : SSLCertificateFile /etc/letsencrypt/live/取得したドメイン/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/取得したドメイン/privkey.pem : </VirtualHost> <VirtualHost *:443> ServerAdmin root@localhost ServerName 取得したドメイン ProxyPreserveHost On ProxyRequests off ProxyPass / http://localhost:8123/ ProxyPassReverse / http://localhost:8123/ ProxyPass /api/websocket ws://localhost:8123/api/websocket ProxyPassReverse /api/websocket ws://localhost:8123/api/websocket RewriteEngine on RewriteCond %{HTTP:Upgrade} =websocket [NC] RewriteRule /(.*) ws://localhost:8123/$1 [P,L] RewriteCond %{HTTP:Upgrade} !=websocket [NC] RewriteRule /(.*) http://localhost:8123/$1 [P,L] </VirtualHost> <VirtualHost *:443> ServerAdmin root@localhost ServerName line.取得したドメイン SSLCertificateFile /etc/letsencrypt/live/line.取得したドメイン/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/line.取得したドメイン/privkey.pem ProxyPreserveHost On ProxyRequests off ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ RewriteEngine on RewriteRule /(.*) http://localhost:8080/$1 [P,L] </VirtualHost> </IfModule> |
これでやっとLINEと連携するためのプログラムを動かす環境が整いました。
次はようやく、LINEと連携します。