Shell

シェルスクリプトでCMS作成日記:【第3回】文書管理の仕組みを作る(後編)

どうも、シローです。

それでは前回の続きです。

今回は、前回のCMSのコンテンツを自動でデプロイ(Gitでpullして公開する)処理を作っていきます。

ファイル構成

設定値プログラム

conf.sh

 

デプロイ用スクリプトを作成

Gitから最新のソースを取得するスクリプトを作ります。

これは、最終的にGitでプルリクエストを受け取ったときに、GitのWebフック機能で自動実行されるようにします。

fetch.sh

システムインストールプログラムを作成

デプロイ用プログラムをcgiとして実行できる用に/var/www/shiro-mmm_contentsにコンテンツ用のリポジトリをインストールして、/var/www/shiro-mmmにデプロイ用cgiをfetch.shから生成するプログラムを作ります。

deploy.sh

7行目の[ "$USER" = "root" ] は実行するユーザがrootかをチェックしています。

もし、ルートユーザではなかった場合は、エラーステータス1を返して、そこでプログラムがストップします。

rsyncコマンド

rsyncは第一引数のディレクトリを第二引数のディレクトリ配下に同期するコマンドです。

-a で転送元のディレクトリの内容を可能限りコピーして

-v で転送量などの統計情報を表示します。

/dev/urandomとは

/dev/urandomはランダムなバイナリーデータを無限放出するプログラムです。

これと次のtrとheadコマンドで乱数を生成します。

trコマンド

trはテキストを置換するコマンドです。

-cd xxx と指定するとxxxのパターンだけを取ってきてくれます。

headコマンド

headとは文字列を文字数や行数で区切って表示するコマンドです。

-c xxx でxxx文字分だけ取得します。

コマンドを実行してみる

/var/www/shiro-mmm配下にfetch_(乱数).cgiのファイルが作成されました。

 

CGIプログラムをGithubから実行できるようにapacheの設定を変更

先ほど作られたfetch_(乱数).cgiをGithub側から実行できるようにapache設定ファイルを変更します。

/etc/apache2/site-available配下にlet's encriptを導入した時に作成されたconfファイルがあると思うのでそれを編集します。

(筆者の環境ではshiro-mmm-le-ssl.confという名前)

/etc/apaches/site-available/shiro-mmm-le-ssl.conf

14 ~ 21行にcgi実行許可に関する処理が記述されています。

15行目のOptions

Optionsディレクティブはディレクトリ制御に関する値を持ちます。

+をつけると、それを適用して、-をつけるとそれを外すことができます。

All すべてアクセスできる
None すべてアクセスできない
FollowSymLinks シンポジックリンクへのアクセスができる
MultiViews 複数の拡張子のファイルにアクセスできる(index.html, index.phpなど)
ExecCGI CGIを実行できる

20行目のAddHandler

AddHandlerでアクセスされたファイルのハンドラを指定することができます。

ハンドラ(handle = 扱う)とはファイルをどのように実行するかを意味します。

cgi-scriptと指定することで、cgiとしてアクセスしたファイルを実行します。後ろに.cgiと指定することで

「.cgiファイルにアクセスするとcgiとして実行する」という意味になります。

修正したら、apacheを再起動します。

curlコマンドで実行してみる

完璧や・・

GithubでWebフックの設定をしよう

先ほどのデプロイプログラムをGithubから実行できるように、Githubの管理画面での設定を行います。

まずは、リポジトリのSettings画面にいきます。

そして、左側のWebhooksボタンを押して、Webフック設定画面に遷移して。

Add webhookボタンを押して、Webフックを作成します。

Webフック画面ではPayload URLに、先ほどcurlで実行したURLを入力します。

また、Which events would you like to trigger this webhook? では、Just the push event. を選択します。

これで、コンテンツリポジトリにpushされれば、勝手にコンテンツをデプロイしてくれます。

これで、おしまいです。

次は、記事の描画プログラムを作成していきます。

-Shell
-, ,

© 2023 Shiro's secret base