自分専用の git サーバーを作ろう

原文は 2015 年 4 月 17 日に掲載されました。
Manage your code on your own server by running a bare, basic Git server or via the GitLab GUI tool.

今年 4 月は、

Git サーバーの誕生記念

でした。Git は、Linus Torvalds が開発した バージョン管理システムです。Git  は、世界中のまさに国境を越えた何百万というユーザーに使われています。

自分専用の Git サーバーを作る

GitHub は素晴らしいサービスですが、特に、ユーザーが個人や小さな会社の場合、限界や制限があります。GitHub の制限の一つとして、無料のサービスでは、コードの個人ホスティングが許されていないことがあります。

個人用のリポジトリ管理には、月 $7 が必要です

。リポジトリが増えると、料金も増えます。

このような制限を回避したい場合や、もっと自分でコントロールしたい場合には、自分専用の Git サーバーを構築するのが一番です。コストが削減できるだけでなく、サーバーの管理も自分で行えます。先進的な Linux ユーザーの大半は、自身のサーバーをお持ちだと思いますので、その上に Git サーバーを構築するのです。

このチュートリアルでは、自分のサーバー上でコードを管理する 2 つの方法を説明します。1 つ目は、ベア、つまり Git サーバーを直接使う方法、2 つ目は

GitLab

 と いう GUI ツールを使う方法です。ここでは、パッチをすべて当てた Ubuntu 14.04 LTS を VPS 上で利用します。

サーバーに Git をインストールする

リモートとローカルにサーバーがあり、両方で仕事をする環境を想定します。それぞれをリモート サーバー、ローカルサ ーバーと呼びます。

まず、両方のサーバーに Git をインストールします。ディストリビューションにあるパッケージから Git をインストールします。マニュアル (訳注:ソースからコンパイルする) でインストールしてもかまいません。ここでは、簡単な方法で進めます。

sudo apt-get install git-core

Git のユーザーを追加します。

sudo useradd git
passwd git

容易にサーバーへアクセスするために、パスワードなしの ssh login ができるようにします。ローカル サーバーで ssh の鍵を作成します。

ssh-keygen -t rsa

鍵の格納場所を尋ねられますが、Enter キーを押して、標準の場所 (訳注:~/.sshです) とします。次に、リモート サーバーにアクセスするためのパス フレーズを尋ねられます。これで、公開鍵と秘密鍵の 2 つの鍵が生成されます。公開鍵の格納場所を記録しておきます。

これらの鍵をサーバーへコピーして、両サーバーが通信できるようにします。以下のコマンドをローカル サーバーで実行します。

cat ~/.ssh/id_rsa.pub | ssh git@remote-server "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"

サーバーに ssh で接続して、Git のプロジェクト ディレクトリを作成してください。リポジトリ用に任意のパスを使用できます。

git@server:~ $ mkdir -p /home/swapnil/project-1.git

このディレクトリへ移動します。

cd /home/swapnil/project-1.git

 空のリポジトリを作成します。

git init --bare
Initialized empty Git repository in /home/swapnil/project-1.git

ローカル サーバーに Git リポジトリを作成します。

mkdir -p /home/swapnil/git/project

このディレクトリへ移動します。

cd /home/swapnil/git/project

 ディレクトリ下に、プロジェクト用のファイルを作成します。ディレクトリはそのままで、git を初期化します。

git init 
Initialized empty Git repository in /home/swapnil/git/project

リポジトリにファイルを追加します。

git add .

ファイルを追加したり、変更したりするたびに、上記の add コマンドを実行します。ファイルを変更したら、コミット メッセージを記入する必要があります。コミット メッセージとは、修正点を説明するものです。

git commit -m "message" -a
[master (root-commit) 57331ee] message
 2 files changed, 2 insertions(+)
 create mode 100644 GoT.txt
 create mode 100644 writing.txt

この例では、Got (Game of Thrones review) というファイルに、いくつかの修正をしました。それで、コマンドを実行して、ファイルへの修正を記録します。上記のコマンドの '-a' オプションは、リポジトリ中の全ファイルへのコミットを意味します。

もし、1 つのファイルだけに変更を加えた場合は、'-a' の代わりに、ファイル名を指定します。

例です。

git commit -m "message" GoT.txt
[master e517b10] message
 1 file changed, 1 insertion(+)

  ここまでは、ローカル サーバーでの作業でした。次に、これらの変更をリモート サーバーのリポジトリに push し、インターネットの他のチーム メンバーから参照できるようにします。

git remote add origin ssh://git@remote-server/repo-<wbr< a="">>path-on-server..git

push または pull コマンドで、サーバーとローカル サーバー間で変更をやりとりできるようになりました。

git push origin master

他のチーム メンバーがこのプロジェクトに参加する時は、自身のローカル サーバーに、リモート サーバーのリポジトリのクローンを作成します。

git clone git@remote-server:/home/swapnil/project.git

/home/swapnil/project.git は、リモートサーバー上のプロジェクトのパス名です。ご自身の名称と置き換えてください。

ローカル サーバーのディレクトリに移動します (もちろん、ご自身のプロジェクトの名称を使ってください)。

cd /project

これで、メンバーはファイルを編集できます。変更後コミットし、リモート サーバーへ push します。

git commit -m 'corrections in GoT.txt story' -a
And then push changes:
git push origin master

ここまでの内容で、初心者が自身のサーバー上で Git を使い始めるための情報が得られたと思います。もしローカル サーバー上で GUI で管理したい時は、Linux 上の QGit や GitK を使用できます。

QGit

GitLab を使う

ここまでは、プロジェクトの所有者や参加者がコマンド ライン インタフェースで Git を利用しました。ちょっと難しかったかもしれません。GitHub は世界最大のコード ホスティング サービスですが、ソフトウェアは公開されていません。オープン ソース ではないのです。ですから、ソース コードを入手およびコンパイルして自分のための GitHub を構築することはできません。WordPress や Drupal と違って、GitHub をダウンロードして、自身のサーバーで実行することはできません。

オープン ソースの世界では、いろいろな解決方法があります。GitLab が今回の解決方法です。これはオープン ソース プロジェクトで、ユーザーが自身のサーバー上で GitHub に似たプロジェクト管理システムを実行できるようにするものです。

チーム メンバーや会社で、GitHub に似たサービスを提供するために GitLab を利用できます。個人的なプロジェクトを公開する前に、GitLab を使って開発できます。

GitLab は、伝統的なオープン ソース ビジネス モデルを採用しています。2 つのプロジェクトがあります。1 つは、ユーザーが自身のサーバー上にインストールできる無料のオープン ソース ソフトウェア、もう 1 つは GitHub に似たサービスです。

ダウンロード版にも、2 つの版があります。無料のコミュニティ版と有料のエンタープライズ版です。エンタープライズ版は、コミュニティ版に機能を追加して、エンタープライズ ユーザーが使えるようにしたものです。WordPress.org や WordPress.com が提供しているものに似ています。

コミュニティ版は、シングル サーバーやクラスター上で 25,000 ユーザーまでサポートしています。Git リポジトリ管理、コード レビュー、問題点管理、アクティビティ レポートや wiki が提供されています。GitLab CI (Continuous Integration) 機能で継続的にアップデートされます。

Digital Ocean (訳注: https://www.digitalocean.com/) のような VPS は GitLab をサポートしています。自身のサーバー上で稼働したい時は、マニュアルでインストールします。GitLab は各ディストリビューション用にパッケージを提供しています。インストール前に、GitLab が適宜 e メールを送信できるように SMTP サーバーを設定できます。Postfix が推奨されています。そこで、まず Postfix をインストールします。

sudo apt-get install postfix

インストール中に、いくつか設定項目がありますが、省略しないでください。もし設定し忘れたら、以下のコマンドで再設定してください。

sudo dpkg-reconfigure postfix

このコマンドを実行して、"Internet Site" を選択し、Gitlab が使用する e メール ID を設定します。

ここでは以下のようにしました。

 このメールアドレスは、スパムロボットから保護されています。アドレスを確認するにはJavaScriptを有効にしてください
 

postfix 用のユーザー名を作成します。次のページでは、メールの行き先を設定します。そのあとは、標準の値を使用してください、Postfix のインストールと設定が完了したら、GitlLab をインストールします。

wget を使ってパッケージをダウンロードします (リンクは、

最新のパッケージ

を参照してください)。

wget https://downloads-packages.s3.amazonaws.com/ubuntu-14.04/gitlab_7.9.4-omnibus.1-1_amd64.deb

インストールします。

sudo dpkg -i gitlab_7.9.4-omnibus.1-1_amd64.deb

GitLab の設定をします。

sudo gitlab-ctl reconfigure

GitLab にアクセスするためのドメイン名を設定します。ファイルを開きます。

nano /etc/gitlab/gitlab.rb

'external_url' を編集して、サーバー ドメインを設定します。ファイルを格納して、新規に作成された GitLab サイトを WWW ブラウザで開きます。

GitLab 1

標準では、管理者として 'root' ユーザーが、そのパスワードとして '5iveL!fe' が作成されます。GitLab サイトにログインしてパスワードを変更します。

GitLab 2

パスワードを変更したら、サイトにログインしてプロジェクトを始めましょう。

GitLab manage project page

GitLab には数多くの機能とオプションがあります。映画 Matrix の言葉を借りれば、「GitLab の機能を全部説明することはできない。自分自身で見つけるしかない。」

(訳注: Matrix が何であるか、誰も説明することはできない。自分自身で見つけるしかない。
“Unfortunately, no one can be told what the Matrix is. You have to see it for yourself.”)