GitLab環境爆速準備(Ubuntu Server 12.04 LTS + Docker)

  • 40
    Like
  • 0
    Comment
More than 1 year has passed since last update.

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_proxyhttps_proxyを設定

$ export http_proxy="http://社内proxyサーバ"
$ export https_proxy="http://社内proxyサーバ"

sudo時にも利用できるように/etc/sudoersenv_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 updatesudo apt-get install lxc-dockerなど行ってくれるスクリプト実行

$ curl -s https://get.docker.io/ubuntu/ | sudo sh

インストール確認

$ docker help

バージョン確認

$ 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 indexGitLabのコンテナを探すといろいろ見つかったけど、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!!

参考資料

リバースプロキシ

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ありがとう!!アカウントとかは明日作るし帰る

参考資料

その他

もっといい方法や不備等あれば教えていただけるとさいわいです><

導入後の運用・トラブルシューティング

一週間ほど動かしてみて出てきた問題等についてメモ

リモートリポジトリへのアクセス

  • 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.ymlgit_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

参考資料