discordでbotを動かせるようになったのはいいが、botは自分のPC上で動いているため、PCを落とすともちろんbotも落ちてしまう。
丁度、常時動いているNASがあったので、NAS上でbotを動かしてみた。
環境
- ubuntu 16.04.3 LTS + LXDE
- QNAP NAS TS-231+ バージョン4.3.4.0435
とりあえずNAS上で直接動かしてみる(失敗)
QNAP QTSのAppCenterからNode.jsをインストール。
その後、NASにSSHでリモート接続(ここのmacのやり方を参考)し、npmでdiscord.jsをインストールすることで、とりあえずbotが動かせる環境はできた。
しかし、botを動かしたままでNASからログアウトしようとすると、NAS上の端末がbotに占有されているので、botを止めないとログアウト処理ができない。 ログインしたままにしてみるが、PCを落とすともちろんSSH接続の切れて、なぜかNAS上で動いてるbotも停止する。SSH接続が切れると、NAS上で動かしていた端末も終了してしまうのだろうか。
そういう場合、screenを使って仮想端末を作り、その仮想端末上でbotを動かしたあとにデタッチすることで、botを動かしたままNASからログアウトできるらしいが、NASにはscreenが入っていない。
screenをインストールしようとするも、aptみたいなパッケージマネージャも入っていない。
opkgというパッケージマネージャに辿り着き、インストールしてみるもうんともすんとも言わない。
パッケージマネージャがなくてもscreenをインストールする方法もあるかもしれないが、分からなかったので他の方法に逃げることにした。
仮想環境でbotを動かす(成功)
QNAPのNASには、ContainerStationという仮想環境を立ち上げるアプリがあり、NAS上で別のOSを動かすことができるらしい。
ということで、その仮想環境上でbotを動かしたままにして、NASからログアウトできるかやってみる。
まずは、AppCenterでContainerStationをインストール。
ContainerStationを起動し、コンテンツ作成からUbuntuイメージをインストールする。
Ubuntuイメージは、推奨の中には3つほどあるが(イメージ検索するともっと出てくる)、UbuntuのバージョンをPC側と合わせたかったので、dockerのものを選択した。
インストールボタンを押すと、設定画面が出てくるがデフォルトのままでも問題なさそう。
NASのスペックが低いので、一応CPUリミットとメモリー制限を半分にしておいた。
あとは、詳細設定の共有フォルダで、NAS上のフォルダに仮想環境からマウントされるようにしておくと、NAS上のファイルに仮想環境からアクセスできて便利。
あとは、作成ボタンを押して少し待つと仮想環境が立ち上がる。
仮想環境にアクセスする
PCからNASにSSH接続し、
docker ps
とすると、現在起動しているdockerコンテナ(仮想環境)が表示される。
そこに表示されているCONTAINER IDを使用して
docker attach <CONTAINER ID>
とすることで、dockerコンテナにアクセスできる。
仮想環境内でbotを動かす環境を構築する
user作った方がいいみたいだけど、NASは外部に公開してないので、これ以降の仮想環境内ではルートで作業してしまっている。
まずはパッケージ一覧の更新と、パッケージの更新をしておく。
apt updateapt upgrade
次に、node.js,npm,discord.jsをインストールする。
apt install nodejs npsnpm install discord.js --save
dockerイメージは、タイムゾーンが協定世界時(UTC)になっているようなので、botで時間を扱う時用に日本(JST)に変更しておく。
timedatectlはなぜか入ってないので、/etc/localtimeのシンボリックリンクを変更する方法で変更しようとすると、タイムゾーンデータベースもなぜか入ってないのでインストールする。
apt install tzdata
それからタイムゾーンを日本に変更。
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
botを動かしたままにしてNASからログアウトする
自分の場合は、botのjsファイルをNAS上のjsフォルダにおいてたので、マウント先に移動してbotを起動。
cd /mnt/nas/jsnode bot.js
起動を確認したら ctrl+p ctrl+q の順に押すことで、dockerコンテナをデタッチしてNAS上の端末に戻る。
あとはその端末で
exit
とするとNASからログアウトできる。
これで、botをNAS上で常時動かせるように出来た。
恐れ入ります。
返信削除藁を掴む思いでこのページにたどり着きまして作業をしていたのですが、node.js,npm,discord.jsをインストールする「npm install discord.js --save」のところで詰まってしまいました。。Not Foundになります。。どう解決すれば良いでしょうか。。よろしくお願いします。
すいません、この記事のコマンドをそのまま打つと
返信削除apt install nodejs nps
となっていますが、npsではなく、npmでした。
そのため、npmがインストールできずNot Foundになっているのだと思います。