GitLab環境爆速準備(Ubuntu Server 12.04 LTS + Docker)
明日からチーム内に開発用リポジトリが必要となったので、Dockerのgitlab公開コンテナを利用して楽してさくっと準備する設定メモ
Ubuntu Server Precise 12.04 LTS
2017年4月まではサポートされてるので、Download Ubuntu ServerからUbuntu Server 12.04 LTS 64-bitのisoイメージをダウンロードしてCD作って、社内で調達したラップトップにガイダンスに従いインストール
- Radtekの無線ネットワークのファームウェア(802.11g)がないのでインストールするかどうかの問いかけに対しては「いいえ」を選択
Docker
Docker公式のUbuntu Precise用のInstallationに従いインストール。基本的に公式そのままだけどproxy必須環境だったので設定
proxy設定
http_proxy
とhttps_proxy
を設定
$ export http_proxy="http://社内proxyサーバ"
$ export https_proxy="http://社内proxyサーバ"
sudo時にも利用できるように/etc/sudoers
にenv_keep
を指定
$ sudo visudo
+ Defaults env_keep="http_proxy"
+ Defaults env_keep="https_proxy"
Dockerインストール
公式の手順通りに対応。LXCのバグが原因でDockerはカーネルが3.8がいいけど、Ubuntu Preciseのカーネルは3.2なのでバックポートされたカーネルをインストールってことらしい
$ sudo apt-get update
$ sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring
再起動
$ sudo reboot
鍵追加
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
sudo apt-get update
やsudo apt-get install lxc-docker
など行ってくれるスクリプト実行
$ curl -s https://get.docker.io/ubuntu/ | sudo sh
インストール確認
$ docker help
-
公式ドキュメントによるとインストール確認は
$ sudo docker info
で行うみたい - さらにHello Worldもすればよいが省略
バージョン確認
$ sudo docker version
Client version: 0.9.1
Go version (client): go1.2.1
Git commit (client): 3600720
Server version: 0.9.1
Go version (server): go1.2.1
Git commit (server): 3600720
Last stable version: 0.9.1
GitLabインストール
docker indexでGitLabのコンテナを探すといろいろ見つかったけど、trusted repositoryでスターも多くてしっかりとしたドキュメントのsameersbn/gitlabを使うことにする。
バージョンにこだわりないので、ドキュメントに従いまず最新のコンテナをpull
$ sodo docker pull sameersbn/gitlab:latest
--name
オプションはgitlabにしてdocker run
$ sudo docker run --name gitlab -d sameersbn/gitlab:latest
gitlabが登録後に起動確認
$ GITLAB_IP=$(sudo docker inspect gitlab | grep IPAddres | awk -F'"' '{print $4}')
-
docker inspect gitlab
の結果からgrepとawk使ってipをGITLAB_IP
に設定
テキストブラウザで確認しようと思ったら入ってなかったので入れてから確認
$ sudo apt-get install xbg-utils
$ xdg-open "http://${GITLAB_IP}"
ログイン画面が表示されたのでホストマシンからは疎通確認完了。はやい!ありがとうDockerとsameersbn!!
参考資料
- Installation on Ubuntu - Docker Documentation
- Hello world example - Docker Documentation
- sameersbn/gitlab Repository | Docker Index
リバースプロキシ
Docker上のGitLabコンテナにメンバの端末からアクセスしたいのでUbuntu Server上にリバースプロキシをnginxで準備
構成
GitLab(Docker)---Ubuntu Server---メンバの各端末
Nginxインストール
公式ドキュメントnginx: Linux packagesに従いインストール
鍵をダウンロードして追加
$ curl http://nginx.org/keys/nginx_signing.key | sudo apt-key add -
sources.list
に追記
$ sudo vim /etc/apt/sources.list
+ deb http://nginx.org/packages/ubuntu/ precise nginx
+ deb-src http://nginx.org/packages/ubuntu/ precise nginx
インストール
$ sudo apt-get update
$ sudo apt-get install nginx
確認
$ nginx -h
nginx version: nginx/1.4.7
リバースプロキシ設定
とりあえずコンテナに疎通できればいいのでproxy_pass
だけ設定する
設定ファイルのパス確認
$ nginx -V
-
--conf-path
を確認して大本の設定ファイル特定
設定ファイル参照して
$ cat /etc/nginx/nginx.conf
-
include /etc/nginx/conf.d/*.conf
を発見
デフォルトの設定ファイルdefault.conf
を編集
$ ls /etc/nginx/conf.d/
default.conf example_ssl.conf
$ sudo vim /etc/nginx/conf.d/default.conf
- location / {
- root /usr/share/nginx/html;
- index index.html index.htm;
- }
+ location / {
+ proxy_pass http;//さっき疎通確信したのGITLAB_IP;
+ }
nginx再起動
sudo nginx -s reload
Ubuntu Serverから疎通確認
$ xdg-open "http://localhost"
- 確認完了
メンバ端末から疎通確認
$ xdg-open "http://Ubuntu Serverのip"
- 確認完了
はやい!終わった!nginxありがとう!!アカウントとかは明日作るし帰る
参考資料
- nginx: Linux packages
- apt-getでnginx-1.2.4 stableをubuntu 11.10にインストール
- O'Reilly Japan - マスタリングNginxp.57の4.3.1単一の上位サーバ
その他
もっといい方法や不備等あれば教えていただけるとさいわいです><
導入後の運用・トラブルシューティング
一週間ほど動かしてみて出てきた問題等についてメモ
リモートリポジトリへのアクセス
- httpしかプロキシ用意してないのでgitプロトコルが使えない
- => gitプロトコル用の設定が大変そうだったので、リモートのurlはhttpを利用するという極めて雑な運用に落ち着く
リクエストボディの上限値引き上げ
- ちょっと大きいリポジトリをpushしたら413エラー発生
- => httpリクエストボディの上限を引き上げて対処
エラーメッセージ例
error: RPC failed; result=22, HTTP code = 413
fatal: The remote end hung up unexpectedly
リバースプロキシの設定変更
リバースプロキシとしてUbuntu Serverに立てている、nginxのclient_max_body_size
ディレクティブを指定し上限値をデフォルトの1MBから引き上げる
$ sudo vim /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
+ client_max_body_size 500M;
# 以降は変更なしのため省略
設定の再読み込み
$ sudo nginx -s reload
Dockerコンテナの設定変更
Dockerコンテナ側の上限値も変更するため、コンテナにログイン
# Dockerコンテナのユーザ名、パスワード取得してログイン
$ sudo docker logs gitlab 2>&1 | grep '^User: ' | tail -n1
$ ssh -l root GITLAB_IP
gitlabの設定ファイルであるconfig/gitlab.yml
のgit_max_size
を変更し上限値を引き上げ
$ vim /home/git/gitlab/config/gitlab.yml
# ....略....
git:
bin_path: /usr/bin/git
# The next value is the maximum memory size grit can use
# Given in number of bytes per git object (e.g. a commit)
# This value can be increased if you have very large commits
- max_size: 5242880 # 5.megabytes
+ max_size: 524288000 # 500.megabytes
# Git timeout to read a commit, in seconds
timeout: 10
# ....略....
gitlabの再起動
$ /etc/init.d/gitlab restart
Dockerコンテナ側にあるgitlab用のnginx設定ファイルである/etc/nginx/sites-available/gitlab
内のclient_max_body_size
ディレクティブを指定し上限値を20MBから引き上げる
$ vim /etc/nginx/sites-available/gitlab
# ....略....
server {
listen *:80 default_server; # e.g., listen 192.168.1.1:80; In most cases *:80 is a good idea
server_name localhost; # e.g., server_name source.example.com;
server_tokens off; # don't show the version number, a security best practice
root /home/git/gitlab/public;
# Increase this if you want to upload large attachments
# Or if you want to accept large git objects over http
- client_max_body_size 20m;
+ client_max_body_size 500m;
# ....略....
設定の再読み込み
$ nginx -s reload