gitlab 用の Dockerfile と関連スクリプトを公開しました。
一つのDockerコンテナの中で、アプリケーション本体だけでなく、assets配信用のnginx、gitlab-shell用のsshサーバ、redis-server等、一連のプロセスが全部動きます。
MySQLサーバだけ用意すれば、このDockerfileだけで、gitlabを手軽にインストールできます。
また、リポジトリを自動的に他のサーバにバックアップするための、lsyncd用のDockerfileも付属しています。
下記のDockerfileを参考に作成しました。
使い方
MySQLサーバのインストール
先に、MySQLサーバをインストールしてください。
MySQLサーバはDockerで動かす必要はありませんが、下記の記事で紹介したスクリプトを使うと、DBも自動バックアップつきで運用できます。
Docker で レプリケーションつきの MySQL を立ち上げる - Qiita [キータ] http://qiita.com/essa/items/440d76f73847e6e27099
リポジトリをクローン
次に、Dockerfile等が入ったリポジトリをコピーします。
git clone https://github.com/essa/docker-gitlab.git
cd docker-gitlab
Docker imageの構築
Docker imageをビルトします。
sudo docker build -t gitlab .
この処理は、Ruby のコンパイルや、gem のインストールでかなり時間がかかります。
タグを上記コマンドから変更した場合は、以下のstart_xxx.sh の起動スクリプトもそれに合わせて変更してください。
設定ファイルの修正
次に下記のスクリプトを実行します。
./setup_config.sh
最初に実行した時は、このスクリプトは、env というファイルを以下の内容で作成します。
# password for git user of gitlab
export Password="password"
export MySQLServerIP="(IP ADDRESS OF YOUR MYSQL SERVER)"
export MySQLServerPort="3306"
export MySQLPasswordForRoot="password"
export ServerName="(YOUR SERVER NAME FOR GITLAB)"
export GitlabPort="8080"
export LsyncdTargetHost="(YOUR SLAVE HOST)"
export LsyncdUser="(YOUR ACCOUNT OF SLAVE HOST)"
export LsyncdIdentityFile=$HOME/.ssh/id_rsa
このファイルをエディタで、ご自分の環境に合わせて修正してください。
修正したら、もう一度、先のスクリプトを実行します。
./setup_config.sh
"env"が存在すると、このスクリプトは、この内容を元に、config/の下に、以降で必要な設定ファイルを作成します。作成するのは、以下のファイルです。
- database.yml
- gitlab.yml
- nginx (gitlab コンテナ内の nginx 用定義ファイル)
- nginx_front (front end 用別コンテナ内の nginx 用定義ファイル)
- ssh_config_for_lsyncd (lsyncdで使用する、ssh/config ファイル)
これらの内容を確認して、必要があれば修正してください。
gitlab 初期設定
次に以下のコマンドで gitlab用のコンテナを起動して、gitlabの初期設定を行います。
chmod +x scripts/firstrun.sh
sudo ./start_docker_gitlab.sh
このコンテナの起動スクリプトは、script/start.sh ですが、script/firstrun.sh が実行可能な場合は、start.shの中からこれを起動し、その中で初期設定が行なわれます。
初期設定の内容は、
- gitlab用DB、MySQLユーザの作成
- rake gitlab:setup の実行
です。実行後に、firstrun.shの実行許可ビットを落として、二度と実行しないようにします。
何らかの理由で、初期設定をやり直す場合は、chmod +x script/firstrun.sh を行なってから、コンテナを再起動してください。
実行
初期設定完了後、そのままgitlabが起動します。二回目以降は、下記のコマンドで起動してください。
sudo ./start_docker_gitlab.sh
http://localhost:8080/ からアクセスできます。初期設定の時に、下記の管理者アカウントが作成されていますので、これでログインしてください。
admin@local.host
5iveL!fe
制限事項
メール送信の機能はまだ設定、テストしていません。ユーザ登録後のパスワード通知メールが送信されないので、管理者アカウントからパスワードを設定して使ってください。
おまけ1 (lsyncd によるリポジトリのコピー)
gitlabのデータは、MySQLのDBと、data/ ディレクトリに保存されます。この data/ ディレクトリを別のサーバにバックアップするための lsyncd をDocker 配下で起動するスクリプトを付属しています。
ビルド
(cd docker-lsyncd; sudo docker build -t lsyncd .)
実行
sudo docker-lsyncd/start_lsyncd.sh `pwd`/data
バックアップ先のサーバは、config/ssh_config_for_lsyncd で指定します。( env に設定した内容により、./setup_config.sh で作成されているはずです)
docker-lsyncd/ssh/ が、コンテナ内で lsyncd を実行するユーザの .ssh にマップされますので、必要であれば、秘密鍵等をここにコピーしてください。
おまけ2 (front end 用の nginx)
上記のgitlabコンテナは、nginxを含んでいますが、このnginxは、gitlab専用になります。
もし、同じサーバで別の virtual host を立ちあげる場合は、別のコンテナで front end 専用の nginx を起動することができます。
docker-nginx-front/sites-enabled/ に、virtual host 用の定義ファイルをコピーしてから、下記のコマンドで起動してください。
(cd docker-nginx-front; sudo docker build -t nginx .)
sudo docker-nginx-front/start_nginx.sh