これは【新歓ブログリレー2020 32日目】の記事です
n8n.ioとは
IFTTTとかZpierみたいな自動化ツールです。オープンソースで開発されています。n8n.ioを使いたかったらどっかのサーバー上に配置する必要が在ります。
経緯
皆さん、暇ですか?
ぼくは暇です。いや暇じゃないけど暇です。特に今年は某ウイルスのせいでどこにも遊びに行けなくて、家に引きこもってます。皆さんもそうですよね?まさか不要不急の外出なんかしてないですよね?よろしい。
いい加減進捗するのも飽きたんですよ。僕は。というわけで僕はほぼ毎日のように高校同期とボイチャして暇つぶしてるんですが、ある時思い立ちました。
マイクラサーバー立てるcar
大規模じゃなくていいんですよ。うちのボイチャメンツのうちマイクラやってる人(数人)が入れるマイクラサーバーを立てれれば。というわけでGoogleCloudPlatformのクレジット($300)を使ってマイクラサーバー立てたわけです。なので実質タダで立てれてます。もともとは某ウイルス収束までの短スパンだけで立てようと思ってたのでGCPで全然問題なかったです。その話は今日はしないですが、立て方はまさかの公式で書いてくれてます。わかりやすい。
Compute Engine での Minecraft サーバーのセットアップ
小規模サーバーの場合はSSD50GBもなくていいし、スペックも多少落としていいと思います。
これでQOLぶち上りました。正直家から出なくても楽しいっす。仲いいメンツで遊べる小規模マイクラサーバー、おすすめです。
問題
サーバーが異常にラグい時がある。それで何回死にかけたか(Mobが瞬間移動するので)。一応
は満たしてるはずなんですがね。共有コアなのが悪いのかなぁ。とにかくラグい。でもCPU使用率100%とかになってるわけではない。でも最悪サーバー用アプリケーションが落ちてTimeoutになる。
あと大体マイクラに人が入ってるの0~5時とかなんで(生活習慣崩壊)1日中つけっぱなのもったいない。でもサーバー付けたり消したりすんのめんどくさいし、まれに午前中(?)に入ってるときもあるのでずっと動かしっぱなしにしてます。
n8n.io入れるか!!!!!!!!
理由はn8n.ioなんか一時期いろいろ流行ってたし、お試しがてら入れてみたいというだけ。あとはNode.jsを実行できたり(!)、サーバーでcommandを実行できたり(!)と割と柔軟なので面白そう。
自宅のサーバーとかに入れるのが多分一番いいんだけどそんなのないしどうせリソース余ってるから入れてみるかっていう安直な理由。
入れます
インスタンスを立てる
マシンタイプは正直なんでもいいんですが、データ永続化のために追加ディスクを用意しましょう。最低の10GBで十分ですよ(大量のデータを生成しない限り)
マシンについてるディスクはサーバーを停止するとデータが消えることがあるようです。
マシンで環境構築
サーバーにSSH接続します
以下のコマンドを入れます。コマンドの解説は以下で。
sudo su
mkdir /home/n8n
mkfs.ext4 -F -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/disk/by-id/[DiskID]
mount -o discard,defaults /dev/disk/by-id/[DiskID] /home/n8n
apt install build-essential && apt install -y screen
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm install stable
nvm alias default stable
npm install n8n -g --unsafe-perm=true --allow-root
export N8N_PORT=[Port] && N8N_BASIC_AUTH_ACTIVE=true && N8N_BASIC_AUTH_USER=[Username] && N8N_BASIC_AUTH_PASSWORD=[Password] && GENERIC_TIMEZONE=Asia/Tokyo && N8N_USER_FOLDER=/home/n8n
cd /home/n8n
screen -d -m -S nnio n8n
1行目
root権限が必要なのでrootになっています
2行目
/home/n8nというフォルダを作っています
3行目
追加ディスクをフォーマットしています。[DiskID]にはインスタンスを立てたときに設定したidを入れましょう。
4行目
追加ディスクを/home/n8nにマウントしています。これで/home/n8n以下に保存されたデータは追加ディスクに入ります。
5行目
以降のnvmをインストールする過程でmakeコマンドを使うので、build-essentialをインストールします。あとはscreenを使って仮想コマンドラインで動かすのでそれもついでに入れます。
6,7,8行目
nvmをインストールします。
Compute Engine での Node.js のスタートガイド
↑この記事、すでにnpmが入ってるみたいな体で話していますけど、GCEには入ってないから入れなきゃいけないんですよね。その説明入れてほしいです。
9,10行目
npmの安定版をインストールして設定します
11行目
n8nをグローバルインストールします。後ろのフラグは権限足りないから付けた方がイイ的な意見があったので付けてます。なくてもいいかもしれません。
12行目
必要な環境変数を設定しています。
- N8N_PORT : 起動ポートです
- N8N_BASIC_AUTH_ACTIVE : 認証を付けるかを設定します
- N8N_BASIC_AUTH_USER : ユーザー名
- N8N_BASIC_AUTH_PASSWORD : パスワード
- GENERIC_TIMEZONE : タイムゾーン デフォルトがアメリカのどっかだった気がする
- N8N_USER_FOLDER : データを保管するところ これの直下に.n8nというフォルダがつくられて設定が保存されます。
最悪上のやつ設定しなくても起動するんですけどね
13,14行目
n8n用のフォルダに移動してscreenで起動
外部ipの設定
(丸投げ)
ファイアウォールの設定


ソース範囲に関しては、どこからでもアクセスを許容するのであれば0.0.0.0/0でよいと思います。もし自分のパソコンからだけアクセスしたいならそのipを設定すればよいです。ただ、RSSとかが同じポートに飛んでくることを考えると広めにとった方がいいのかな?でもセキュリティもあるしなぁ。トレードオフかな
tcpのさっき設定したポートを開けておけばよいと思います
これをインスタンスに設定して完成
終わりました
いざアクセス。お手持ちの適当なデバイスから[外部ip]:[ポート]とすれば、パスワードを聞かれ、入力すれば↓のような画面が出てくると思います。そうなれば成功です!

2回目以降の起動
2回目以降の起動についてはまた別になります(特に追加ディスクフォーマットなんてしたらデータ吹っ飛びますからね)
sudo su
mount /dev/disk/by-id/[DiskID] /home/n8n
nvm alias default stable
npm install n8n -g --unsafe-perm=true --allow-root
export N8N_PORT=[Port] && N8N_BASIC_AUTH_ACTIVE=true && N8N_BASIC_AUTH_USER=[Username] && N8N_BASIC_AUTH_PASSWORD=[Password] && GENERIC_TIMEZONE=Asia/Tokyo && N8N_USER_FOLDER=/home/n8n
cd /home/n8n
screen -d -m -S nnio n8n
多分こんな感じ...?起動するたびにnpmが入ってたりはいってなかったりするからよくわからんになってます。
総評
まぁGCEでやる必要性はないですよね。GAEとかでできるんじゃないかなぁと思っているので、今動かしてるマイクラサーバーをどこかに移管するor削除したときに試してみます。一回試した時Activeにできなかったので、長時間動かすのにはGAEだとできないのかもしれないです。
やっぱりサーバーのコマンドを叩けるというのはでかいです。サーバー状態の監視とかにはもってこいですね。ラズパイとかに入れると面白いかも。
クラウド、楽しいですね。余力がある人は自分のドメインに割り当ててみたりNginxでリバースプロキシしたりhttps化してみたりしてはどうでしょうかね。
ただクラウドサーバーに関して言えばGCPたけぇになってます。秒単位で課金なのはいいですけど常時起動だったら別のサービス使うよなぁ(タダだから使ってるけど)
明日の担当者はSechi君です。この記事みたいにお固くなくて楽しく読めそうですよ。:tanosimi-: