メールが来た

デプロイしたら「Run failed: ftp upload」ってメールが届きました。
確認すると、FTP-Deploy-Actionが出しているエラー(❌)で、GitHubのアクションを覗いてみるとたしかにエラーが出ています。
警告(⚠)も出ていますね・・・。

GitHubで確認した内容
GitHubでのエラー01

あ、ちなみにFTP-Deploy-Actionは、GitHubにアップロードした記事を自動でさくらサーバーにFTPでアップしてくれるスグレモノです。

🔗SamKirkland/FTP-Deploy-Action

いつも大変お世話になっております。

エラー内容

具体的なエラーは下記のように書かれていました。

FTPError: 550 hoge: No such file or directory

hogeの場所を見たらピンときました。
先日、Hugo Server が遅いのときに削除したpublicフォルダの中です。

publicフォルダ内をまっさらにしたら速くなるかもと消したんですよね。
その後、コマンドを実行して現在の構成に合わせてpublic内が自動生成されたんですけど、過去からずっと残っていた不要ファイルは当然生成されないため、そこで不一致が起きているようです。

復旧

publicを削除するときにバックアップを取ってあったので、hogeを戻して再度デプロイ。
またエラーが出て、確認すると今度はhoge2が無いと言っています。
hoge2を戻してデプロイすると、今度はhoge3が無いと言っています。

エラーが出たところで止まるのか、1つずつしか問題が見付からず、尚且つ1回に数分かかるため、 バックアップを丸ごと戻しました。

エラーが出なくなったので解決したんですけど、不要ファイルがアップされたままで気持ち悪い。

自力で調べた

不一致が起きているということは、AとBを比較しているということです。
ローカルリポジトリとリモートリポジトリの部分では問題が発生していませんので、リモートリポジトリ(public)とさくらサーバーで問題が出ているのでしょう。

さくらサーバーの中を見ていたら、それっぽいファイルを発見。

.ftp-deploy-sync-state.json

あぁ、いかにもな名前。
日付も今日で、ついさっき更新されたばかり。

ダウンロードして中身を確認して確信しました。
こいつである。

“description”: “DO NOT DELETE THIS FILE. This file is used to keep track of which files have been synced in the most recent deployment. If you delete this file a resync will need to be done (which can take a while) - read more: https://github.com/SamKirkland/FTP-Deploy-Action",

「このファイルを消さないでください。同期されたファイルを追跡するために使用されます。」
って書いてあった。

早速、不要ファイルが記載されている箇所を消してみてからアップロードしてみたら、デプロイしてもエラーが出ませんでした。

不要ファイルがどれかを探すのも大変なので、いっそのこと再同期させちゃいましょう。
時間はかかりますが、困る人は誰も居ませんので、さくらサーバーの.ftp-deploy-sync-state.jsonを削除してやりました。

そして、ローカルのpublic内も全部削除して、デプロイ実行!

アップロードにかかった時間

ファイル数1,400件弱。
いつもは差分だけアップしていますが、今回は全部アップしたんだろうな。

数十秒~数分で完了しているいつもの作業が、今回は48分かかりました。

あぁ、これでスッキリした。

ついでに警告も

警告のほうでは、こんなメッセージも出ていました。

Node.js 16 actions are deprecated. Please update the following actions to use Node.js 20: actions/checkout@v3, SamKirkland/FTP-Deploy-Action@4.3.3. For more information see: https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/.

「Node.jsが古いから新しいのに変えなさいよ」と言っています。

何を言っているのか分かりませんが、FTP-Deploy-Actionのバージョンを見たら古くなっていたので更新しておきました。
メッセージは変わりませんでした。

もう一つ、checkoutというアクションも指定してあったので、こちらも最新にしたら、メッセージは出なくなりました。

# /.github/workflows/main.yml
on: push
name: 🚀 Deploy website on push
jobs:
  web-deploy:
    name: 🎉 Deploy
    runs-on: ubuntu-latest
    steps:
    - name: 🚚 Get latest code
      uses: actions/checkout@v4 # v3を使っていたので、v4に修正
    
    - name: 📂 Sync files
      uses: SamKirkland/FTP-Deploy-Action@v4.3.5 # v4.3.3を使っていたので、v4.3.5に修正
      with:
        server: ftp.samkirkland.com
        username: myFtpUserName
        password: ${{ secrets.ftp_password }}

違うエラーが出た

GitHubで確認した内容 その2
GitHubでのエラー02

Error: Server sent FIN packet unexpectedly, closing connection.

先ほどのエラーが出たとき、久し振りにさくらのサーバー設定画面に入ったんですが、そこに推奨設定みたいな項目がありまして、あぁ、たしかに機能を有効にしたほうが良さそうだと、いくつか有効にしたんですよね。
そしたら、このエラーが出るようになりました。

下記を変更したら直りました。

  • セキュリティ → 国外IPアドレスフィルタ → アクセス制限設定 → 無効(制限しない)

ただ解せないのは、有効(制限する)を選ぶと個別制限設定ができるようになっていて、「管理画面」「コメント」「API」とかのオン・オフができます。
すべてオフにしてあっても、有効(制限する)にした時点でエラーが出ます。

個別以外で機能が働いているのかなとさらに調べていたら、サポートページに書いてありました。
「以下の項目は個別制限設定をチェックしていなくても有効になります」と。

🔗国外IPアドレスをフィルタ設定したい | さくらのサポート情報

あぁ、なるほどね。
理解、理解。

ということで、無効(制限しない)で運用いたします。