FTP/FTPS
FTP(File Transfer Protocol)およびFTPS(FTP over TLS/SSL)サーバー上のファイルを最適化します。
YAML設定ファイルの書き方
接続設定は batch.ftp の下に、処理対象ディレクトリやフィルタは batch の直下に書きます。 batch.fileSystem: ftp を書いておけば、サブコマンドなしの lightfile-batch -c job.yaml だけで実行できます(v6.0.10 から)。
基本的なFTP接続
暗号化なしのFTP接続です。共有ホスティングやレガシーなサーバー環境で使用します。
コマンドライン:
lightfile-batch ftp \
--ftp-host ftp.example.com \
--ftp-user myuser \
--ftp-password mypassword \
--ftp-dir /imagesYAML設定ファイル:
batch:
fileSystem: ftp
dir: /images
ftp:
host: ftp.example.com
port: 21
user: myuser
password: mypasswordlightfile-batch -c job.yaml--ftp-host(batch.ftp.host)は、コマンドラインか設定ファイルのどちらかで必ず指定します。 --ftp-user は空でもかまいません(匿名FTP)。
FTPS(明示的TLS)
通常のFTP接続を開始してからTLS/SSLで暗号化する方式です。ポート21で接続し、コマンド AUTH TLS で暗号化を開始します。最も一般的なFTPSの方式です。
コマンドライン:
lightfile-batch ftp \
--ftp-host ftp.example.com \
--ftp-user myuser \
--ftp-password mypassword \
--ftp-use-tls \
--ftp-dir /imagesYAML設定ファイル:
batch:
fileSystem: ftp
dir: /images
ftp:
host: ftp.example.com
port: 21
user: myuser
password: mypassword
useTLS: trueFTPS(暗黙的TLS)
接続開始時から暗号化された通信を行う方式です。通常はポート990を使用します。一部のレガシーなFTPSサーバーで使用されます。
コマンドライン:
lightfile-batch ftp \
--ftp-host ftp.example.com \
--ftp-port 990 \
--ftp-user myuser \
--ftp-password mypassword \
--ftp-use-implicit-tls \
--ftp-dir /imagesYAML設定ファイル:
batch:
fileSystem: ftp
dir: /images
ftp:
host: ftp.example.com
port: 990
user: myuser
password: mypassword
useImplicitTLS: trueTLS証明書エラーを無視
自己署名証明書や期限切れ証明書を使用しているFTPSサーバーに接続する場合、TLS証明書エラーを無視できます。開発環境やテスト環境で有用です。
コマンドライン:
lightfile-batch ftp \
--ftp-host ftp.example.com \
--ftp-user myuser \
--ftp-password mypassword \
--ftp-use-tls \
--ftp-ignore-tls-errors \
--ftp-dir /imagesYAML設定ファイル:
batch:
fileSystem: ftp
dir: /images
ftp:
host: ftp.example.com
user: myuser
password: mypassword
useTLS: true
ignoreTLSErrors: trueセキュリティ警告
本番環境では --ftp-ignore-tls-errors を使用しないでください。 中間者攻撃のリスクがあります。
このオプションは開発環境や自己署名証明書を使用している内部ネットワークでのみ使用してください。
古いTLSしか話さないサーバー(v6.0.10 から)
TLS 1.0 にしか対応していない古い FTPS サーバーには、既定では接続できません(tls: server selected unsupported protocol version などで失敗します)。lightfile-batch は既定で TLS 1.2 未満と RSA 鍵交換の暗号を使わないためです。そのようなサーバーに限り、--ftp-legacy-tls(legacyTLS: true)で TLS 1.0 / 1.1 と RSA 鍵交換の暗号(AES-CBC-SHA など)を許可できます。
コマンドライン:
lightfile-batch ftp \
--ftp-host ftp.example.com \
--ftp-user myuser \
--ftp-password mypassword \
--ftp-use-tls \
--ftp-legacy-tlsYAML設定ファイル:
batch:
fileSystem: ftp
ftp:
host: ftp.example.com
user: myuser
password: mypassword
useTLS: true
legacyTLS: true # TLS 1.0/1.1 と RSA 鍵交換を許可するWARNING
安全性の低い通信方式を許可する設定です。サーバー側を更新できない場合に、そのサーバーだけで使ってください。
ベースパスと処理対象ディレクトリ
FTPでは場所を2段階で指定します。
| 指定 | コマンドライン | YAML | 意味 |
|---|---|---|---|
| ベースパス | --ftp-base-path | batch.ftp.basePath | 処理の起点。未指定ならログイン直後のディレクトリ |
| 処理対象ディレクトリ | --ftp-dir | batch.dir | ベースパスの下のディレクトリ。この下だけをたどる |
dirはベースパスからの相対パスです。先頭の/は無視されます(/imagesとimagesは同じ)- 指定したディレクトリが存在しない場合は、エラーで止まります
- 処理済みの記録(相対パス)とプロジェクトはベースパスを基準にしています。プロジェクトを決めるURLは
ftp://<user>@<host>:<port><basePath>(TLS使用時はftps://)です。dirを変えても、処理済みの記録はそのまま引き継がれます
コマンドライン:
# /public_html/images の下だけを処理する
lightfile-batch ftp \
--ftp-host ftp.example.com \
--ftp-user myuser \
--ftp-password mypassword \
--ftp-base-path /public_html \
--ftp-dir imagesYAML設定ファイル:
batch:
fileSystem: ftp
dir: images
ftp:
host: ftp.example.com
user: myuser
password: mypassword
basePath: /public_htmlv6.0.8 までの挙動
v6.0.8 までは --ftp-dir と batch.dir が無視され、ベースパス(未指定ならログイン直後のディレクトリ)の下をすべて処理していました。v6.0.10 から、指定したディレクトリの下だけを処理します。
更新日時の取り方
LightFile Batchはファイルの更新日時とサイズを処理済みの記録と比べて、変更のあったファイルだけを処理します。FTPでは、v6.0.10 から更新日時の取り方を選べます。
| 値 | 取り方 | 特徴 |
|---|---|---|
list(既定) | 一覧の時刻。サーバーが MLSD に対応していれば MLSD、無ければ LIST | 速い。LIST の時刻は多くのサーバーで現地時刻・分単位(古いファイルは日付のみ)で、時差の分ずれた UTC として読まれる |
mdtm | ファイルごとに MDTM で取得 | 秒単位・UTC で正確。1ファイルにつき1往復かかるため、スキャンは遅くなる |
MDTM に失敗したファイルは、一覧の時刻を使います。
コマンドライン:
lightfile-batch ftp \
--ftp-host ftp.example.com \
--ftp-user myuser \
--ftp-password mypassword \
--ftp-mod-time-source mdtm \
--ftp-dir /imagesYAML設定ファイル:
batch:
fileSystem: ftp
dir: /images
ftp:
host: ftp.example.com
user: myuser
password: mypassword
modTimeSource: mdtmmdtm を推奨する場合:
- Microsoft FTP Service(IIS)など、MLSD に対応していないサーバー
- 旧 LightFile(LightFile Command)から移行した処理済みの記録を使う場合
切り替えたときの再読み込み
既定の list から mdtm に切り替えると、記録済みの時刻と一致しなくなるため、全ファイルを1度読み直します。