はじめに
自分専用のGitサーバがあれば便利ですよね。
今回はIDCFクラウドの500円VMにGitlabを構築する方法を紹介します。
やること
IDCFクラウドのVMにGitlabを構築します。
ついでにバックアップをIDCFクラウドのオブジェクトストレージにとるようにします。
また、GitlabにはGithubのアカウントでシングルサインオンできるようにします。
- IDCFクラウドでVM作成
- クラウドのネットワーク設定
- オブジェクトストレージAPIキー取得
- Githubのアプリケーション登録
- Itamaeでプロビジョニング
準備
次のものを用意しておいてください。
- IDCFクラウドのアカウント
- Rubyが実行できる環境
IDCFクラウドのアカウント登録等はめちゃ楽ガイドというのがわかりやすいらしいです。
RubyはGitlabの構築にItamaeを使うので必要になります。
他にも以下のものがあるとGoodです。
- Githubのアカウント
- SSL証明書
- ドメイン
今回、SSL証明書はStartSSLの無料のものを使用しました。
仮想マシン作成
では早速、仮想マシンを作成します。
IDCFクラウドのWebコンソールにログインして、GUIでポチポチ進めていきます。
今回は以下のVMを作成します。
- VMタイプ: light.S1
- イメージ: CentOS 7.0 64-bit
- ボリューム: Root 15G
- SSH鍵: 適当なログインできるもの
- VM name: 適当に
しばらく待つとVMができます。
ネットワーク設定
ネットワーク設定を行います。
今回は無料のソースIPを使用します。
左メニューの「IPアドレス」をクリックして、VMを作成したゾーンと同じゾーンのソースIPをクリックします。
IPの設定画面が出てくるので、まずはファイアウォールを設定します。
SSHとHTTPSのポートを解放しましょう。HTTPSを使わない方は、HTTP(80番)を解放してください。
次に、ポートフォワードを設定します。
先ほど解放したSSHとHTTPSのポートを、Gitlab用VMへ転送するように設定します。
HTTPS、SSHともに任意のポートで構いませんが、次のことに気をつけてください
- HTTPSはプライベートポートとパブリックポートが一致するように
- SSHのプライベートポートは必ず22番に
オブジェクトストレージAPIキー取得
では次にバックアップ用をオブジェクトストレージにとるため、オブストのAPIキーを取得します。
左上のメニューから「オブジェクトストレージ」をクリックしてください。
初めての方は契約画面っぽいのが出てくると思いますが、従量(10Tパックじゃない方)を選択してください。
50GBまでは無料になります。
まずは「APIユーザー追加」をクリックします。
適当なユーザ名を入力して、「OK」をクリックしてください。
そうするとAPIキーとシークレットキーが表示されます。
この2つのキーはあとで使います。
Githubのアプリケーション登録
ここでは、GithubのアカウントでGitlabにシングルサインオンできるようにGithubへアプリケーションの登録を行います。
シングルサインオンが必要ない場合はスキップしてください。
まず、GithubにログインしてSettingsのApplicationsに行きます。
そして、「Register new application」をクリックしてください。
登録フォームのHomepage URLとAuthentication callback URLにGitlabのURLを入力してください。
特にドメインなどなければ、https://210.xxx.xxx.xxx/
のようなIPアドレスでも構いません。
この場合、ネットワーク設定で設定したIPがここに入ります。
登録が完了したら、このようにClient IDとClient Secretが表示されます。
これらはあとで使います。
Itamaeでプロビジョニング
ではでは、いよいよGitlabの構築を行います。
ここからはコマンドでの操作になります。
まず、Gitlab用のレシピをGithubからクローンします。
git clone https://github.com/nownabe-infra/gitlab.git
次に、bundle installします。
cd gitlab
bundle install --path vendor/bundle
node.yml
に色々と設定を書いていきます。
まずはサンプルファイルをコピーしましょう。
cp node.yml.sample node.yml
node.yml
を編集します。
base:
users:
nownabe: # CentOSに作成するユーザ名
github_user: nownabe # Githubのユーザ名(公開鍵を取得する)
groups: wheel # sudoできるように
password: $6$... # パスワードハッシュ(作り方は後述)
mailto:
root: nownabe@foobar.baz # rootユーザ宛のメールを転送するアドレス
gitlab:
external_url: https://gitlab.foobar.baz # GitlabのURL。HTTPSを使わない場合はhttp://にする
gitlab_rails:
time_zone: "Asia/Tokyo"
omniauth_enabled: true # omniauthはシングルサインオンのための設定です
omniauth_allow_single_sign_on: true # 必要ない場合はまるっと削除してください
omniauth_block_auto_created_users: true # サンプルではGithub連携になっています
omniauth_providers: # GoogleやTwitterとも連携できるようになってます。
- # https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/integration/omniauth.md
name: github
app_id: YOUR_CLIENT_ID # Githubで取得したClient ID
app_secret: YOUR_CLIENT_SECRET # Githubで取得したClient Secret
url: https://github.com/
args: { scope: "user:email" }
nginx:
redirect_http_to_https: true # HTTPSを使わない場合は削除
redirect_http_to_https_port: 80 # HTTPSを使わない場合は削除
backup:
access_key: YOUR_API_KEY # オブジェクトストレージのAPIキー
secret_key: YOUR_SECRET_KEY # オブジェクトストレージのシークレットキー
bucket: YOUR_BUCKET # バックアップを保存するバケット名
exipre: 7 # バックアップを保存する日数
パスワードハッシュは、次のコマンドで生成できます。
bundle exec rake itamae:mkpasswd
HTTPSを使用する場合、証明書と秘密鍵をそれぞれ、ssl/gitlab.crt
とssl/gitlab.key
に置いてください。
node.yml
の準備ができたら、まずはDry runします。
IPには設定したソースIP、ポートは設定したSSHのポートを指定します。
bundle exec itamae ssh -h ${YOUR_IP} -p ${YOUR_PORT} -u root -y node.yml recipe.rb --dry-run
問題がなさそうなら、実際にItamaeでプロビジョンします。
bundle exec itamae ssh -h ${YOUR_IP} -p ${YOUR_PORT} -u root -y node.yml recipe.rb
Gitlabログイン
プロビジョニングが終わりGitlabのURLにアクセスすると、こんな画面が出てきます。
Sign inしろってことなので、Sign in with Githubをクリックして、Githubのアカウントでサインインします。
すると、次はこんなメッセージが表示されます。
誰かが勝手にアカウントを作成してサインインできないように、Gitlabにサインインするには管理者での有効化が必要になっています。
なので、管理者でサインインして有効化しましょう。
管理者のアカウントは、
- Username: root
- Password: 5iveL!fe
です。
初期パスワードを変更して再度サインインを求められるので、ユーザ名rootと新しいパスワードでサインインし直します。
サインインできたら、右上の「Admin Area」、左メニューの「Users」、「Blocked」と辿ります。
するとGithubでシングルサインオンしたユーザが表示されるので、「Unblock」をクリックしてください。
これでアカウントが有効化されたので、rootユーザはサインアウトして、もう1度Sign in with Githubしてみましょう。
無事にサインインできたでしょうか?
これで500円Gitlabの完成です!
おまけ
バックアップも問題なければとれていると思います。
オブストのコンパネで確認してみてください。