さくらインターネットでLINE bot作った時につまづいたこと
再度同じことをする時のために、最短で進められるようにつまづいたことを書き留めておきます。
LINEコンソールでwebhookのURLを登録するときにSSL化が必要
すでにあるさくらインターネットのサーバ内で、なんでもいいので独自ドメインのサブドメインでも、無料ドメインでもをフォルダに紐付けようとしたが、サブドメインの発行限度に引っかかってしまった。
仕方なく、テスト用で使っているフォルダに入れ子でフォルダを作ったのだが、SSL化されていないとwebhookに登録できない。
さくらインターネットでは、無料ドメインや初期ドメインは SSL化できない。
無料ドメインは発行限度がこれまたある。
独自ドメインのサブドメインをSSL化する時は、コンソールのドメイン管理のところから「SSL」というボタンを押すとできるが、引っ掛けなのか有料のSSL化方法が目立つように表示されるので注意が必要。
無料の方法(Let's encrypt一択)もここから設定できる。
Composerのインストール
LINE bot開発に不可欠な、LINE社が提供しているSDK(linecorp/line-bot-sdk)をcomposerでインストールしようとするのだが、さくらインターネットにはデフォルトでComposerが入っていないので入れる必要がある。
これは検索すると一発で方法が出る。
curl -sS https://getcomposer.org/installer | php
これで完了。
php composer.phar
で、ComposerのAAが出てきたらOK。
Composerのコマンドが使えない
よし! composer require <package名>
と思ったら、コマンドがないと怒られる。
こちらは、composer.pharの場所をルートからのパスで指定してやることで回避できる。
php /home/ユーザ名/www/・・・/composer.phar require linecorp/line-bot-sdk
こんな感じにすればcomposerコマンドを使える。
ext-socketsがないと怒られる
上のsdkをインストールするコマンドを叩くと、ext-socketsがないと怒られる。(エラー内容は下記)
Your requirements could not be resolved to an installable set of packages. Problem 1 - Root composer.json requires linecorp/line-bot-sdk ^7.1 -> satisfiable by linecorp/line-bot-sdk[7.1.0]. - linecorp/line-bot-sdk 7.1.0 requires ext-sockets * -> it is missing from your system. Install or enable PHP's sockets extension. To enable extensions, verify that they are enabled in your .ini files: - /usr/local/php/7.4/etc/php.ini - /usr/local/php/7.4/etc/conf.d/apcu.ini - /usr/local/php/7.4/etc/conf.d/mcrypt.ini - /usr/local/php/7.4/etc/conf.d/opcache.ini You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode. Installation failed, deleting ./composer.json.
過去はこれが要らなかったらしいが、近年このextensionが必要なものに加えられたらしい。
これにはかなりハマった。
というか、ちゃんと書いてくれている人がいたのだが、やりなれていない方法だったので、コマンドややり方などさらに調べる必要があった。
ただ色々回り道しつつ、結局この二つのブログで書かれている通りのことを実施して、うまく入った。
https://note.com/kuroko_peace/n/naffb49e54ab3
さくらレンタルサーバーでLINE BOT SDKがComposerでインストールできない( requires ext-sockets * ) sockets.soエラー
コマンドラインでまずphpのバージョンを調べておいて、php.netのdownloadページから同じバージョンのものをwgetでとってくる。
tarコマンドで解凍して、中身を確認すると、extというフォルダの中に sockets
というフォルダがある。
この中にcdして、ここでc言語なのでbuildをする必要がある。
phpizeして、configureファイルができるのでこれを実行してmakeするとbuildが成功する。
この時、生成されたファイルのパスが出る。
・・・ cp ./.libs/sockets.so /home/settenten/www/cs/bot/php-7.4.22/ext/sockets/modules/sockets.so cp ./.libs/sockets.lai /home/settenten/www/cs/bot/php-7.4.22/ext/sockets/modules/sockets.la ---------------------------------------------------------------------- Libraries have been installed in: /home/○○○○/www/cs/bot/php-7.4.22/ext/sockets/modules If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the `-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the `LD_RUN_PATH' environment variable during linking - use the `-Wl,--rpath -Wl,LIBDIR' linker flag See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- Build complete. Don't forget to run 'make test'.
ここで、make testも実施。 このうち、参考にしたブログの人は、soのみならずlaもphp.iniで指定すると書いてあったが、 一つ目のブログの人のように、soだけをphp.iniで指定したら、line-bot-sdkを無事インストールすることができた。
alias php='/usr/local/bin/php -c /home/〇〇/www/php.ini'
extension_dir = /home/○○○○/www/php-7.4.22/ext/sockets/modules/ extension = sockets.so
extension_dirは、任意の自分で置いたところを指定する。 私は、生成されたそのままのパスを指定した。
これでやっと開発が開始できるところまで来た。
botが送信するメッセージが文字化けする
pushもreplyメッセージも文字化けしました。英語にすると問題がないので、日本語の文字化けのようでした。
こちらは、制御しているPHPファイルの文字コードをutf-8に直したところ、文字化けしないようになりました。
:set fenc?
で確認して、
:set fenc=utf-8
です。
20230513追記
何にもしていないのに、いきなりLine botの応答が途絶えたので、マジで結構焦って、別フォルダを切ったり数日てんやわんやだったんですが、なんといつの間にかInternal Server Errorが出なくなった。。。本当にやめてくれって感じです。再度色々調べて勉強にはなりましたが。
状況を書いておきます。
botがいきなり応答しなくなった。おかしいと思って、LINE developersのコンソールからwebhookの検証(ファイルの接続確認)をしてみるも、エラーが出ますとのこと。 同じフォルダに置いている他のphpファイル(phpinfoのファイルを作っていた)も接続ができず、Internal Server Errorが出る。
ただし、同じサーバーの別のドメイン(フォルダを切っている)のサイトは全部見られた。つまりこのbotのファイルを置いているフォルダだけが何かおかしい。変なphpのファイルでも置いてしまったか、間違って直した時に変なコードが混じってしまったかと思い、直近で触っていたファイルを消したりしてみたが、変化なし。
仕方ないので、他のサブドメインを切り、SSL化し、そこに入れ込んでみるが、line-corp-sdkなどをまた入れ直さないといけないようだった。(前作ったフォルダ内にcomposer installしていた)面倒だな〜 と思って、一度最初のフォルダに接続確認をしてみたところ、なんと何もなかったかのように接続ができた・・・・・・・・・・。
本当にやめてほしいし、原因を解明したいけど、どうにも私にはやりようがない。将来的に自分の技術力が上がって、究明できる時のために、一応備忘録としてここに記録しておく。(あと悔しかったから、このまま昇華させないために書いた。)