hilight.js

2018年2月13日火曜日

discordのbotをNAS上で常時動かす

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 update
apt upgrade

次に、node.js,npm,discord.jsをインストールする。

apt install nodejs nps
npm 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/js
node bot.js

起動を確認したら ctrl+p ctrl+q の順に押すことで、dockerコンテナをデタッチしてNAS上の端末に戻る。
あとはその端末で

exit

とするとNASからログアウトできる。

これで、botをNAS上で常時動かせるように出来た。

2 件のコメント:

  1. 恐れ入ります。
    藁を掴む思いでこのページにたどり着きまして作業をしていたのですが、node.js,npm,discord.jsをインストールする「npm install discord.js --save」のところで詰まってしまいました。。Not Foundになります。。どう解決すれば良いでしょうか。。よろしくお願いします。

    返信削除
  2. すいません、この記事のコマンドをそのまま打つと
    apt install nodejs nps
    となっていますが、npsではなく、npmでした。
    そのため、npmがインストールできずNot Foundになっているのだと思います。

    返信削除