こんにちは、制作の奥田です。
弊社では開発はもちろん、クライアントワークでもGit(分散型バージョン管理)を使ってソースコードを管理しています。
CUIが苦手という方には「SourceTree」のような便利なGUIもあり、デザイナーもデベロッパーも一度は耳にしたことがあるのではないでしょうか?
FTPでアップロードしていると違った場所にファイルをあげてしまったりしてテンパった経験はありませんか?
Gitならその心配は皆無です。
今回はベアリポジトリの作成から、自動デプロイまで一連の流れをご説明いたします。
Table of contents
環境の確認
まずはバージョン管理をしたい環境がssh接続が可能な環境かどうかを確認してください。
さくらのレンタルサーバーであればスタンダード以上が対象となります。
ssh接続の方法はまず、サーバー管理画面より、シェルログインのホストとユーザー名・パスワードを確認しておきます。
ターミナル(Windowsの方はTeraTermなどを使用してください。)を開き、以下のコマンドを実行します。
$ ssh ユーザー名@ホスト名
パスワードを聞かれるので入力するとログインすることができます。
FreeBSD 9.1-RELEASE-p24 (SAKURA17) #0: Thu Nov 5 00:00:00 JST 2015 Welcome to FreeBSD! %
さくらだとこんな感じで表示されると思います。
また、接続を切りたいときはexitでsshの接続を切ることができます。
% exit
ssh公開鍵認証を設定する
ただ、このままだと毎回パスワードを求められてしまいとても不便です。
また、Gitでの接続にも必要なため、公開鍵認証の設定をします。
まず、cd(カレントディレクトリ)コマンドで.sshディレクトリに移動します。
(~/と言うのはホームディレクトリということを表しています。)
% cd ~/.ssh
そして、ssh-keygenと入力し、passphraseの入力を求められるので何も入力せずEnterを2回押します。
% ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/Users/schacon/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /Users/schacon/.ssh/id_rsa. Your public key has been saved in /Users/schacon/.ssh/id_rsa.pub. The key fingerprint is: 43:c5:5b:5f:b1:f1:50:43:ad:20:a6:92:6a:1f:9a:3a schacon@agadorlaptop.local
これで公開鍵と秘密鍵を生成できました。
試しに[ls]と入力してみてください。
現在のディレクトリ配下のファイル一覧を確認できます。
% ls id_rsa id_rsa.pub
この「id_rsa」というファイルが秘密鍵で、「id_rsa.pub」というファイルが公開鍵になります。
公開鍵認証の方法は、秘密鍵を使ってリモート上の公開鍵との認証を行う方法です。
デフォルトで公開鍵の名前は「authorized_keys」というファイル名になっているのでファイル名を変更します。
さらにパーミッションを600に変更しておきます。
% cat id_rsa.pub >> ~/.ssh/authorized_keys % chmod 600 ~/.ssh/authorized_keys
そして秘密鍵をローカル側で取得します。
% cat id_rsa
上記コマンドで表示された文字列をコピーし、ローカルの~/.sshフォルダにid_rsaというファイル名で保存します。
最後にいらないファイルは削除しておきましょう。
% rm id_rsa.pub id_rsa
今度はローカル側の設定です。
.sshフォルダに「config」という名前のファイルを作成し、以下のように記述します。
Host willstyle(ssh接続時に使用する名前) HostName ホスト名 Port 22 User ユーザー名 IdentityFile ~/.ssh/id_rsa
秘密鍵もパーミッションを600に設定します。
$ chmod 600 ~/.ssh/id_rsa
これでssh willstyleと入力し接続できれば成功です。
$ ssh willstyle
ベアリポジトリを作成し、リモートとローカルにクローンする
ではGitのリポジトリを作成します。
まず「ベアリポジトリ」というものを作成します。
「ベアリポジトリ」とはワーキングディレクトリを持たない。
更新情報だけを持っているリポジトリのことで、そのリポジトリを介してリモートとローカルの状態を保つような仕組みです。
まずsshで接続し、reposディレクトリを作成します。
reposディレクトリに移動し、www.gitというディレクトリを作成します。
% mkdir ~/repos % cd repos % mkdir www.git
www.gitに移動し、git initコマンドにbare sharedオプションを付けて実行します。
% cd www.git % git init --bare --shared
これでベアリポジトリの作成は完了です。
次にリモートの公開ディレクトリにクローンします。
% cd ~/ $ git clone /home/○○○/repos/www.git
ここで注意すべき点は、初期リポジトリは空のディレクトリである必要があるため、ディレクトリを空にしておいてください。
同じようにしてローカルにもクローンします。
今回はGUIクライアントの「Source Tree」を利用します。
以下よりインストールしてください。
インストールできたら、新規リポジトリ→URLからクローンを押します。
そして、ssh://willstyleのあとに、ホームディレクトリからrepos/www.gitまでのパスを記述し、
フォームのフォーカスを外した時に左下に「これはGit リポジトリです」と出ればおkです。
あとは保存先のパスを入力しクローンを押せばクローンが始まり、リポジトリ内に.gitフォルダが作成されているはずです。
試しに何かファイルを作成し、add > commit > pushしてみましょう。
index.htmlに以下のように記述し、ローカルリポジトリに保存します。
<h1>Hello world!</h1>
保存してSourceTreeを見てみると「Uncommitted changes」と太字で出てきます。
このようにして「リポジトリに変更がありましたよ」と教えてくれます。そこで「追加/削除」というボタンを押し、なにか警告が出ますが構わず「ok」を押します。
これでファイルを「add」したことになります。
できたら、左端の「コミット」というボタンを押し、メッセージを入力します。
今回は簡単に「first commit.」と入力していますが、コミットメッセージはできるだけわかりやすく記述します。
そしてコミットを押すと「プッシュ」のボタンに1というバッジが表示されます。
「プッシュがたまっていますよ」ということです。
masterにチェックを入れプッシュします。
ここでプッシュして初めてリモートのベアリポジトリに更新内容が送信されます。
プッシュができたら、ssh接続し、更新内容をリモートリポジトリにpullします。
% cd ~/www % git pull
これで、公開URLにアクセスすれば「Hello world!」が表示されているはずです。
自動デプロイの設定と.gitignoreファイルを作成する
このままでは手動でデプロイが面倒なのでpushがあった段階でリモート側でpullするように設定します。
% vi ~/repos/www.git/hooks/post-receive #!/bin/sh # # An example hook script to prepare a packed repository for use over # dumb transports. # # To enable this hook, rename this file to "post-update". cd /home/◯◯◯/www/ && git --git-dir=.git pull
post-receiveファイルはpushがあった際に、ここに書いたshellスクリプトを実行できます。
esc+:wqで保存して閉じ、chmod +xで実行権限を与えます。
chmod +x ~/repos/www.git/hooks/post-receive
これでpushがあった際に自動デプロイすることができます。
最後にGitでバージョン管理したくないファイルを指定します。
例えばWordPressのコアファイルやプラグインは一度送信してしまえば特に追跡する必要の無いファイルです。
そういうファイルを.gitignoreというファイルに記述しておくとGitは追跡をやめます。
.htaccess wp/.htaccess wp/sitemap.xml wp/sitemap.xml.gz wp/wp-config.php wp/wp-content/advanced-cache.php wp/wp-content/backup-db/ wp/wp-content/backups/ wp/wp-content/blogs.dir/ wp/wp-content/cache/ wp/wp-content/upgrade/ wp/wp-content/uploads/ wp/wp-content/plugins/ wp/wp-content/wp-cache-config.php
WordPressをwpフォルダに置いている場合はこのような感じです。
これをルートに配置し、コミット&プッシュしてみてください。
ユーザーの追加で更新者のコミットの管理や、ブランチを切ったりなどGitにはまだまださまざまな機能があります。
まずは事始めとして自動デプロイまでやってみてはいかがでしょうか?