「広告」

GitlabCE in Ubuntu インストール。低スペックサーバーで快適に・・・

「広告」
記事内に広告が含まれています。
「広告」

GitlabCEをUbuntuサーバーにインストールしたときの備忘録。
テスト的なので、サーバーの少ないメモリ/CPUで動かした時の記録です。

今回、カゴヤ・ジャパンのVPSに入れました。

「広告」

GitLabCEとは

GitLabCEとは、たくさんの人が無料でも使える、GitHubの機能を、ローカルなサーバー、もしくは、クラウド上のサーバーに独自に設定できるもので、容量も気にしないで、使いたい放題。セキュリティーも設定次第、無償で使えるという、非常に魅力的なパッケージです。

「広告」

Ubuntu 18.04 初期設定

# cat /etc/os-release 
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.3 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

↑Ubuntu 18.04のバージョンに入れます。

# apt update
Hit:1 http://jp.archive.ubuntu.com/ubuntu bionic InRelease
Hit:2 http://jp.archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit:3 http://jp.archive.ubuntu.com/ubuntu bionic-backports InRelease                  
Hit:4 http://security.ubuntu.com/ubuntu bionic-security InRelease                         
Reading package lists... Done                                  
Building dependency tree       
Reading state information... Done
195 packages can be upgraded. Run 'apt list --upgradable' to see them.

↑パッケージのアップデート情報を取得します。

# apt upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
(略)
195 upgraded, 7 newly installed, 0 to remove and 0 not upgraded.
Need to get 248 MB of archives.
After this operation, 377 MB of additional disk space will be used.
Do you want to continue? [Y/n] 
(略)
/etc/kernel/postinst.d/zz-update-grub:
Sourcing file `/etc/default/grub'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.15.0-134-generic
Found initrd image: /boot/initrd.img-4.15.0-134-generic
Found linux image: /boot/vmlinuz-4.15.0-74-generic
Found initrd image: /boot/initrd.img-4.15.0-74-generic
Found linux image: /boot/vmlinuz-4.4.0-171-generic
Found initrd image: /boot/initrd.img-4.4.0-171-generic
done
Processing triggers for ca-certificates (20201027ubuntu0.18.04.1) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

↑パッケージを実際にアップデートします。

# cat /etc/os-release 
NAME="Ubuntu"
VERSION="18.04.5 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.5 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

↑アップデートされました。

「広告」

GitlabCE インストール

基本ソフトを入れていきます

# apt install ca-certificates curl openssh-server postfix
Reading package lists... Done
Building dependency tree       
Reading state information... Done
ca-certificates is already the newest version (20201027ubuntu0.18.04.1).
curl is already the newest version (7.58.0-2ubuntu3.12).
openssh-server is already the newest version (1:7.6p1-4ubuntu0.3).
The following packages were automatically installed and are no longer required:
  linux-image-4.4.0-171-generic linux-modules-4.4.0-171-generic linux-modules-extra-4.4.0-171-generic
Use 'apt autoremove' to remove them.
The following additional packages will be installed:
  ssl-cert
(略)


↑Postfixの設定を指定します。

After modifying main.cf, be sure to run 'service postfix reload'.

Running newaliases
Processing triggers for ureadahead (0.100.0-21) ...
Processing triggers for systemd (237-3ubuntu10.44) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for rsyslog (8.32.0-1ubuntu4) ...
Processing triggers for ufw (0.36-0ubuntu0.18.04.1) ...
Processing triggers for libc-bin (2.27-3ubuntu1.4) ...

↑基本的なソフトが入りました。

# cd /tmp
# curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  5933  100  5933    0     0  12623      0 --:--:-- --:--:-- --:--:-- 12623
# ls -al script.deb.sh
-rw-r--r-- 1 root root 5933 Jan XX XX:XX script.deb.sh
# bash script.deb.sh 
Detected operating system as Ubuntu/bionic.
Checking for curl...
Detected curl...
Checking for gpg...
Detected gpg...
Running apt-get update... done.
Installing apt-transport-https... done.
Installing /etc/apt/sources.list.d/gitlab_gitlab-ce.list...done.
Importing packagecloud gpg key... done.
Running apt-get update... done.

The repository is setup! You can now install packages.

↑リポジトリの設定が完了しました。

# apt install gitlab-ce
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  linux-image-4.4.0-171-generic linux-modules-4.4.0-171-generic linux-modules-extra-4.4.0-171-generic
Use 'apt autoremove' to remove them.
The following NEW packages will be installed:
  gitlab-ce
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.

(略)

Setting up gitlab-ce (13.8.1-ce.0) ...
It looks like GitLab has not been configured yet; skipping the upgrade script.

       *.                  *.
      ***                 ***
     *****               *****
    .******             *******
    ********            ********
   ,,,,,,,,,***********,,,,,,,,,
  ,,,,,,,,,,,*********,,,,,,,,,,,
  .,,,,,,,,,,,*******,,,,,,,,,,,,
      ,,,,,,,,,*****,,,,,,,,,.
         ,,,,,,,****,,,,,,
            .,,,***,,,,
                ,*,.
  


     _______ __  __          __
    / ____(_) /_/ /   ____ _/ /_
   / / __/ / __/ /   / __ `/ __ \
  / /_/ / / /_/ /___/ /_/ / /_/ /
  \____/_/\__/_____/\__,_/_.___/
  

Thank you for installing GitLab!
GitLab was unable to detect a valid hostname for your instance.
Please configure a URL for your GitLab instance by setting `external_url`
configuration in /etc/gitlab/gitlab.rb file.
Then, you can start your GitLab instance by running the following command:
  sudo gitlab-ctl reconfigure

↑GitLabCEが入りました。

「広告」

GitLabCE 設定、メモリエラー

# vi /etc/gitlab/gitlab.rb

external_url 'https://gitlab.example.com'
 ↓
external_url 'http://(FQDN)'

↑初期設定をします。

# gitlab-ctl reconfigure

↑GitlabCEで、構成を変える場合、gtlab-ctlで、変更をします。
また、gitlabの状態は、↓以下のコマンドで、確認をします。

# gitlab-ctl status
# gitlab-ctl tail
  System Info:
  ------------
  chef_version=15.14.0
  platform=ubuntu
  platform_version=18.04
  ruby=ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux]
  program_name=/opt/gitlab/embedded/bin/chef-client
  executable=/opt/gitlab/embedded/bin/chef-client
  
  
  Running handlers:
There was an error running gitlab-ctl reconfigure:

Cannot allocate memory - fork(2)

  Running handlers complete
  Chef Infra Client failed. 0 resources updated in 06 seconds

↑「gitlab-ctl reconfigure」をしたところ、エラー!
サーバーの実メモリが少なくエラーとなりました。

Running handlers:
There was an error running gitlab-ctl reconfigure:

Multiple failures occurred:
* Chef::Exceptions::MultipleFailures occurred in Chef Infra Client run: Multiple failures occurred:
* Errno::ENOMEM occurred in delayed notification: ruby_block[reload_log_service] (/opt/gitlab/embedded/cookbooks/cache/cookbooks/runit/libraries/provider_runit_service.rb line 73) had an error: Errno::ENOMEM: Cannot allocate memory - fork(2)
* Errno::ENOMEM occurred in delayed notification: ruby_block[restart_log_service] (/opt/gitlab/embedded/cookbooks/cache/cookbooks/runit/libraries/provider_runit_service.rb line 65) had an error: Errno::ENOMEM: Cannot allocate memory - fork(2)

* Errno::ENOMEM occurred in delayed notification: execute[clear the gitlab-rails cache] (gitlab::gitlab-rails line 440) had an error: Errno::ENOMEM: Cannot allocate memory - fork(2)
* Errno::ENOMEM occurred in delayed notification: runit_service[gitaly] (gitaly::enable line 101) had an error: Errno::ENOMEM: Cannot allocate memory - fork(2)
* Errno::ENOMEM occurred in delayed notification: execute[reload all sysctl conf] (package::sysctl line 18) had an error: Errno::ENOMEM: Cannot allocate memory - fork(2)
* Errno::ENOMEM occurred in delayed notification: runit_service[gitlab-workhorse] (gitlab::gitlab-workhorse line 61) had an error: Errno::ENOMEM: Cannot allocate memory - fork(2)
* Errno::ENOMEM occurred in delayed notification: runit_service[node-exporter] (monitoring::node-exporter line 52) had an error: Errno::ENOMEM: Cannot allocate memory - fork(2)
* Errno::ENOMEM occurred in delayed notification: runit_service[gitlab-exporter] (monitoring::gitlab-exporter line 65) had an error: Errno::ENOMEM: Cannot allocate memory - fork(2)
* Errno::ENOMEM occurred in delayed notification: runit_service[redis-exporter] (monitoring::redis-exporter line 41) had an error: Errno::ENOMEM: Cannot allocate memory - fork(2)
* Errno::ENOMEM occurred in delayed notification: runit_service[prometheus] (monitoring::prometheus line 87) had an error: Errno::ENOMEM: Cannot allocate memory - fork(2)

↑上記も、サーバーの実メモリが少なくエラーとなっています。


↑2Gのメモリでは、初期設定自体も難しい・・・

コンソールでの作業も、反応が遅い・・・

3Gにスケールアップして、作業をします。

「広告」

GitLabCE 設定、メモリアップ後、設定

# gitlab-ctl reconfigure
Recipe: nginx::enable
  * runit_service[nginx] action restart (up to date)

(略)

Running handlers:
Running handlers complete
Chef Infra Client finished, 9/790 resources updated in 15 seconds
gitlab Reconfigured!

↑3Gであれば、設定関係はエラーにならない

http://(FQDN)/

↑ブラウザでサイトにアクセスします。

↑初期設定、パスワードの設定から行います。

↑パスワードが設定されました

「root」と設定したパスワードで入ります。

↓日本語環境にします。

↑画面右上のメニューから、「Settings」を選びます。

↑「Preferences」を選びます。

↑日本語にします。

↑日本語になりました。

↓ユーザ名の変更をします。

↑rootというユーザ名を変更する場合、ここで、変更をします。
セキュリティ上、変更をしておいたほうがいいかもしれません。

「広告」

ubuntu firewall設定

# ufw status
Status: inactive

↑firewallが動いていません

# ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

↑firewallを稼働させます

ufw allow http
ufw allow https
ufw allow OpenSSH

# ufw allow http
Rule added
Rule added (v6)
# ufw allow https
Rule added
Rule added (v6)
# ufw allow OpenSSH
Rule added
Rule added (v6)

↑80,443,ssh のポートを空けます。

# ufw status
Status: active

To                         Action      From
--                         ------      ----
80/tcp                     ALLOW       Anywhere                  
443/tcp                    ALLOW       Anywhere                  
OpenSSH                    ALLOW       Anywhere                  
80/tcp (v6)                ALLOW       Anywhere (v6)             
443/tcp (v6)               ALLOW       Anywhere (v6)             
OpenSSH (v6)               ALLOW       Anywhere (v6)             

↑firewallの設定ができました。

「広告」

SSL nginxなどの設定

gitlab-ceは、基本、nginxで稼働しますが、nginxの設定ファイルを直接変更すると、

「gitlab-ctl reconfigure」と、設定更新をしたときに、元に戻ります。
Gitlabceは、Chef で環境を設定しているので、
基本的に、

/etc/gitlab/gitlab.rb

を変更して
「gitlab-ctl reconfigure」
すると、nginxの設定も変更されます。

vi /etc/gitlab/gitlab.rb

external_url 'http://(FQDN)'
 ↓
external_url 'https://(FQDN)'

↑SSLにします。

# nginx['enable'] = true
# nginx['client_max_body_size'] = '250m'
# nginx['redirect_http_to_https'] = false
# nginx['redirect_http_to_https_port'] = 80
 ↓
nginx['enable'] = true
nginx['client_max_body_size'] = '250m'
nginx['redirect_http_to_https'] = true
nginx['redirect_http_to_https_port'] = 80

↑Nginxの設定をします。

# nginx['ssl_certificate'] = "/etc/gitlab/ssl/#{node['fqdn']}.crt"
# nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/#{node['fqdn']}.key"
 ↓
nginx['ssl_certificate'] = "/etc/gitlab/ssl/(FQDN).crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/(FQDN).key"

↑Let’s Certificateの設定をします。

# letsencrypt['enable'] = nil
# letsencrypt['contact_emails'] = [] # This should be an array of email addresses to add as contacts
 ↓
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['(メールアドレス)']

↑Let’s Certificateの通知メールアドレスを設定します。

# letsencrypt['auto_renew'] = true
# letsencrypt['auto_renew_hour'] = 0
# letsencrypt['auto_renew_minute'] = nil # Should be a number or cron expression, if specified.
# letsencrypt['auto_renew_day_of_month'] = "*/4"
 ↓
letsencrypt['auto_renew'] = true
letsencrypt['auto_renew_hour'] = 0
letsencrypt['auto_renew_minute'] = 30 # Should be a number or cron expression, if specified.
letsencrypt['auto_renew_day_of_month'] = "*/4"

↑Let’s Certificateの更新間隔を設定します。

# gitlab-ctl reconfigure

(略)

Recipe: crond::enable
  * runit_service[crond] action restart (up to date)

Running handlers:
Running handlers complete
Chef Infra Client finished, 87/985 resources updated in 01 minutes 09 seconds
gitlab Reconfigured!

↑更新されて、

https://(FQDN)/

と、SSL(https)でアクセスができるようになりました。

「広告」

GitLabCE、メモリ/CPU節約


画面上で操作をしていると、メモリが足りなくなってきて、操作が重くなります。
デフォルトのGitlabCE では、大規模管理を想定していて、最低4G程度のメモリを必要とするようです。

今回、3Gでも、(テスト的な動作であれば)快適に動くように設定をします。

vi /etc/gitlab/gitlab.rb

# gitlab_rails['db_prepared_statements'] = false
 ↓
gitlab_rails['db_prepared_statements'] = false

# unicorn['worker_processes'] = 2
 ↓
unicorn['worker_processes'] = 3

↑サーバーのコア数に合わせます

# postgresql['shared_buffers'] = "256MB"
 ↓
postgresql['shared_buffers'] = "256MB"

puma のメモリ食い

# ps aux --sort rss |grep puma
root      1708  0.0  0.0   4404   680 ?        Ss   Jan27   0:00 runsv puma
root      1742  0.0  0.0   4548   700 ?        S    Jan27   0:00 svlogd -tt /var/log/gitlab/puma
git      30735  2.5 22.5 1146792 692408 ?      Ssl  11:44   0:41 puma 5.1.1 (unix:///var/opt/gitlab/gitlab-rails/sockets/gitlab.socket,tcp://127.0.0.1:8080) [gitlabpuma-worker]
git      30838  1.1 25.0 1347920 769948 ?      Sl   11:45   0:17 puma: cluster worker 0: 30735 [gitlab-puma-worker]
git      30840  1.2 25.6 1404496 787416 ?      Sl   11:45   0:19 puma: cluster worker 1: 30735 [gitlab-puma-worker]

↑puma 関係が、たくさんのメモリを使っているようです・・・
puma は、Unicorn から置き換わったサービス。メモリを食いますが・・・
3Gメモリ、仮想CPU3コアでは、画面上の切り替えがもたつく(遅い)場合があります。

# puma['enable'] = true
# puma['ha'] = false
# puma['worker_timeout'] = 60
# puma['worker_processes'] = 2
# puma['min_threads'] = 4
# puma['max_threads'] = 4
 ↓
puma['enable'] = true
puma['ha'] = false
puma['worker_timeout'] = 60
puma['worker_processes'] = 1
puma['min_threads'] = 2
puma['max_threads'] = 2

↑の小さな構成にしてみます・・・・
「worker_processes」が「1」です。
大規模なgitlabサービスには、不向きでしょう。

「worker_processes」は、

もしくは
cpu コア数 – 1

の多い方。という指針がありますので、「1」は、逸脱しています(汗)。

prometheusの停止

gitlabは、prometheusが利用できるモニタリング情報を提供している。
「http://サーバー:9090」と、直接アクセスするか
https://grafana.com/
などの外部ツールを利用することができます。

# ps aux --sort rss|grep prometheus
root     16236  0.0  0.0   4404   780 ?        Ss   09:41   0:00 runsv prometheus
root     16237  0.0  0.0   4548   788 ?        S    09:41   0:00 svlogd -tt /var/log/gitlab/prometheus
git       1786  0.0  0.8 2180092 24828 ?       Ssl  Jan27   0:25 /opt/gitlab/embedded/bin/gitlab-workhorse -listenNetwork unix -listenUmask 0 -listenAddr /var/opt/gitlab/gitlab-workhorse/sockets/socket -authBackend http://localhost:8080 -authSocket /var/opt/gitlab/gitlab-rails/sockets/gitlab.socket -documentRoot /opt/gitlab/embedded/service/gitlab-rails/public -pprofListenAddr  -prometheusListenAddr localhost:9229 -secretPath /opt/gitlab/embedded/service/gitlab-rails/.gitlab_workhorse_secret -logFormat json -config config.toml
gitlab-+ 16238  2.0  5.8 1663788 179428 ?      Ssl  09:41   0:07 /opt/gitlab/embedded/bin/prometheus --web.listen-address=localhost:9090 --storage.tsdb.path=/var/opt/gitlab/prometheus/data --config.file=/var/opt/gitlab/prometheus/prometheus.yml

↑起動中のプロセス。メモリ 5.8%。CPU 2.0%。今回「prometheus」を停止してみます。

#prometheus_monitoring['enable'] = false
 ↓
prometheus_monitoring['enable'] = false

とします。

# ps aux --sort rss|grep prometheus
root     26360  0.0  0.0  14172  1024 pts/0    S+   11:10   0:00 grep --color=auto prometheus
git       1786  0.0  0.7 2180092 22164 ?       Ssl  Jan27   0:29 /opt/gitlab/embedded/bin/gitlab-workhorse -listenNetwork unix -listenUmask 0 -listenAddr /var/opt/gitlab/gitlab-workhorse/sockets/socket -authBackend http://localhost:8080 -authSocket /var/opt/gitlab/gitlab-rails/sockets/gitlab.socket -documentRoot /opt/gitlab/embedded/service/gitlab-rails/public -pprofListenAddr  -prometheusListenAddr localhost:9229 -secretPath /opt/gitlab/embedded/service/gitlab-rails/.gitlab_workhorse_secret -logFormat json -config config.toml

↑prometheus が停止されました。
「runsv prometheus」というプロセスが無くなりました。

sidekiq

# sidekiq['max_concurrency'] = 50
# sidekiq['min_concurrency'] = nil
 ↓
sidekiq['max_concurrency'] = 10
sidekiq['min_concurrency'] = 1

↑sidekiqは、並列に処理してくれるツールですが、この最大値を低くしておきます。

「広告」

CPU節約の推移

↑上は、メモリの推移です。様々な設定をすると、確実にCPUの消費量が減って来ています。
上記は、カゴヤ・ジャパン のコントロールパネルのCPU使用の推移グラフです。

「広告」

GitlabCEまとめ 最小限のサーバーで・・・

これで、カゴヤ・ジャパン の仮想3core/3ギガで、pull/pushなどが、なんとかできる感じです。
本格的に利用するには、4ギガ以上のメモリが必要でしょう。

タイトルとURLをコピーしました