n8nでFTPアップロードを自動化してみた結果、あえてお勧めしない理由

n8nでFTPアップロードを自動化してみた結果、あえてお勧めしない理由
WEBサイトの更新でよく使うのがFTPだと思います。これをn8nを使って連携できないかと思って試してみました。
結論:あまりメリットはない
正直メリットはあまりないので、どうしてもって事が無い限りはお勧めしません。ちょっとだけ楽になるかもしれないですが、凄く楽になるって事はないです
環境
環境としては以下のようになります
- n8n:セルフホスト版
- 自動化内容:所定のフォルダにHTMLデータとPDFファイルをアップしたら自動で変更が適用される
- 接続方法:SFTP(公開鍵認証)
- ホスト側共有フォルダ:share/ftp
設定ノード

ノードは以下を使います
- Local File Trigger
- Read/Write Files from Disk
- switch
- FTP(SFTP)
この4つになります。それぞれの設定は以下のようになります
Local File Trigger

※このノードはセルフホスト版にしかないものなので、注意してください
このノードはローカルのファイルを検知するためのトリガーノードになります。このトリガーはファイルの有無を検知するためにあります
- Trigger On:
Changes Involving a Specific Folder - Folder to Watch:
/opt/app-root/src/.n8n-files/ftp - Watch for:
File Added,File Changed - Await Write Finish:オン
- Options:*/.filepart
Await Write FinishをONにすることで、OS側でのファイル書き込みが完全に完了し、ファイル名が確定して『安定』した状態で次のノードへ渡せるようになります。
Read/Write Files from Disk

このノードで、トリガーが検知したファイルを読み込みます。ここでファイルの中身を読み出すことで、FTPトリガーで送信ができるようになります
- Operation:Read File(s) From Disk
- File Path:{{ $json.path }}
注意点:
Property Nameをdataに固定するのがコツ。これとFTPノードのInput Binary Fieldを合わせないと、バケツリレーが失敗してエラーになる
switch

ここはプログラムでいうswitch文と同じ役割となります。今回の場合はHTMLとPDFファイルがあるので、その条件分岐で使っています
PDFの条件とhtmlの条件と2つ作ります
- Mode:Rules
- Value 1:{{ $json.fileName }}
- 演算子:ends with
- value2:.pdf
- value2:.html
FTP

ここでSFTPの設定をすることで実際にファイルのアップロードが可能になります
パスはアップロードするパスに置き換えてください。パスはExpression(式)にて書きます
- Credential:作成したアカウント名
- Operation:Upload
- Path:{{ '/DocumentRoot/pdf/' + $json.fileName }}
- Binary File:on
- Input Binary Field:data
アカウント作成
アカウントは
- Credential to connect with:Create New で作成
- ホスト名:サーバーのIPアドレスかホスト名をいれる
- Protocol:SFTP
- ユーザー名:SFTP接続するユーザー名
- PrivateKey:秘密鍵をいれる
自動化に意味があるか?
この自動化に意味があるのか?と思ったので考えて見たいと思います
githubを使っているなら不要
githubを使っている場合は、githubActionなどを使ってCI/CDにするほうがよいです。運用方法によると思いますが、n8nを使う場合はプルリクが省けるというメリットはあるかもしれませんが、記録に残せるという意味では正直githubActionのほうが良い気もします
通常のページ更新はメリットがない
例えばHPの更新とかでFTP接続をして、ファイルをアップしているなどのケースではn8nにしたとこで、正直メリットは薄いです。開発環境にもよるかもしれませんが
- n8nのほうにファイルをアップする必要がある
FTPで接続する先がn8nか、FTPサーバーかの違いのため、この場合はメリットがないです。
人為的ミスを防げる
今回作成したのは、PDFとHTMLファイルのアップロードなので、間違えて画像をいれてもアップロードされたりはしません。条件式によっては、ファイル名に○○を含んでいたらアップしないなども構築できます。他にも可能性としては
- 0kbファイル、1GB超えていたらアップしないという制限をかける
- ディレクトリが無ければ作る
- ファイル名マッチさせる
- ファイル更新後、Slackなどに通知をする事が可能
など、完全なデメリットというわけではないですが、自動化することでミスの予防にはなるかもしれません
この記事に関する技術サポート・ご相談
「手順通りにいかない」「自社環境への構築を代行してほしい」など、
インフラ・サーバー周りでハマった際はお気軽にご相談ください。
※ Googleフォームへ移動します(初回相談無料)
個人支援・寄付について
サイトラボでは個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではビットコインで受け付けております。
- ビットコイン:3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS