XREAサーバーに自動デプロイ
gitHubにpushしたら自動でサーバーにデプロイされるようにする
- サーバー:XREA(無料プラン)
ローカル環境
- apacheインストール済
$ which apachectl /usr/local/bin/apachectl $ vim /usr/local/etc/apache2/2.4/httpd.conf # ドキュメントルートの設定 DocumentRoot "/usr/local/var/www/htdocs" # index.phpを利用できるように設定 DirectoryIndex index.php index.html
- ブラウザからアクセスできることを確認する
XREAにsshできるようにして公開鍵を置いてくる
管理メニュー→ホスト情報登録→SSH登録
これでローカルPCからsshできるようになる。
# 公開鍵をXREAサーバーに配置する $ scp ~/.ssh/id_rsa.pub [ユーザー名]@[XREAサーバー名]:. # 配置されていることを確認 $ ssh [ユーザー名]@[XREAサーバー名] $ ls -la id_rsa.pub # authorized_keysに追加する -bash-4.2$ mkdir .ssh -bash-4.2$ chmod 700 .ssh -bash-4.2$ mv id_rsa.pub ./.ssh/. -bash-4.2$ cd .ssh/ -bash-4.2$ cat ./id_rsa.pub >> authorized_keys -bash-4.2$ chmod 600 authorized_keys -bash-4.2$ exit # 接続確認 $ ssh [ユーザー名]@[XREAサーバー名] # サーバー名、ユーザー名、パスワードはXREAの管理メニュー→FTP設定に書いてある
デプロイスクリプト
deploy.php
XREAサーバーに置く
<?php require_once(dirname ( __FILE__ ).'/../cfg.php'); $LOG_FILE = dirname(__FILE__).'/hook.log'; $SECRET_KEY = $MY_SECRET_KEY; $POST_DATA = file_get_contents("php://input"); $hmac = hash_hmac('sha1', $POST_DATA, $SECRET_KEY); $signature = substr($_SERVER['HTTP_X_HUB_SIGNATURE'], 5); if ( $signature == $hmac ) { $payload = json_decode($POST_DATA, true); exec('cd htdocs ; git pull 2>&1'); file_put_contents($LOG_FILE, date("[Y-m-d H:i:s]")." ".$_SERVER['REMOTE_ADDR']." git pulled: ".$payload['after']." ".$payload['commits'][0]['message']."\n", FILE_APPEND|LOCK_EX); } else { file_put_contents($LOG_FILE, date("[Y-m-d H:i:s]")." invalid access: ".$_SERVER['REMOTE_ADDR']."\n", FILE_APPEND|LOCK_EX); }
XREAサーバー側であらかじめ対象のリポジトリをgit clone しておく…
gitHubのWebhooksを使う
リポジトリ→Settings→WebhooksからPayload URLとSecretを設定する。
残り作業
ローカルで開発を行っているhtdocsディレクトリをそのままgitHubリポジトリにしていたが、
これをpullするとやはりhtdocsのまま。
XREAはpublic_htmlというディレクトリにアップロードしたものが公開される仕様のため、
XREAサーバーのhtdocs配下にpull してきてからpublic_htmlにmvかcpするスクリプト作る。