Ruby on Railsの開発をする上でGitLabの中身がどうなっているのか色々気になったので、開発環境を構築してみることにしました。
環境
- Windows 10 Pro Insider Preview 10.0.17074
GitLab Development Kit構築
予めGitLab.comでGitLab Community Editionをforkしておきます。
GitLab Development Kitを使って、このforkしたリポジトリを動かします。
公式ドキュメントのprepare.mdとset-up-gdk.mdを読めばだいたい分かりますが、細かい所を今回の環境にあわせて変えていきます。
Rubyのインストール
ドキュメントではRVM: Ruby Version Managerを使っていますが、ここではrbenvを使って環境構築をします。
またapt-getで降ってくるrbenv/ruby-buildは古いので、git cloneして使うことでRuby 2.3.6が使えるようになります。
$ sudo apt-get update
$ sudo apt-get install rbenv
$ mkdir -p "$(rbenv root)"/plugins
$ git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
$ rbenv install 2.3.6
$ rbenv local 2.3.6
Node.jsのインストール
tj/n: Node version managementを使って最新版をインストールします。
$ sudo apt-get install nodejs
$ npm install -g n
$ n latest
Go言語のインストール
こちらもapt-getで降ってくるバージョンは古いので、最新のバージョンを入れます。
$ sudo add-apt-repository ppa:gophers/archive
$ sudo apt-get install golang-1.9-go
$ echo 'export PATH=$PATH:/usr/lib/go-1.9/bin' >> ~/.bash_profile
$ source ~/.bash_profile
他のパッケージ
Yarnをインストールします。
$ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
$ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
$ sudo apt-get update && sudo apt-get install yarn
あとはExperimental Windows 10 using the WSL (Windows Subsystem for Linux)にあるパッケージをapt-get
で引っ張ってきます。
$ sudo apt-get install ruby-dev
$ sudo apt-get install git postgresql postgresql-contrib libpq-dev redis-server libicu-dev cmake g++ libkrb5-dev libre2-dev ed pkg-config
PostgreSQLの起動
postgresユーザを作成して、接続できるようにします。
$ sudo service postgresql start
$ sudo passwd postgres
$ su - postgres
$ psql
postgres=# alter role postgres with password 'superstrongpassword';
接続できるか確認します。
$ psql -h localhost -U postgres
接続できたら、database.ymlも設定変更します。
development:
adapter: postgresql
encoding: unicode
database: gitlabhq_development
host: localhost
username: postgres
password: superstrongpassword
port: 5432
pool: 6
redisの起動
Unixドメインソケット経由で接続できるよう設定する必要があります。
が、Windows側とWSL側をまたぐせいなのかうまく行かず、下記の変更をする必要がありました。
/etc/redis/redis.confに以下の設定を記述します。
unixsocket /var/run/redis/redis.sock
unixsocketperm 777
redisを再起動します。
$ sudo service redis-server restart
このsocketファイルを読み込むために、とりあえずlib/gdk.rbを下記のように変更します。
diff --git a/lib/gdk.rb b/lib/gdk.rb
index 9e67d19..d9c159b 100644
--- a/lib/gdk.rb
+++ b/lib/gdk.rb
@@ -69,7 +69,7 @@ module GDK
when 'psql'
exec('psql', '-h', File.join($gdk_root, 'postgresql'), '-p', pg_port.to_s, *ARGV, chdir: $gdk_root)
when 'redis-cli'
- exec('redis-cli', '-s', File.join($gdk_root, 'redis/redis.socket'), *ARGV, chdir: $gdk_root)
+ exec('redis-cli', '-s', '/var/run/redis/redis.sock', *ARGV, chdir: $gdk_root)
when 'help'
puts File.read(File.join($gdk_root, 'HELP'))
true
また、後のコマンドで生成されるredis.conf, resque.ymlも、こちらのパスに書き換える必要があります。
development: unix:/var/run/redis/redis.sock
test: unix:/var/run/redis/redis.sock
port 0
unixsocket /var/run/redis/redis.sock
[redis]
URL = "unix:///var/run/redis/redis.sock"
設定がうまく行っているかどうかは$ gdk redis-cli
で接続検証ができます。
$ gdk redis-cli
> ping
PONG
GitLab CE 構築
$ gem install gitlab-development-kit
$ gdk init
$ cd gitlab-development-kit
$ gdk install gitlab_repo={{forkしたリポジトリのURL}
$ gdk install
にて、おなじみgit clone
やyarn install
、bundle install
などが走ります。
これがとても長く、たまに途中で失敗します。エラーに再現性は無く、めげずに何回かやると成功しました。
なお本当はbundlerを使って以下のように構築したかったのですが、gdk install
がうまく行きませんでした。gdk内でもbundlerを使っているためpathの解決とかそのあたりが難しいんだと思いますが、詳しくは調べていません。
$ bundle init
$ echo 'gem "gitlab-development-kit"' >> Gemfile
$ bundle install --path vendor/bundle
$ bundle exec gdk init
$ cd gitlab-development-kit
$ bundle exec gdk install gitlab_repo={{forkしたリポジトリのURL}
設定ファイル変更
gitlab.socketファイルをWSL側に作成するようにします。redisの時と同様です。
$ sudo mkdir /var/run/gitlab/
$ sudo chmod 777 /var/run/gitlab/
rails_socket="/var/run/gitlab/gitlab.socket"
listen '/var/run/gitlab/gitlab.socket'
起動
これでインストールは完了しました。
$ gdk run
上記コマンドでforemanによるサーバは起動はするのですが、まだ http://localhost:3000 にアクセスしても画面は映りませんでした...