前回
さくらのVPS 標準OSの環境構築(5) Let's EncryptでSSL+HTTP/2対応
GitLabとは
GitLabは、Ruby on Rails
製のGitHub
クローン環境です。
クローズドなGit
リポジトリ管理環境を導入することが出来ます。
注意
前回まででサーバー構築に関しては完了しており、今回は必要な方のみに向けた所謂おまけ的な記事になります。
Git
リポジトリ管理環境が必要なければ、無理に入れる必要は無いと思います。
また、GitLab
はRuby
,Nginx
,Unicorn
,Rails
,PostgreSQL
などのコンポーネントがセットでインストールされます。
まっさらな環境にインストールする場合は公式ドキュメント通りに手順を踏んで何の問題もないのですが、今回は既にNginx
がリバースプロキシサーバーとして稼働している環境にインストールするため、通常とは違いNginx
のみ既存のものを使うように手順を踏むことになります。
GitLabのインストール
依存パッケージに関しては、ここまでの手順でインストール済みだと思います。
GitLab
公式の手順通りyum
リポジトリを追加してインストールします。
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | bash
yum install gitlab-ce
GitLabの設定
GitLab
の起動設定ファイルを編集します。
必要な部分のコメントアウトを外して、多少数値を変えます。
vi /etc/gitlab/gitlab.rb
URL設定
使用するURLは事前にドメイン設定側で正引きしておきましょう。
- external_url 'http://example.com'
+ external_url 'https://git.example.com'
タイムゾーン設定
サーバーに設定しているタイムゾーンを指定します。
- # gitlab_rails['time_zone'] = 'UTC'
+ gitlab_rails['time_zone'] = 'Asia/Tokyo'
メール送信設定(Gmail経由)
メール通知用の設定を行います。
SMTP
設定を行い、Gmail
からメールが送信されるように設定します。
Google Apps
を利用したい場合も、この設定で大丈夫だと思います。
- # gitlab_rails['gitlab_email_from'] = 'example@example.com'
+ gitlab_rails['gitlab_email_from'] = 'my.gmail@gmail.com'
:
- # 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'] = "my.gmail@gmail.com"
+ gitlab_rails['smtp_password'] = "YOUR_GMAIL_PASSWORD"
+ 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/
GitLabのPostgreSQL設定
Community Edition
ではPostgreSQL
以外のデータベースには変更出来ません。
- # postgresql['enable'] = true
- # postgresql['listen_address'] = nil
- # postgresql['port'] = 5432
- # postgresql['data_dir'] = "/var/opt/gitlab/postgresql/data"
- # postgresql['shared_buffers'] = "256MB" # recommend value is 1/4 of total RAM, up to 14GB.
+ postgresql['enable'] = true
+ postgresql['listen_address'] = nil
+ postgresql['port'] = 5432
+ postgresql['data_dir'] = "/var/opt/gitlab/postgresql/data"
+ postgresql['shared_buffers'] = "512MB" # recommend value is 1/4 of total RAM, up to 14GB.
GitLabのUnicorn設定
タイムアウト上限を引き上げます。
- # unicorn['worker_timeout'] = 60
- # unicorn['worker_processes'] = 2
+ unicorn['worker_timeout'] = 120
+ unicorn['worker_processes'] = 2
## Advanced settings
- # unicorn['listen'] = '127.0.0.1'
- # unicorn['port'] = 8080
- # unicorn['socket'] = '/var/opt/gitlab/gitlab-rails/sockets/gitlab.socket'
- # unicorn['pidfile'] = '/opt/gitlab/var/unicorn/unicorn.pid'
- # unicorn['tcp_nopush'] = true
- # unicorn['backlog_socket'] = 1024
+ unicorn['listen'] = '127.0.0.1'
+ unicorn['port'] = 60080
+ unicorn['socket'] = '/var/opt/gitlab/gitlab-rails/sockets/gitlab.socket'
+ unicorn['pidfile'] = '/opt/gitlab/var/unicorn/unicorn.pid'
+ unicorn['tcp_nopush'] = true
+ unicorn['backlog_socket'] = 1024
GitLabのRedis設定
- # redis['enable'] = true
- # redis['username'] = "gitlab-redis"
- # redis['uid'] = nil
- # redis['gid'] = nil
+ redis['enable'] = true
+ redis['username'] = "gitlab-redis"
+ redis['uid'] = nil
+ redis['gid'] = nil
GitLabのNginx設定
最重要
GitLab
内蔵のNginx
を使用しないようにします。
この変更をしないまま誤って起動してしまうと、既に起動しているNginx
がかなりおかしくなります。
- # nginx['enable'] = true
+ nginx['enable'] = false
Nginxの設定変更
リバースプロキシとして既に起動しているNginx
の設定を変更します。
proxy_pass
のポート番号はUnicorn
設定のunicorn['port']
で指定した値になります。
vi /etc/nginx/conf.d/default.conf
+ server {
+ listen 80;
+ server_name git.example.com;
+ return 301 https://$host$request_uri;
+ }
+ server {
+ listen 443 ssl http2;
+ server_name git.example.com;
+
+ ssl on;
+ ssl_certificate /etc/letsencrypt/live/git.example.com/fullchain.pem;
+ ssl_certificate_key /etc/letsencrypt/live/git.example.com/privkey.pem;
+
+ ssl_session_cache shared:SSL:3m;
+ ssl_buffer_size 8k;
+ ssl_session_timeout 10m;
+
+ ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+ ssl_ciphers AESGCM:HIGH:!aNULL:!MD5;
+ ssl_prefer_server_ciphers on;
+
+ access_log /var/log/nginx/gitlab.access.log;
+ error_log /var/log/nginx/gitlab.error.log;
+
+ location = /robots.txt { access_log off; log_not_found off; }
+ location = /favicon.ico { access_log off; log_not_found off; }
+
+ location ^~ /.well-known/ {
+ root /letsencrypt-dummy-webroot;
+ }
+
+ location / {
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-Proto https;
+ proxy_set_header X-Forwarded-Host $host;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+
+ proxy_pass http://127.0.0.1:60080;
+ proxy_redirect http:// https://;
+
+ proxy_connect_timeout 120;
+ proxy_read_timeout 120;
+ proxy_send_timeout 120;
+
+ proxy_max_temp_file_size 0;
+ }
+ }
上記の設定はSSLの発行・設定まで完了した最終的な記述になります。
SSL証明書発行のために、まずhttp
アクセスで証明書を発行し、その後SSLを設定するまでの流れは前回までの記事を参考にしてください。
またSSLの詳細設定はあくまで一例になります。セキュリティ強度の向上は各々が調査のうえで行ってください。
設定が完了したらNginx
を再起動します。
service nginx restart
GitLabの設定の反映と起動
内蔵コンポーネントの設定なども処理されるので、初期起動には時間がかかります。
gitlab-ctl reconfigure
Starting Chef Client, version 12.6.0
: (省略)
Running handlers complete
Chef Client finished, ***/*** resources updated in *** minutes *** seconds
gitlab Reconfigured!
起動が完了したら
external_url
で設定したURLでアクセスしてみましょう。
正常に表示されればインストール成功です。(多分)
あとは公式の手順通りにセットアップを行ってください。
インストール直後の初期ユーザーは下記になります。ID: root
Pass: 5iveL!fe
まとめ
おまけを含め、今回自分のVPSで設定した内容を大体書き出し終えることができました。
ここまでご一読いただきありがとうございます。
改めますが、サーバー構築初心者のため、当方は本記事を参考にセットアップしたことによって被った損害・損失に対し、いかなる場合でも一切の責任を負いませんのでご了承ください。
多分間違いやセオリー外のことも多々あると思いますので、発見いただいた方はコメントや編集リクエストなどでご指摘いただけると幸いです。