Open1
xserverにssh接続してgit操作
公開サーバーにssh接続
xserverへのssh接続設定を ~/.ssh/config
に書いておく。
Host xserver
HostName サーバーID.xsrv.jp
Port 10022
User サーバーID
IdentityFile ~/.ssh/秘密鍵のファイル名
ServerAliveInterval 60
ssh接続
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
のようなメッセージで接続できない場合は known_hosts
を確認する。
公開鍵を更新した場合など known_hosts
から対象サーバーの行を削除。
xserver側でテーマフォルダをリポジトリ化
cd example.jp/public_html/wp-content/themes/mytheme
git init
git add .
git commit -m "first commit"
とした時に
fatal: empty ident name (...) not allowed
のようなエラーメッセージでコミットできない場合。
エラーメッセージの説明に沿って、メールアドレスとユーザー名を登録しておく。
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
branch名が master の場合は main に変更。
git branch -m main
GitHubのリポジトリから pull してみると、
git pull origin main
次のエラーが発生。
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
ということで、xserverのシェルで公開鍵を作って GitHubに登録する。
cd ~/.ssh
ssh-keygen -t rsa -b 4096 -C "you@example.com"
これで ~/.ssh の中に id_rsa, id_rda.pub が生成される。
id_rsa.pub を vi で開くなどして内容をGitHubへ登録。
SSH keys - GitHub
xserverのシェルから接続できるか確認する。
ssh -T git@github.com
リポジトリの設定でwebhook
GitHubのリポジトリで設定 -> Webhook を開く。
Webhookから呼び出すスクリプト(PHP)
結論から言うと stripslashes($_POST['payload'])
が必要だった。
$payload = stripslashes($_POST['payload']);
$payload = json_decode($payload, true);
Webhookの実行
GitHubのリポジトリへのpushをトリガーとしてWebhookを実行させる。
Webhookに所定のURLを設定。
URLが呼び出されることでpayloadが配信される。
公開サーバー側のスクリプトでpayloadを受け取って所定のpullコマンドを実行。
公開サーバー側のgit管理下のファイルが更新される。
GitHub WebHook POSTs not going through - stackoverflow
Creating webhooks - GitHub Docs