ローカルPC上のDockerでWordPress立ち上げて記事書いてるんですが、いままで静的出力とS3へのアップロードにWP2Staticを使ってました。
WP2Static で S3 にアップロードできなくなった
Failed during "Deploying files to S3
静的出力まではできるんですがS3のアップロードで失敗しました。
どうやらWordPressやプラグインを最新にしたりPHP7に対応しないといけなさそうです。
そういうアップデートが嫌でローカルにWordPress立ち上げてるんだこっちは!
対応したくないので自力でアップロードすることにしました。
デプロイには GitHub Actions を使うことにする
せっかくなので現状の問題点もいくつか解決しようと思います。
- アップロード前に差分が分からない
- 余分なファイルもアップロードされてしまう(Exclude指定でも抜けることがある)
- 特定リンクをクローリングしてくれない
- 静的出力とS3アップロードがワークフロー化されていてS3アップロードだけプラグインから実行できない
S3へのアップロードは s3 sync でやるとしても --dryrun でファイル差分だけ見るのも微妙だなと思ったのでGit管理にします。
GitHub Freeでもプライベートリポジトリ使えるようになったしGitHub Actionsも使える。
ならばデプロイはGitHub Actionsに任せてしまうのがいいだろうと。
静的出力プラグインを Simply Static に変更
WP2Staticだとページング1ページ目にリンクがないページ数をクローリングしてくれなかったんですが、Simply Staticだとやってくれるので変更。
Simply Staticはクローリング先がxmlだと、xmlとhtml両方出力してしてしまうことがあったんですが .gitignore で使って回避しました。途中でGit挟むことによる利点ですね。
ほかの設定値はWP2Staticとたいした違いはなく出力先にローカルパスを指定して出力するだけ。
GitにPushしてActionsで自動デプロイ
出力された静的ページをGitにPushすればいいんですが、その前にPush先のbranchによって動作するGitHub Actionsのworkflowを一緒に作っておきます。
Checkout時にタイムスタンプが変わり全部同期対象になってしまうので、データサイズが変わったものだけ同期するように --size-only をつけてます。あと記事ファイルは再作成可能なので余分なファイルが残らないように --delete オプションもつけてます。
.github/workflows/sync.yml
on:
push:
branches:
- master
name: S3 Sync
jobs:
sync:
name: Deploy static pages
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-1
- name: s3 sync
run: |
aws s3 sync --size-only --delete ./static-pages/ s3://bucket-name/prefix/
# aws cloudfront create-invalidation --distribution-id XXXXXXXXXXXXXX --paths '/*'
追加でCloudFrontのキャッシュ削除を書いてもいいし、プラグインに頼るより自由度上がるのでGitHub Actionsでの静的ページ公開ありですね。なんだったらレビューも挟めるし。