はじめに
GitHub Actionsが使えるようになってから、リポジトリ内にあるプロジェクトを自動でビルドやサーバーにデプロイができるようになり、WEBサイトの制作から公開までのフローが非常にスムーズになりました。
しかし、ひとたびエラーが発生すると、解決するのにそれなりに時間がかかることも多々あります。
今回はGitHub ActionsからレンタルサーバーにインストールしたWordPressのWP REST APIにアクセスできない際の解決策をご紹介します。
本記事で紹介する点
- GitHub Actions でのビルド時にレンタルサーバーにインストールしたWordPressからのWP REST APIの取得に失敗
結論
- WP REST APIの取得でエラーを吐いていたら、Wordpressがインストールされているサーバーの設定を見直す
- Xseverの場合、デフォルトで海外IPからのWP REST APIへのアクセうがブロックされている
最終的にやりたいこととしては以下になります。
- Xserver上にインストールしたWordpressをヘッドレス化し、コンテンツ管理
- フロント側はWP REST APIを使ってjsフレームワークで構築
- ソースコードはGitHubで管理し、GitHub Actionsで自動ビルド→デプロイ
WP REST APIを使って記事や各種設定を読み込み、Astroで構築しビルドしたら、記事が静的ページで吐き出されるという仕組みを作りました。
吐き出された静的ページを手動でアップロードするのも面倒なので、GitHub Actions でビルドからサーバーにアップロードするまでフローを自動化することにしました。
GitHub Actions でのビルド時にエラー
ローカルでは難なくビルドできているのにも関わらず、GitHub Actionsの方でビルドするとエラーになってしまいます。
Error: 5 [ERROR] [build] Failed to call getStaticPaths for src/pages/[slug].astro
Unexpected token < in JSON at position 0
WordPress側のコンテンツはjson形式で取得しているのですが、そのjsonファイルに不備があるとのこと。
(jsonファイルで使えない記号「<」が含まれている)
その影響でWP REST APIを使ったページ生成に失敗しています。
試しにcurlコマンドを走らせてみると403エラーが返っていることがわかりました。
つまりGitHub ActionsからWP REST APIで吐き出されているjsonにアクセスできてない状況です。
(jsonにアクセスできないていないことで、403 forbiddenのHTMLを取得してしまっている)
【解決】XserverのWordPressセキュリティ設定が原因
Xserverではデフォルトで国外IPアドレスからWP REST APIへのアクセスをブロックする設定になっているようです。
公式サイト:https://support.xserver.ne.jp/manual/man_server_wpsecurity.php
Xserverのサーバーパネルから、REST API アクセス制限OFFにすることでアクセスができるようになります。
WordPressセキュリティ設定 > 対象のドメインを選択 > REST API アクセス制限をOFF
ブラウザでURLを打ち込んでアクセスが出来ていたので、レンタルサーバー側でブロックされているとは思いませんでした。
GitHub が海外のサービスのため、国外IPアドレスからのアクセスとなり、ブロックされていたようです。
まとめ
今回使用しているフレームワークやサービスに限らず、レンタルサーバーにインストールしたWordPressのWP REST APIに外部のサービスやサーバーなどからアクセス出来ない場合はレンタルサーバー側の設定を疑ってみると良いかもしれません。