LoginSignup
1
4

More than 3 years have passed since last update.

Gitを使って簡単にデプロイできるようにしたい【初心者向け】

Last updated at Posted at 2020-04-27

Qiita初投稿です。自分の理解の整理も兼ねて。
早速始めます。

目標

GitにPushしたら自動でサーバーにデプロイできるようにする。
Herokuを今まで使っていたのだが、ラズパイで自分でサーバーを建てたので同じ仕組みを実現したい。

git_deploy.png

概要

作業の流れ

サーバー側

  1. Gitリポジトリ作成
  2. デプロイ先にclone
  3. 自動化のためのフック作成

クライアント側(こちらで開発)

  1. Gitリポジトリ作成
  2. Git remoteの設定
  3. pushしてデプロイ!

環境

  • Raspberry Pi 4 Model B
    • Git 2.2
    • Apache
  • MacBook Pro
    • Git 2.24

※サーバー側、クライアント側共にGitをインストールしておく
※サーバー・クライアント間でSSHで接続できるようにしておく

開始

定義

ここでは下記のように進めます。各自読み替えてください。

  • Gitリポジトリを置く場所
    • /hoge/fuga/git
  • Gitリポジトリ名
    • sample.git
  • デプロイ先
    • /var/www/piyo/sample

まずはサーバー側でGitリポジトリを作る

サーバー側の任意の場所に移動してGit用のディレクトリを作成します。

cd /hoge/fuga/git
mkdir sample.git
cd sample.git
git init --bare

git initでGitリポジトリの初期化ができる。オプションの--bareは他のリポジトリからpushできるようにするために必要。
--sharedオプションを付ければ、グループで共有するときに便利らしいが、今回は使わない。必要な場合は参考文献の記事を参照。


脱線)ベアリポジトリ・ノンベアリポジトリとは

違いはワーキング・ディレクトリ(実際のファイルがあるディレクトリ)を持つか持たないか。

  1. 実際のファイルを持つノンベアリポジトリで開発したものを、
  2. 更新情報だけを持つベアリポジトリにpushして管理する
  3. ベアリポジトリの更新時にフックが発火し、デプロイ先にpullされる(実際のファイルが作られる)

git_deploy_bare.png

ここの話はこの記事が詳しい。
ベアリポジトリとノンベアリポジトリ:理論編〜GitでWordpressのテーマを管理


note

Gitリポジトリを管理者権限で作成した場合は、所有者を変更しなければpushできない。
SSHでログインするユーザーに変更しておく。
例)pi@192.168.1.1でSSH接続するならば、ユーザーpiに所有者を変更する。

cd /hoge/fuga/git
sudo chown pi.pi -R sample.git

次にクライアント側でGitリポジトリを作成

デプロイしたいファイルがある階層に移動し、Gitリポジトリを作る。こちらは実際のファイルを持つノンベアリポジトリなので、--bareは付けない。

cd /path/to/your/app
git init

remoteの設定

クライアント側にファイルの送信先の設定をする。ファイルの転送にはSSHを使うため、サーバー・クライアント間でSSHの設定を済ませておく。

git remote add origin ssh://ユーザー名@IPアドレス/hoge/fuga/git/sample.git

例えばユーザー名がpi、ローカルネットワークのIPアドレスが192.168.1.1であれば、ssh://pi@192.168.1.1/hoge/fuga/git/sample.git
ポートを指定する場合は、ssh://pi@192.168.1.1:22222/hoge/fuga/git/sample.gitのようにする。

pushしてみる

これから更新するたびに下記の動作をすることになる。そのうち指が超高速で動くように。

git add .
git commit -m "First Commit"
git push origin master

デプロイ先にclone

サーバー側に戻る。git pullする設定をする前に、まずはファイルを展開したい場所にcloneしてやる必要がある。

cd /var/www/piyo
git clone /hoge/fuga/git/sample.git

中を見るとgit pushしたファイルがあるはず。

cd sample
ls

自動化のためのフック作成

フックとはGitリポジトリに特定のアクションが起きたときに発火するスクリプト。
post-receiveというファイルをhooks内に作る。

cd hoge/fuga/git/sample.git/hooks
nano post-receive
post-receive
#!/bin/sh
cd /var/www/piyo/sample
git --git-dir=.git pull

これ以外にもスクリプトを書くこともでき、私は変更を反映するためsudo systemctl restart apache2と書き足した。

作ったら実行権限を与えてやる。

chmod +x post-receive

コマンドを打って動くかどうか確認。

./post-receive

もう一回、git add . git commit -m "piyopiyo" git push origin masterの一連の流れをやってみてちゃんとデプロイされてるか試してみて、新しいファイルがあればOK。
ダメだったら、デプロイ先のディレクトリにSSHでログインするユーザーに書き込み権限があるか等を確認してみる。

以上、最後まで読んでいただきありがとうございました。
間違いがあれば、コメントで知らせていただけると助かります。

参考文献

gitでシンプルなデプロイ環境を作る

  • グループで管理したい場合はこの記事の最後を見ると良い

自前のサーバーにGitリポジトリを作成してプッシュでサイト更新する

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4