サイズ: 5510
コメント:
|
サイズ: 8030
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 9: | 行 9: |
* しかし世の中にはもっとカジュアルにWebサイト運用(HTML一枚程度)したいこともしばしば。 * 今回、そんなライトウェイトな要求に対して!GitHubで回す&自動デプロイを実施するための仕組みを作ってみた。 |
* しかし世の中にはもっとカジュアル(HTML一枚程度)にWebサイト運用したいこともしばしば。 * 今回、そんなライトな要求に対して!GitHubで回す&自動デプロイを実施するための仕組みを作ってみた。 |
行 16: | 行 16: |
* OSについては古いOS(CentOS6等)ではこの手順では実施できない点に注意。 | * ただし、OSについては古いOS(CentOS6等)ではこの手順では実施できない点に注意。 |
行 23: | 行 23: |
* ただし、[[https://snapcraft.io/|スナップクラフト]]固有の問題を回避するためのワークアラウンドだけは別で。 |
|
行 28: | 行 30: |
|| ファイルフック || incron || `0.5.12` || ワークアラウンドのため使用 || | |
行 41: | 行 44: |
基本的なセットアップは実施済みであることとする。 | 基本的な(とは何かは議論しない)セットアップは実施済みであることとする。 |
行 64: | 行 67: |
== Webhook == | == スナップクラフト == |
行 70: | 行 73: |
}}} ※スナップクラフトの有効化のために一度再起動しておくこと。 == Webhook == {{{#!highlight shell numbers=disable |
|
行 73: | 行 82: |
※スナップクラフトの有効化のために一度再起動しておくこと。 | ※スナップクラフトが稼働してる状態で上記コマンドを実行すること。 |
行 85: | 行 94: |
* webhook起動のための設定オプションの指定ができなかったので、`/etc/sysconfig/webhook`を参照するように改変してみた。 | ※Webhook起動のための設定オプションの指定ができなかったので、`/etc/sysconfig/webhook` を参照するように改変してみた。 |
行 90: | 行 99: |
}}} === /etc/httpd/conf/webhook.yaml === {{{#!highlight yaml numbers=disable - id: update-contents command-working-directory: /root execute-command: /root/.webhook/bin/mecho pass-arguments-to-command: - source: string name: '-o' - source: string name: '/root/.webhook/run/activate_id_update-contents' - source: payload name: ref response-message: | Updated, Done. trigger-rule-mismatch-http-response-code: 400 trigger-rule: and: - match: type: payload-hash-sha1 secret: "GitHubに設定するシークレット" parameter: source: header name: "X-Hub-Signature" - match: type: value value: push parameter: source: header name: "X-GitHub-Event" }}} === 後始末 === {{{#!highlight shell numbers=disable sudo restorecon -RFv /etc/systemd/system/snap.webhook.webhook.service.d/ /etc/sysconfig/webhook /etc/httpd/conf/webhook.yaml }}} == InCron == {{{#!highlight shell numbers=disable sudo yum -y install epel-release sudo yum -y install incron sudo systemctl enable incrond sudo systemctl start incrond |
|
行 102: | 行 159: |
= よくある質問とその答え = == Q.ProxyPass設定したならProxyReverseの設定は必須では? == A.webhookに高度な応答(リダイレクトやらクッキーやら)機能が無いので必要ないです。 == Q.ウェブフックへのアクセス制限したいのだが? == A.`https://api.github.com/meta` の応答(JSON)見ると接続元IPアドレスがリストアップしてますねー(棒)。 [[https://developer.github.com/v3/meta/|REST API v3 - Meta]] を参考に設定してみてください。 時々変更してるとは思いますが頑張ってメンテナンスしてください。 == Q. == |
GitHubで回すWebサイト制作
- 思えば、Webサイト制作の現場は、下記のような移り変わりであった気がする。
- エンジニアが作業した(場合によってはHTMLも書く)。
- デザイナーさんが作業するようになった(ちょっとはサーバー側の事情も考慮してくれる)。
- 既存のデザインに対して営業さんがちょこっと修正するようになった(今回の動機)。
- エンジニア・デザイナーさんであれば、FTP(今時はSFTP/SCP)使ってサーバーにアップロードしてくれた。あるいは強制できた。
- 流石に営業さんにそういうツールを使ってもらうのは通じず。
そのために、CSM(Content Management System)導入することもしばしば。
- しかし世の中にはもっとカジュアル(HTML一枚程度)にWebサイト運用したいこともしばしば。
今回、そんなライトな要求に対してGitHubで回す&自動デプロイを実施するための仕組みを作ってみた。
目次
検証環境
- 下記ソフトウェアの利用を前提に検証を実施した。いずれも現時点で最新のリリースに基づいて検証しているが、ある程度古い環境、より新しい環境でも問題無いと思われる。
- ただし、OSについては古いOS(CentOS6等)ではこの手順では実施できない点に注意。
- 上記以外の環境では、以下の点に相違が発生する。当該環境に応じて読み替えたし。
- インストール方法
- インストールされるディレクトリ
- 逆に以下の点は参考にできる。
- 設定パラメータとその意味
- 運用事例
ただし、スナップクラフト固有の問題を回避するためのワークアラウンドだけは別で。
用途 |
ソフトウェア名 |
バージョン番号 |
備考 |
OS |
CentOS 7 |
7.7.1908 |
SELinuxは有効とする |
Webサーバー |
Apache 2.4 |
2.4.41 |
|
Webフック |
2.6.10 |
||
ファイルフック |
incron |
0.5.12 |
ワークアラウンドのため使用 |
検証目標
GitHubに対して以下の設定を行う。
- WebフックのURLの指定
- 秘密鍵の指定
- デプロイ用のSSH鍵の設置
- 上記設定のためにサーバー側のセットアップを行う。
- もちろんWebフックを受けて実際にデプロイを実施する。
- HTTPSオンリーサイトとしてHTTPでの運用は行わない。
ミドルウェアの初期セットアップ
OS
基本的な(とは何かは議論しない)セットアップは実施済みであることとする。
ファイアウォール設定
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
Apache
sudo yum -y install https://centos7.iuscommunity.org/ius-release.rpm
sudo yum -y install httpd24u httpd24u-tools
/etc/httpd/conf/httpd.conf
ProxyPass /hooks/ http://localhost:9000/hooks/
<Proxy *>
Require all granted
</Proxy>
スナップクラフト
sudo yum -y install snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap
sudo systemctl reboot
※スナップクラフトの有効化のために一度再起動しておくこと。
Webhook
sudo snap install webhook
※スナップクラフトが稼働してる状態で上記コマンドを実行すること。
/etc/systemd/system/snap.webhook.webhook.service.d/override.conf
systemctl edit snap.webhook.webhook.service コマンドを呼び出して以下の設定を行う。
[Service] EnvironmentFile=-/etc/sysconfig/webhook ExecStart= ExecStart=/usr/bin/snap run webhook $OPTIONS
※Webhook起動のための設定オプションの指定ができなかったので、/etc/sysconfig/webhook を参照するように改変してみた。
/etc/sysconfig/webhook
OPTIONS="-hooks /etc/httpd/conf/hooks.yaml -hotreload -ip 127.0.0.1 -port 9000"
/etc/httpd/conf/webhook.yaml
- id: update-contents
command-working-directory: /root
execute-command: /root/.webhook/bin/mecho
pass-arguments-to-command:
- source: string
name: '-o'
- source: string
name: '/root/.webhook/run/activate_id_update-contents'
- source: payload
name: ref
response-message: |
Updated, Done.
trigger-rule-mismatch-http-response-code: 400
trigger-rule:
and:
- match:
type: payload-hash-sha1
secret: "GitHubに設定するシークレット"
parameter:
source: header
name: "X-Hub-Signature"
- match:
type: value
value: push
parameter:
source: header
name: "X-GitHub-Event"
後始末
sudo restorecon -RFv /etc/systemd/system/snap.webhook.webhook.service.d/ /etc/sysconfig/webhook /etc/httpd/conf/webhook.yaml
InCron
sudo yum -y install epel-release
sudo yum -y install incron
sudo systemctl enable incrond
sudo systemctl start incrond
デプロイ用SSH鍵の準備
sudo ssh-keygen -t ssh-ed25519 -C root@$(hostname) -N "" -f /root/.ssh/id_ed25519
以下の点に注意すること。
root 鍵が必要とするため注意。
- パスフレーズの設定は行わない。
よくある質問とその答え
Q.ProxyPass設定したならProxyReverseの設定は必須では?
A.webhookに高度な応答(リダイレクトやらクッキーやら)機能が無いので必要ないです。
Q.ウェブフックへのアクセス制限したいのだが?
A.https://api.github.com/meta の応答(JSON)見ると接続元IPアドレスがリストアップしてますねー(棒)。 REST API v3 - Meta を参考に設定してみてください。 時々変更してるとは思いますが頑張ってメンテナンスしてください。
Q.