GitLab 8.2 + HTTPS 設定メモ(CentOS7)

2015年12月7日  カテゴリー:Linux  タグ: , ,
Pocket
LINEで送る

GitLab は、GitHubのようなリポジトリ管理システムを、自前のサーバに構築できるオープンソースです。公開してかまわないソースコードであれば、GitHubを利用するのが簡単ですが、お仕事でのソースコードは、公開できないことが、ほとんどではないでしょうか?

GitHub Enterprise を使えば、非公開の環境にできますが、なかなかのお値段ですので、導入が難しい場合もあるかと思います。一方 GitLab は、サーバさえ用意すれば、基本無償でGitHubクローンの環境を構築することができますので、気軽に導入することができます。そこで今回は、GitLabのインストールと設定方法をメモしておきました。

GitLab のハードウェア要件

CPU2コア以上、メモリ2GB以上が推奨されています。特に GitLab はメモリをよく使いますので、本番運用する場合は、メモリを2GB以上搭載しているサーバに、インストールすることをオススメします。

▽ GitLab Hardware requirements
http://doc.gitlab.com/ce/install/requirements.html#hardware-requirements

GitLab のインストール

今回は、CentOS7.1にインストールしました。

依存するパッケージをインストールします(おそらく既にインストール済みかと思います)

yum install curl openssh-server

GitLab の yumリポジトリをインストールします。

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

GitLab CE(Community Edition) をインストールします。
2015年12月6日現在のバージョンは「8.2.2」でした。

yum -y install gitlab-ce

以上で、GitLabのインストールは終了です。

GitLabの設定ファイルは「/etc/gitlab/gitlab.rb」です。GitLabは、Nginx、PostgreSQL、Redis、Unicorn等のミドルウェアから構成されていますので、この設定ファイルをもとに、サーバー設定ツールの「Chef」が、各種ミドルウェアの設定を行う、といった流れになっています。とても今っぽい方式ですね。

メール送信設定(Gmail経由)

issueの作成などで、メール通知が多用されますので、GitLabからメールを送信できるようにしておきます。

設定を始める前に、念のためオリジナルの設定ファイルをバックアップしておきましょう。

cp -ip /etc/gitlab/gitlab.rb /etc/gitlab/gitlab.rb.org

GitLabから送信されるメールの、送信元メールアドレスの設定です。今回は、Gmail経由で送信するように設定しましたので、そのメールアドレスを設定しておきます。

vi /etc/gitlab/gitlab.rb

# gitlab_rails['gitlab_email_from'] = 'example@example.com'
 ↓
gitlab_rails['gitlab_email_from'] = '<Gmailのアドレス>'
 
# gitlab_rails['gitlab_email_reply_to'] = 'noreply@example.com'
 ↓
gitlab_rails['gitlab_email_reply_to'] = '<Gmailのアドレス>'

続いて、送信元メールサーバの設定です。(265行目付近です)

# gitlab_rails['smtp_enable'] = true
# gitlab_rails['smtp_address'] = "smtp.server"
# gitlab_rails['smtp_port'] = 456
# gitlab_rails['smtp_user_name'] = "smtp user"
# gitlab_rails['smtp_password'] = "smtp password"
# gitlab_rails['smtp_domain'] = "example.com"
# gitlab_rails['smtp_authentication'] = "login"
# gitlab_rails['smtp_enable_starttls_auto'] = true
# gitlab_rails['smtp_tls'] = false
# gitlab_rails['smtp_openssl_verify_mode'] = 'none' # Can be: 'none', 'peer', 'client_once', 'fail_if_no_peer_cert', see http://api.rubyonrails.org/
 
 ↓
 
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.gmail.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "<Gmailのアドレス>"
gitlab_rails['smtp_password'] = "<Gmailのパスワード>"
gitlab_rails['smtp_domain'] = "smtp.gmail.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_openssl_verify_mode'] = 'peer' # Can be: 'none', 'peer', 'client_once', 'fail_if_no_peer_cert', see http://api.rubyonrails.org/

パスワードを書いてあるので、パーミッションを変更しておきましょう。

chmod 600 /etc/gitlab/gitlab.rb

タイムゾーンの設定

日本時間に変更します。

vi /etc/gitlab/gitlab.rb

# gitlab_rails['time_zone'] = 'UTC'
 ↓
gitlab_rails['time_zone'] = 'Asia/Tokyo'

HTTPS の設定

必須ではありませんが、公開を前提としないソースコードを、GitLabで管理する場合は、HTTPS(SSL/TLS)を使う事をオススメします。

(2015年12月15日追記)正規の認証局が発行した、サーバー証明書を無料で取得できるようになりました。よければご参照ください → Let's Encrypt サーバー証明書の取得と自動更新設定メモ

SSL証明書の作成(自己署名)

秘密鍵の作成

openssl genrsa 2048 > server.key

CSR(証明書署名要求)の作成 ※ドメイン名「gitlab.example.com」は、ご自分のドメイン名に読み替えて下さい。

openssl req -new -key server.key > server.csr
 
Country Name (2 letter code) [XX]: JP
State or Province Name (full name) []:<空エンター>
Locality Name (eg, city) [Default City]:<空エンター>
Organization Name (eg, company) [Default Company Ltd]:<空エンター>
Organizational Unit Name (eg, section) []:<空エンター>
Common Name (eg, your name or your server's hostname) []: gitlab.example.com
Email Address []:<空エンター>
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:<空エンター>
An optional company name []:<空エンター>

SSLサーバ証明書の作成(有効期限10年)

openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt

秘密鍵とSSL証明書を、適切な場所に移動

mv -i server.key /etc/pki/tls/private/
mv -i server.crt /etc/pki/tls/certs/

パーミッションを変更

chmod 400 /etc/pki/tls/private/server.key
chmod 400 /etc/pki/tls/certs/server.crt

CSRを削除

rm server.csr

GitLab のHTTPS設定

vi /etc/gitlab/gitlab.rb

external_url 'http://localhost'
 ↓
external_url 'https://gitlab.example.com'
 
# nginx['ssl_certificate'] = "/etc/gitlab/ssl/#{node['fqdn']}.crt"
# nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/#{node['fqdn']}.key"
 ↓
nginx['ssl_certificate'] = "/etc/pki/tls/certs/server.crt"
nginx['ssl_certificate_key'] = "/etc/pki/tls/private/server.key"

HTTPS(443)ポートを空けておきます。

firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --reload

※Apacheなど、他のWEBサーバと同居する場合は、別のポート番号を指定することもできます。
下の例では、HTTPS接続を8000ポートで待ち受けます。

external_url 'https://gitlab.example.com:8000'

SSHのポート番号の変更

こちらも必須の設定ではありませんが、セキュリティ対策のため、SSHのポート番号(22番)を変更しておくこともオススメします。下の例では、50022番を設定していますが、49513~65535番の中から、お好きなポート番号を設定してください。

50022番ポートを空けておきます。

firewall-cmd --add-port=50022/tcp --permanent
firewall-cmd --reload

sshdのポート番号を変更します。
vi /etc/ssh/sshd_config

#Port 22
 ↓
Port 50022

sshdを再起動します。

systemctl restart sshd

ポートが変更されているか確認します。下のような表示があればOKです。
ss -an | grep 50022

tcp LISTEN 0 128 *:50022 *:*
tcp LISTEN 0 128 :::50022 :::*

GitLabの設定を変更します。
GitLabで表示されるリポジトリへのリンクに、ここで設定したポート番号が追加されます。
vi /etc/gitlab/gitlab.rb

# gitlab_rails['gitlab_shell_ssh_port'] = 22
 ↓
gitlab_rails['gitlab_shell_ssh_port'] = 50022

GitLab の起動

各種設定が終わりましたら、GitLabを起動します。下記コマンドを実行すると、Chefが設定している様子が表示されると思います。初回は起動に少し時間がかかります。

gitlab-ctl reconfigure
 
(略)
Running handlers complete
Chef Client finished, 211/284 resources updated in 04 minutes 20 seconds
gitlab Reconfigured!

GitLabの起動状態を確認します。すべてのサービスが「run」になっていればOKです。
gitlab-ctl status

run: gitlab-workhorse: (pid 20656) 134s; run: log: (pid 20411) 235s
run: logrotate: (pid 20515) 223s; run: log: (pid 20514) 223s
run: nginx: (pid 20454) 229s; run: log: (pid 20453) 229s
run: postgresql: (pid 20172) 340s; run: log: (pid 20171) 340s
run: redis: (pid 20034) 352s; run: log: (pid 20033) 352s
run: sidekiq: (pid 20373) 241s; run: log: (pid 20372) 241s
run: unicorn: (pid 20317) 243s; run: log: (pid 20316) 243s

GitLab の設定を変更したら「gitlab-ctl reconfigure」を実行して、設定を反映するといった運用になります。(各ミドルウエアの再起動は gitlab-ctl がやってくれます)

GitLab は、OS再起動時に自動起動するように設定されています。自動起動をOFFにする場合は、下記コマンドを実行して、GitLabをアンインストールするのが手取り早いです。uninstall となっていますが、gitlab-ctl コマンドは残りますので、再開する場合は、gitlab-ctl reconfigure を実行するだけです。

sudo gitlab-ctl stop
sudo gitlab-ctl uninstall

GitLab のデータ場所

デフォルトの状態では、以下の場所にデータが格納されます。

GitLab のデータ

/opt/gitlab
/var/opt/gitlab

GitLab のログ

/var/log/gitlab

GitLab 管理画面での設定

設定したURL「https://gitlab.example.com/」を、WEBブラウザで開き、初期アカウント(root)でログインします。(自己署名証明書なので警告が表示されます)
Username: root
Password: 5iveL!fe
gitlab01

root のパスワードを変更します。
gitlab02

root ユーザのメールアドレス変更(メール送信テスト)

設定したパスワードで再度ログインすると、root ユーザのページが表示されます。メールの送信テストも兼ねて、rootユーザのメールアドレスを変更しますので、左下の「Profile Settings」をクリックします。
gitlab03-b

Email欄にご自分のメールアドレスを入力して「SAVE CHANGES」をクリックすると、確認メールが送信されます。
gitlab07

GitLab の動作設定

続いて GitLab の動作設定です。右上の工具マーク「Admin area」をクリック → 左下の「Settings」をクリックして、設定画面を開きます。
gitlab06-b

今回は非公開環境として設定しますので、公開リポジトリとサインアップを制限しておきます。
Restricted visibility levels 「Public」を選択
gitlab04

Sign-up enabled のチェックを外す
gitlab05

上記を設定して、ページ最下部の「SAVE」をクリックします。

※稀に設定が反映されないことがありました(バグ?)その場合は「gitlab-ctl reconfigure」を実行してみてください。

日次バックアップの設定

GitLabにはバックアップツールが付属しています。デフォルトの設定では、ローカルにバックアップを取りますが、バックアップ先を、AWS/S3などに設定することも出来るようです。

バックアップが実行できることを確認しておきます。

gitlab-rake gitlab:backup:create

下記のようなファイルができていればOKです。
ls -l /var/opt/gitlab/backups/

-rw-------. 1 git git 30720 12月 7 05:31 1449433912_gitlab_backup.tar

スケジュールに登録します。(毎日朝5時にバックアップ実行)
crontab -u root -e

00 05 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

▽ GitLab Backup restore
https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/raketasks/backup_restore.md

終わりに

以前のGitLabは、インストール作業が大変なイメージがありましたが、今回は1時間ほどでインストール〜設定が終わりました。本番導入する前に、気軽に試すことができますね。

スポンサーリンク
Pocket
LINEで送る

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です