概要
みなさんこんにちはcandleです。
今回はgitのリモートプライベートリポジトリを作ってみたいと思います。
リモートリポジトリと言えば、Githubとかbitbucketが有名だと思います。会社やチームで開発する人々は大半がgithubを使っていますが、正直githubをプライベートリポジトリで使うメリットがよくわからないcandleです。
それぐらい自分でgitサーバたてればいいんじゃないかなと思っています。
この記事ではgithubと同じpull requestの環境を作ってみたいと思います。
下の様な環境で説明して行きたいと思います。
前提
それぞれのPCにgitが入っている
gitの操作になれている
サーバ側にsshサーバが構築されている
どちらもsshがインストールされている。
クライアント側のPCに公開鍵と秘密鍵を作る
では、クライアントの設定からやってみたいと思います。
もしも、自分はいつも使っている秘密鍵と公開鍵があるよという人は新しく作る必要はありませんので飛ばしてください。
ホームディレクトリに移動して、.sshフォルダに移動します。もしも.sshフォルダが無い場合は下のコマンドで作成してから移動してください。
cd ~ mkdir .ssh cd .ssh
.sshフォルダの中で下のコマンドを入力して公開鍵と秘密鍵を作ります。
ssh-keygen -t rsa
いくつか入力するように聞いてくるので答えていきましょう。
Generating public/private rsa key pair. Enter file in which to save the key (/Users/candle/.ssh/id_rsa): <-エンター Enter passphrase (empty for no passphrase): <-好きなパスワード Enter same passphrase again: <-上と同じパスワード
初めの問いはどこに鍵を置くか聞いてきます。.sshの中でいいので、エンターを押しましょう。次にパスワードを聞いてきます。本番でも使いたい鍵にするなら複雑なものにすると良いでしょう。私は「woodgraph」というパスワードにしました。
確認の為のパスワード求められるので、同じパスワードを入力しましょう。
作成できたとおもいます。
確認のためlsコマンドをうちましょう。id_rsaとid_ras.pubがあるでしょうか
無事作成できましたね。
今作った秘密鍵(id_rsa)はパスワードがある秘密鍵です。なにかある度にパスワードを求められるのは面倒なので、パスワード無しの秘密鍵に変換しまう。
openssl rsa -in id_rsa -out id_rsa_no_pass //パスワード無しの秘密鍵を作成する
これをすると、鍵を作った時に入力したパスワードが求められるので、それを入力しましょう。私の場合は「woodgraph」でした。
このid_rsa_no_passの権限を600にしましょう。
sudo chmod 600 ~/.ssh/id_rsa_no_pass //権限を変更する
既にあるid_rsaをリネームします。ファイル名の先頭にアンダーバーをつけます。
mv id_rsa _id_rsa //名前を変更
パスワード無しの秘密鍵をid_rsaという名前に変更します。
mv id_rsa_no_pass id_rsa //名前を変更
最終的にこういうファイル配置になります。
クライアント側の公開鍵認証の設定は完了です。
クライアントの公開鍵をサーバに登録する
クライアント側で作ったid_rsa.pubファイルをサーバ側に送信してください。
送信の仕方はパスワード認証を使ったscpとか普通にftpでも良いし、usbでもかまいません。とにかく、クライアントにある今作成したid_rsa.pubをサーバに送ってください。
私はscpを使います。下のような感じになると思います。といってもipアドレスは人それぞれなので各自調べるなりして送ってみてください。macからubuntuに送っています。
scp ~/.ssh/id_rsa.pub candle@192.168.56.101:/home/candle/ |
サーバ側のPCを開いて、送られたファイルがあるか確認してください。
これを、サーバ側の.sshフォルダに移動させます。もしも、.sshフォルダが無ければ作ってください。
mkdir ~/.ssh mv ~/id_rsa.pub ~/.ssh/ cd .ssh/ ls
サーバの.sshフォルダにクライアントの公開鍵が置かれただけではサーバはこの公開鍵を認識できません。sshの設定ファイル作り、そこに設定を記述します。.sshフォルダの中で設定ファイルを作ります。
touch authorized_keys
authorized_keysファイルにid_rsa.pubの内容を書き込みます。
cat id_rsa.pub >> ./authorized_keys
これでクライアントからサーバに対して公開鍵を使った認証でssh接続が可能になりました。
試しにmacからサーバにssh接続します。
ssh -i ~/.ssh/id_rsa_no_pass candle@192.168.56.101
サーバ側にリモートリポジトリを作る
ここからgitをやっていきます。サーバ側にリモートリポジトリ用のフォルダを作ります。私の環境ではubuntuサーバにセットアップします。
cd ~ mkdir service.git
service.gitに移動して
cd service.git
リモートリポジトリを作る時は一般に、誰もがアクセスできる様に作ってしまうのですが、
公開鍵認証が出来る人のみアクセス許可をしたいので、下のコマンドで作ります。
git --bare init
すでにSSHでマシーンにアクセスしているといことはサーバ側のIPアドレスかホスト名は把握しているかもしれませんが、確認します。
サーバ側のIPアドレスかホスト名を後々使いますので確認しましょう。
端末でifconfigとすればそのサーバのIPアドレスが分かります。
ifconfig
私の場合は192.168.56.101でしたね。
クライアントのgit設定
次にクライアント側のgitの設定をします。Mac環境で説明します。
私の場合はホームディレクトリに「myservice」というgitリポジトリを作ります。
cd ~ mkdir myservice cd myservice git init
gitのユーザー名とメールアドレスを登録しておきます。
git config user.name "candle" git config user.email candle@example.com
リモートリポジトリを登録する
次に、リモート先のリポジトリをクライアント側で設定します。
この設定をする事でローカルのgitがどこにアップロードしたら良いのか分かる様になります。
一般に下の様にセットします
git remote add origin ssh://ログイン名@IPアドレスかホスト名/リモートリポジトリのフルパス
私の場合ですと、ログイン名が「candle」でサーバ側のIPアドレスは192.168.56.101で、リモートリポジトリのパスが/home/candle/service.gitなので
git remote add origin ssh://candle@192.168.56.101/home/candle/service.git
になります。(下の画像remote addが少し間違えています。)
これでクライアント側のgitの設定は終わりました。
クライアントのgitでcommitする
実際にローカルで適当にファイルを作って、リモートリポジトリにプッシュしてみましょう。
ファイルを作ります。
touch index.html
適当なエディタで中身を記述します。私はいつもemacsで編集します。
emacs index.html
中身は下のをコピペして保存します。
<!doctype html> <html lang="ja"> <head> <meta charset="UTF-8"/> <title>Document</title> </head> <body> </body> </html>
gitにアッドして
git add .
コミットします。
git commit -m "first commit"
次に、このコミットをサーバ側にpushします。先ほどリモートリポジトリをセッティングしました。一応確認のため下のコマンドでリモート先を確認しましょう。
git remote -v
リモートリポジトリにプッシュします。
git push origin master
まとめ
gitとsshと公開鍵認証系をうまく使ったやり方を行いました。git のremote設定もわんちゃんあるんじゃないかと試してこのやり方に落ち着きました。
あと、まだ、チームでこのやり方で開発した事がないので、本当にgithubみたいな挙動になるかわかりません。分かり次第、ここに記入します。