GitHub/CircleCI/Slack/Docker Hub/DatadogをまとめたようなOSS、Omnibus GitLabのインストール(8,9,10対応)


※ GitLab 9対応を確認しました。
※ GitLab 10対応を確認しました。

アップグレード記事はこちら

対象

  • なんらかの理由でGitHubやGitHub Enterpriseを使えない方
  • タダで似たようなツールを使いたい方

Omnibus GitLabとは

GitLabシリーズとそれらに必要なミドルウェアを同梱したパッケージです。

元々GitLabはその名の雰囲気通りGitHubのクローンで、Gitリポジトリマネージャだったそうなのですが、その範囲を超えて他のモダンな開発ツールの機能をどんどん取り込んでいて、今や開発コラボレーションプラットフォームになっています。

GitLabのサービスとそれに相当する巷のサービスをまとめてみました。※完全に機能が一致するわけではありません。

GitLabサービス 巷のサービス 用途
GitLab GitHub Git管理、プルリク
GitLab Snippets GitHub Gist コードスニペット共有
GitLab Pages GitHub Pages 静的サイトホスティング
GitLab Board ZenHub タスク管理
GitLab CI CircleCI CI
GitLab Container Registry Docker Hub Dockerイメージ管理
GitLab Mattermost Slack チームチャット
GitLab Prometheus NEW Datadog コンテナ監視

システム要件

  • 2コア4GB推奨
  • ストレージはソフトウェアだけで10GBほど
  • 対応OSはLinuxのみ

インストール

インストールもアップデートも簡単にできるDocker Composeでのインストール方法を採用します。

事前準備

Docker1.10.0+, Docker Compose1.6.0+がインストールされている環境を用意してください。
Docker for Windowsには非対応ですので、Windowsの場合は、Docker Toolboxや、Vagrant(サンプル)などでLinux仮想マシン上にDocker環境を用意してください。

Step 1. docker-compose.ymlを作成する

以下のコードをdocker-compose.ymlという名前で保存してください。

docker-compose.yml
version: '2'
services:
  gitlab:
    container_name: gitlab
    image: gitlab/gitlab-ce:latest
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        ## GitLab configuration settings
        ##! Check out the latest version of this file to know about the different
        ##! settings that can be configured by this file, which may be found at:
        ##! https://gitlab.com/gitlab-org/omnibus-gitlab/raw/master/files/gitlab-config-template/gitlab.rb.template

        ## GitLab URL
        ##! URL on which GitLab will be reachable.
        ##! For more details on configuring external_url see:
        ##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
        external_url 'http://gitlab.example.com'

        ################################################################################
        ## gitlab.yml configuration
        ##! Docs: https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/gitlab.yml.md
        ################################################################################

        gitlab_rails['gitlab_ssh_host'] = 'ssh.gitlab.example.com'
        gitlab_rails['time_zone'] = 'UTC'

        ################################################################################
        ## Container Registry settings
        ##! Docs: https://docs.gitlab.com/ce/administration/container_registry.html
        ################################################################################

        registry_external_url 'http://registry.gitlab.example.com'

        ################################################################################
        ## GitLab Pages
        ##! Docs: https://docs.gitlab.com/ce/pages/administration.html
        ################################################################################

        pages_external_url 'http://pages.example.com/'

        ################################################################################
        ## GitLab Mattermost
        ##! Docs: https://docs.gitlab.com/omnibus/gitlab-mattermost
        ################################################################################

        mattermost_external_url 'http://mattermost.example.com'
    volumes_from:
      - gitlab-data
    ports:
      - "80:80"
      - "2222:22"

  gitlab-data:
    image: busybox
    volumes:
      - /etc/gitlab
      - /var/log/gitlab
      - /var/opt/gitlab

  gitlab-runner:
    container_name: gitlab-runner
    image: gitlab/gitlab-runner:alpine
    restart: always
    volumes_from:
      - gitlab-runner-data
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "$HOME/.docker/config.json:/root/.docker/config.json"

  gitlab-runner-data:
    image: busybox
    volumes:
      - /etc/gitlab-runner

上記では各サービスに以下のドメインが指定されています。

サービス ドメイン名
GitLab gitlab.example.com
Git SSH ssh.gitlab.example.com
Container Registry registry.gitlab.example.com
GitLab Pages pages.example.com
Mattermost mattermost.example.com

GITLAB_OMNIBUS_CONFIGの部分で設定されているので、適宜変更してください。

Step 2. サービスを起動する

さきほど作ったdocker-compose.ymlのディレクトリ上で

$ docker-compose up -d

と実行すると、GitLabなど各種Dockerイメージのダウンロードが始まり、最終的に各種Dockerコンテナが作成され、起動します。
何かと時間のかかる処理が続くので、しばしお待ち下さい。(数分〜数十分)
各サービスの起動状況を確認するには以下を実行してください。

user@host ~ $ docker-compose ps
Name               Command               State                Ports        
---------------------------------------------------------------------------------
gitlab               /assets/wrapper      Up                   0.0.0.0:2222->22/t 
                                                        cp, 443/tcp,       
                                                        0.0.0.0:80->80/tcp 
gitlab-data          sh                   Exit 0                                  
gitlab-runner        /usr/bin/dumb-init   Up                                      
              /entryp ...                                                  
gitlab-runner-data   sh                   Exit 0                                  

上記のようにgitlabがUpになっていれば起動成功です。ポート80と、GitのSSH接続用ポート2222が開いている状態です。

Step 3. ドメインを設定する

docker-compose.ymlで指定したドメインをレコード設定してください。
GitLab Pagesは他と違い、例えばdocker-compose.ymlpages.example.comと設定した場合、レコードは*.pages.example.comとワイルドカードで設定する必要があります。

以上

  • ブラウザでhttp://<GitLab URL>にアクセスし、画面が表示されたらGitLabのインストール成功です。パスワード設定後、Usernameにroot、Passwordに先ほどのパスワードでログインできると思います。can't be reachedや502 Bad Gatewayの場合はまだ起動処理中なので、しばらく待ってからアクセスしてみてください。

  • http://<Mattermost URL>にアクセスし、画面が表示されたらGitLab Mattermostのインストール成功です。can't be reachedや502 Bad Gatewayの場合はまだ起動処理中なので、しばらく待ってからアクセスしてみてください。

これで、GitHub, ZenHub, Slack, Docker Hub相当の機能(Git/Dockerリポジトリ管理、プルリク、カンバン、チームチャット等)が用意できました。

おまけ

CIを使う

GitLabのCI機能は、リポジトリ内の.gitlab-ci.ymlのジョブをRunnerに投げる、という仕組みになっているので、
別サービスとして動いているGitLab RunnerサービスにRunnerを登録する必要があります。

  • GitLabのAdmin Area > Runnersにアクセスし、registration tokenを確認する

  • Runnerを登録する(registration-tokenパラメータを置き換える)

$ docker exec -it gitlab-runner gitlab-runner register \
  --non-interactive \
  --name shared-runner \
  --url http://gitlab/ \
  --registration-token XXXXXXXXXXXXXXXXXXXX \
  --executor docker \
  --limit 2 \
  --docker-image docker:1.10 \
  --docker-volumes /var/run/docker.sock:/var/run/docker.sock

GitLab Mattermostのビデオ通話を有効にする

プレビュー版ですが、WebRTCを利用したビデオ通話機能があり、Chrome/Firefox/Desktop Appに対応しているそうですが、私の環境ではFirefoxでしか動作しませんでした。

  • docker-compose.ymlGITLAB_OMNIBUS_CONFIGに以下を追記する
        mattermost['webrtc_enable'] = true
        mattermost['webrtc_gateway_websocket_url'] = 'ws://mattermost.example.com:8188'
        mattermost['webrtc_gateway_admin_url'] = 'http://mattermost.example.com:7088/admin'
        mattermost['webrtc_gateway_admin_secret'] = 'janusoverlord'
  • docker-compose.ymlservicesに以下を追記する
  mattermost-webrtc:
    container_name: mattermost-webrtc
    image: mattermost/webrtc:latest
    restart: always
    ports:
      - "7088:7088"
      - "8188:8188"

追記したymlはこちら

  • docker-compose up -dを実行してサービスを再構築する

  • MattermostのAccount Settings > Advanced > Preview pre-release featuresを開き、Enable the ability to make and receive one-on-one WebRTC callsを選択して保存する

  • チャットのユーザー名をクリックしてユーザープロフィールを開いた時、有効にしたユーザー同士であればビデオボタンが表示されるので、ビデオ通話ができれば成功

他色々使いそうなオプションを詰め込んだdocker-compose.yml

docker-compose.yml configuring GitLab with Container Registry, Pages, CI, Mattermost (enabled WebRTC), and some other options

参考

Omnibus GitLab documentation
GitLab Community Edition documentation
Mattermost documentation