feature image

2020年4月9日 | ブログ記事

n8n.ioをComputeEngine上で動かした話

これは【新歓ブログリレー2020 32日目】の記事です

n8n.ioとは

n8n.io

IFTTTとかZpierみたいな自動化ツールです。オープンソースで開発されています。n8n.ioを使いたかったらどっかのサーバー上に配置する必要が在ります。

経緯

皆さん、暇ですか?

ぼくは暇です。いや暇じゃないけど暇です。特に今年は某ウイルスのせいでどこにも遊びに行けなくて、家に引きこもってます。皆さんもそうですよね?まさか不要不急の外出なんかしてないですよね?よろしい。

いい加減進捗するのも飽きたんですよ。僕は。というわけで僕はほぼ毎日のように高校同期とボイチャして暇つぶしてるんですが、ある時思い立ちました。

マイクラサーバー立てるcar

大規模じゃなくていいんですよ。うちのボイチャメンツのうちマイクラやってる人(数人)が入れるマイクラサーバーを立てれれば。というわけでGoogleCloudPlatformのクレジット($300)を使ってマイクラサーバー立てたわけです。なので実質タダで立てれてます。もともとは某ウイルス収束までの短スパンだけで立てようと思ってたのでGCPで全然問題なかったです。その話は今日はしないですが、立て方はまさかの公式で書いてくれてます。わかりやすい。

Compute Engine での Minecraft サーバーのセットアップ

小規模サーバーの場合はSSD50GBもなくていいし、スペックも多少落としていいと思います。

これでQOLぶち上りました。正直家から出なくても楽しいっす。仲いいメンツで遊べる小規模マイクラサーバー、おすすめです。

問題

サーバーが異常にラグい時がある。それで何回死にかけたか(Mobが瞬間移動するので)。一応

Minecraft Wikiの数人で動かす場合の要件

は満たしてるはずなんですがね。共有コアなのが悪いのかなぁ。とにかくラグい。でも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には入ってないから入れなきゃいけないんですよね。その説明入れてほしいです。

参考:nvm - github

9,10行目

npmの安定版をインストールして設定します

11行目

n8nをグローバルインストールします。後ろのフラグは権限足りないから付けた方がイイ的な意見があったので付けてます。なくてもいいかもしれません。

12行目

必要な環境変数を設定しています。

最悪上のやつ設定しなくても起動するんですけどね

13,14行目

n8n用のフォルダに移動してscreenで起動

外部ipの設定

静的外部 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-:

Fogrex icon
この記事を書いた人
Fogrex

シェーダーとVRやってます レイマーチ楽しい(゚∀。)

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2020年5月15日
【新歓ゲーム制作特集 第2弾】Inverse製作秘話
Saltn icon Saltn
2020年5月19日
【新歓ゲーム制作特集 第6弾】個人でゲームを作る話
Facish icon Facish
2020年5月1日
爆☆誕 traQ-S【新歓ブログリレー2020 54日目】
spa icon spa
2020年4月12日
Growl Bassの研究【新歓ブログリレー2020 35日目】
fomalhaut icon fomalhaut
2020年4月6日
はじめてのドット絵
xxpoxx icon xxpoxx
2020年4月3日
猫でもわかる(諸説)ハードサーフェスモデリング
isak icon isak
記事一覧 タグ一覧 Google アナリティクスについて