- 概要
- 環境
- 依存パッケージのインストール
- editor コマンドのエディタを vim にする
- git の最新版をインストール
- Ruby のインストール
- Go のインストール
- Nodejs と yarn のインストール
- git ユーザの作成
- Postgres のインストールと設定
- Redis のインストール
- Gitlab インストールと設定
- Gem のインストール
- Gitlab を管理するシェルをインストール
- Gitaly のインストールと起動
- データベースのマイグレート
- 各プロセスの起動スクリプトを配置
- ログローテションの設定
- 状態を確認する
- UI 関連の作業
- Gitlab の起動
- Nginx のインストールと設定
- 動作確認
- コードを直接変更するには
- おまけ: Gitlab Pages のインストールと設定
- 最後に
- 参考サイト
概要
Gitlab をソースコードからインストールしてみました
基本は公式のドキュメントを参考にしています
バージョンも上記のドキュメントに記載の通り 11.8 というバージョンをインストールしています
Gitlab 自体の開発をしたりビルドする必要がある場合には必須かなと思います
Ruby のバージョンは公式のドキュメントだと 2.6 ですが 2.6 だと protocolbuf などがインストールできないので 2.5.3 を使います
環境
ビルドが成功した際の各種パッケージや言語環境のバージョンは以下の通りです
- Gitlab
- Ubuntu 16.04.6 LTS
- Ruby 2.5.3 (rvm)
- Go 1.13.5
- Nodejs 12.16.2
- yarn 1.22.4
- Postgres 9.5.21
- Redis 3.0.6
- git 2.26.2
依存パッケージのインストール
sudo su -
apt -y update
apt -y install build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libre2-dev \
libreadline-dev libncurses5-dev libffi-dev curl openssh-server checkinstall libxml2-dev \
libxslt-dev libcurl4-openssl-dev libicu-dev logrotate rsync python-docutils pkg-config cmake \
runit
editor コマンドのエディタを vim にする
sudo su -
update-alternatives --set editor /usr/bin/vim.basic
git の最新版をインストール
2.18 以上のバージョンが必要なためです
Ubuntu16.04 のデフォルトリポジトリだと古い git がインストールされてしまいます
sudo su -
add-apt-repository ppa:git-core/ppa
apt -y update
apt -y install git
Ruby のインストール
rvm から 2.5.3 をインストールします
sudo apt -y install gnupg2
gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
\curl -sSL https://get.rvm.io | bash -s stable
/usr/local/rvm/bin/rvm install ruby-2.5.3
/usr/local/rvm/bin/rvm alias create default ruby-2.5.3
ruby -v
でバージョンが表示されれば OK です
Go のインストール
sudo su -
mkdir /tmp/go && cd /tmp/go
curl --remote-name --progress https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz
echo '512103d7ad296467814a6e3f635631bd35574cab3369a97a323c9a585ccaa569 go1.13.5.linux-amd64.tar.gz' | shasum -a256 -c - && tar -C /usr/local -xzf go1.13.5.linux-amd64.tar.gz
ln -sf /usr/local/go/bin/{go,godoc,gofmt} /usr/local/bin/
go version
でバージョンが表示されれば OK です
Nodejs と yarn のインストール
sudo su -
curl --location https://deb.nodesource.com/setup_12.x | bash -
apt -y install nodejs
curl --silent --show-error https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
apt -y update
apt -y install yarn
node -v
と yarn -v
でバージョンが表示されれば OK です
git ユーザの作成
git ユーザは Gitlab のアプリケーションの所有者になります
sudo su -
adduser --disabled-login --gecos 'GitLab' git
Postgres のインストールと設定
sudo su -
apt -y install postgresql postgresql-client libpq-dev postgresql-contrib
続いてデータベースの作成などを行います
公式の手順にはない手順として git ロールのパスワードの設定をしています
このパスワードはデフォルトの database.yml に記載されているパスワードになります
systemctl start postgresql
su - postgres
sudo -u postgres psql -d template1 -c "CREATE USER git CREATEDB;"
sudo -u postgres psql -d template1 -c "ALTER ROLE git WITH PASSWORD 'secure password';"
sudo -u postgres psql -d template1 -c "CREATE EXTENSION IF NOT EXISTS pg_trgm;"
sudo -u postgres psql -d template1 -c "CREATE DATABASE gitlabhq_production OWNER git;"
- `sudo -u git -H psql -d gitlabhq_production
SQL プロンプトになったら pg_trgm エクステンションが有効になっているか確認します
SELECT true AS enabled FROM pg_available_extensions WHERE name = 'pg_trgm' AND installed_version IS NOT NULL;
Redis のインストール
sudo su -
apt -y install redis-server
設定ファイルを編集して socket ファイルでローカル接続できるようにします
オリジナルのファイルの一部を書き換えて書き換えた設定を新たなコンフィグファイルとして書き換えています
また tmp ディレクトリを定期的に削除するルールを追加します
cp /etc/redis/redis.conf /etc/redis/redis.conf.orig
sed 's/^port .*/port 0/' /etc/redis/redis.conf.orig | tee /etc/redis/redis.conf
echo 'unixsocket /var/run/redis/redis.sock' | tee -a /etc/redis/redis.conf
echo 'unixsocketperm 770' | tee -a /etc/redis/redis.conf
mkdir -p /var/run/redis
chown redis:redis /var/run/redis
chmod 755 /var/run/redis
if [ -d /etc/tmpfiles.d ]; then
echo 'd /var/run/redis 0755 redis redis 10d -' | tee -a /etc/tmpfiles.d/redis.conf
fi
systemctl restart redis
usermod -aG redis git
redis-cli -s /var/run/redis/redis.sock
で接続できれば OK です
Gitlab インストールと設定
sudo su -
cd /home/git
git config --global http.postBuffer 524288000
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-foss.git -b 11-8-stable gitlab
リポジトリがかなり大きいです
error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
などが出る場合は以下の shallow clone を試してみてください
sudo -u git -H git clone --depth 1 https://gitlab.com/gitlab-org/gitlab-foss.git -b 11-8-stable gitlab
必要な設定ファイルの配置を行います
シングルホストであれば基本はデフォルトのままで動作するはずです
cd /home/git/gitlab
sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml
# sudo -u git -H editor config/gitlab.yml
sudo -u git -H cp config/secrets.yml.example config/secrets.yml
sudo -u git -H chmod 0600 config/secrets.yml
sudo chown -R git log/
sudo chown -R git tmp/
sudo chmod -R u+rwX,go-w log/
sudo chmod -R u+rwX tmp/
sudo chmod -R u+rwX tmp/pids/
sudo chmod -R u+rwX tmp/sockets/
sudo -u git -H mkdir -p public/uploads/
sudo chmod 0700 public/uploads
sudo chmod -R u+rwX builds/
sudo chmod -R u+rwX shared/artifacts/
sudo chmod -R ug+rwX shared/pages/
# sudo -u git -H cp config/puma.example.development.rb config/puma.rb
# sudo -u git -H editor config/puma.rb
sudo -u git -H cp config/unicorn.rb.example.development config/unicorn.rb
sudo -u git -H editor config/unicorn.rb
#listen '/home/git/gitlab.socket'
listen '/home/git/gitlab/tmp/sockets/gitlab.socket'
ドキュメントでは puma で動作するはずなのですが unicorn のようなので unicorn.rb を配置します
また socket ファイルの場所を変更します、これは gitlab-workhorse が見ている socket ファイルの場所がデフォルトだと /home/git/gitlab/tmp/sockets/gitlab.socket
になっているためです
次に git の設定を変更します
おそらくこの辺りはコミッター向けの設定かなと思います
sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb
sudo -u git -H git config --global core.autocrlf input
sudo -u git -H git config --global gc.auto 0
sudo -u git -H git config --global repack.writeBitmaps true
sudo -u git -H git config --global receive.advertisePushOptions true
sudo -u git -H git config --global core.fsyncObjectFiles true
最後に Redis を使ったワーカーの設定ファイルを配置します
sudo -u git -H cp config/resque.yml.example config/resque.yml
# sudo -u git -H editor config/resque.yml
DB の設定を行います
こちらも基本的には変更は不要だと思います
sudo -u git cp config/database.yml.postgresql config/database.yml
# sudo -u git -H editor config/database.yml
sudo -u git -H chmod o-rwx config/database.yml
Gem のインストール
ここからは git ユーザに変わって作業することをおすすめします
bundle install の際は「development」「test」を指定しないと rake -T
でタスクの一覧が確認できなかったので指定します
su - git
bundle install --with development test
bundle exec rake -T
Gitlab を管理するシェルをインストール
su - git
bundle exec rake gitlab:shell:install REDIS_URL=unix:/var/run/redis/redis.sock RAILS_ENV=production SKIP_STORAGE_VALIDATION=true
# editor /home/git/gitlab-shell/config.yml
/home/git/gitlab-shell/bin/gitlab-shell
にインストールされます
bundle exec rake "gitlab:workhorse:install[/home/git/gitlab-workhorse]" RAILS_ENV=production
/home/git/gitlab-workhorse/gitlab-workhorse
にインストールされます
なお公式のドキュメントにある「gitlab:indexer:install」はタスクの一覧に 11-8-stable ブランチにはないようです
Gitaly のインストールと起動
su - git
bundle exec rake "gitlab:gitaly:install[/home/git/gitaly,/home/git/repositories]" RAILS_ENV=production
/home/git/gitaly/_build/bin/gitaly
にインストールされます
sudo su -
chmod 0700 /home/git/gitlab/tmp/sockets/private
chown git /home/git/gitlab/tmp/sockets/private
su - git
cd /home/git/gitaly
# editor config.toml
gitlab_path=/home/git/gitlab gitaly_path=/home/git/gitaly && ${gitlab_path}/bin/daemon_with_pidfile ${gitlab_path}/tmp/pids/gitaly.pid ${gitaly_path}/gitaly ${gitaly_path}/config.toml >> ${gitlab_path}/log/gitaly.log 2>&1
ps aux | grep gitaly
で 3 つほどプロセスが起動していれば OK です
データベースのマイグレート
この作業には事前に gitaly の起動が必要です
sudo su -
su - git
cd /home/git/gitlab
bundle exec rake gitlab:setup RAILS_ENV=production
psql gitlabhq_production -c '\d'
を実行すると 294 個のテーブルが作成されていることが確認できると思います
各プロセスの起動スクリプトを配置
sudo su -
cd /home/git/gitlab
cp lib/support/init.d/gitlab /etc/init.d/gitlab
cp lib/support/init.d/gitlab.default.example /etc/default/gitlab
update-rc.d gitlab defaults 21
ls -l /etc/rc*.d/*gitlab
でランレベルなどを確認できます
なお起動スクリプト配置後は gitaly の起動と停止もここから行えます
ログローテションの設定
sudo su -
cd /home/git/gitlab
cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab
状態を確認する
sudo su -
su - git
cd /home/git/gitlab
bundle exec rake gitlab:env:info RAILS_ENV=production
ここまでのインストール状況では以下のように表示されました
System information
System: Ubuntu 16.04
Current User: git
Using RVM: yes
RVM Version: 1.29.10
Ruby Version: 2.5.3p105
Gem Version: 2.7.7
Bundler Version:1.16.2
Rake Version: 12.3.2
Redis Version: 3.0.6
Git Version: 2.7.4
Sidekiq Version:5.2.5
Go Version: go1.13.5 linux/amd64
GitLab information
Version: 11.8.10
Revision: 7d457b7
Directory: /home/git/gitlab
DB Adapter: postgresql
URL: http://localhost
HTTP Clone URL: http://localhost/some-group/some-project.git
SSH Clone URL: git@localhost:some-group/some-project.git
Using LDAP: no
Using Omniauth: yes
Omniauth Providers:
GitLab Shell
Version: 8.4.4
Repository storage paths:
- default: /home/git/repositories
Hooks: /home/git/gitlab-shell/hooks
Git: /usr/bin/git
UI 関連の作業
あとは UI 関連のインストールや設定を行います
GetText PO files の作成
簡単に言えば UI の国際化対応 (ローカライズ) のためのファイルを作成します
sudo su -
su - git
cd /home/git/gitlab
bundle exec rake gettext:compile RAILS_ENV=production
アセットファイルの作成
UI のビルドを行い js ファイルを生成します
少し時間がかかります
sudo su -
su - git
cd /home/git/gitlab
yarn install --production --pure-lockfile
bundle exec rake gitlab:assets:compile RAILS_ENV=production NODE_ENV=production
Gitlab の起動
起動スクリプトを配置してので systemctl or service コマンドで起動できます
sudo su -
systemctl start gitlab
bundler: failed to load command: unicorn_rails (/home/git/gitlab/vendor/bundle/ruby/2.5.0/bin/unicorn_rails)
が出る場合は unicron.rb が設置されているか確認しましょう
Nginx のインストールと設定
xenial デフォルトのリポジトリからインストールできる nginx はバージョンが古いので最新の安定版の nginx をインストールします
sudo su -
add-apt-repository ppa:nginx/stable
apt -y update
apt -y install nginx
cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
rm -f /etc/nginx/sites-enabled/default
nginx -t
で config ファイルの間違えをチェックしましょう
systemctl restart nginx
動作確認
sudo su -
su - git
cd /home/git/gitlab
bundle exec rake gitlab:check RAILS_ENV=production
Checking GitLab subtasks ...
Checking GitLab Shell ...
GitLab Shell: ... GitLab Shell version >= 8.4.4 ? ... OK (8.4.4)
Running /home/git/gitlab-shell/bin/check
Check GitLab API access: OK
Redis available via internal API: OK
Access to /home/git/.ssh/authorized_keys: OK
gitlab-shell self-check successful
Checking GitLab Shell ... Finished
Checking Gitaly ...
Gitaly: ... default ... OK
Checking Gitaly ... Finished
Checking Sidekiq ...
Sidekiq: ... Running? ... yes
Number of Sidekiq processes ... 1
Checking Sidekiq ... Finished
Checking Incoming Email ...
Incoming Email: ... Reply by email is disabled in config/gitlab.yml
Checking Incoming Email ... Finished
Checking LDAP ...
LDAP: ... LDAP is disabled in config/gitlab.yml
Checking LDAP ... Finished
Checking GitLab App ...
Git configured correctly? ... yes
Database config exists? ... yes
All migrations up? ... yes
Database contains orphaned GroupMembers? ... no
GitLab config exists? ... yes
GitLab config up to date? ... yes
Log directory writable? ... yes
Tmp directory writable? ... yes
Uploads directory exists? ... yes
Uploads directory has correct permissions? ... yes
Uploads directory tmp has correct permissions? ... skipped (no tmp uploads folder yet)
Init script exists? ... yes
Init script up-to-date? ... yes
Projects have namespace: ... can't check, you have no projects
Redis version >= 2.8.0? ... yes
Ruby version >= 2.3.5 ? ... yes (2.5.3)
Git version >= 2.18.0 ? ... yes (2.26.2)
Git user has default SSH configuration? ... yes
Active users: ... 1
Checking GitLab App ... Finished
Checking GitLab subtasks ... Finished
まずは必要なプロセスが動作しているか確認しましょう
自分は Update your git to a version >= 2.18.0 from 2.7.4
が出たので git を最新版に変更しました (冒頭で紹介)
最終的にエラーが表示されなければ OK です
あとはブラウザで Ubuntu サーバの IP (自分は vagrant なので 192.168.100.11
) にアクセスしましょう
ちゃんと Gitlab にアクセスできることが確認できます
root ユーザのパスワードを設定しプロジェクトの作成ができるか確認してみましょう
コードを直接変更するには
手元にコードがあるので直接変更してみましょう
Gitlab は 192.168.100.11/favicon.png
に問い合わせると favicon のアイコンデータが URL にリダイレクトします
修正してトップページリダイレクトされるようにしてみましょう
sudo su - git
cd /home/git/gitlab
vim config/routes.rb
favicon_redirect = redirect do |_params, _request|
'/'
#ActionController::Base.helpers.asset_url(Gitlab::Favicon.main)
end
sudo systemctl restart gitlab
これで 192.168.100.11/favicon.png
に問い合わせるとトップページにリダイレクトされるようになると思います
おまけ: Gitlab Pages のインストールと設定
この操作は任意です
Pages はなくても動作します
sudo su - git
cd /home/git
git clone https://gitlab.com/gitlab-org/gitlab-pages.git
cd gitlab-pages/
git checkout v$(</home/git/gitlab/GITLAB_PAGES_VERSION)
make
設定ファイルを変更して Gitlab Pages を有効にします
vim config/gitlab.yml
pages:
enabled: true
sudo vim /etc/default/gitlab
gitlab_pages_enabled=true
sudo cp lib/support/nginx/gitlab-pages /etc/nginx/sites-available/gitlab-pages.conf
sudo ln -sf /etc/nginx/sites-{available,enabled}/gitlab-pages.conf
あとは nginx と gitlab を再起動すれば OK です
sudo systemctl restart nginx
sudo systemctl restart gitlab
最後に
Gitlab をソースコードからインストールしてみました
Gitlab の仕組みなどを学習したい場合には良いかなと思いますが実際に production で使う場合には Omnibus Install を使いましょう
ソースコードが手元にあるので直接バグを改修したりできるので開発者やデバッガ向けの環境かなと思います
大変だったのは Gitlab のバージョンによる Ruby のバージョンの違いかなと思います
当初は Ruby2.6 で進めていたのですがうまく行かず 2.5 にしました
あとはドキュメントがちょくちょく間違っているのでそこは自力で解決した感じです
Gitlab のログは /home/git/gitlab/log/
にあるのでこのあたりを見ながら解決しました
また後からわかったのですが gitlab-foss は readonly リポジトリになっているようで開発のメインリポジトリをビルドしたい場合は gitlab.org/gitlab をビルドしてみると良いと思います
0 件のコメント:
コメントを投稿