我想在Windows子系统上使用GitLab CE进行开发
因为对Ruby on Rails的开发很感兴趣,想要了解GitLab的内部结构,所以决定搭建开发环境来尝试一下。
环境
- Windows 10 Pro Insider Preview 10.0.17074
建立 GitLab Development Kit
我会在GitLab.com上先fork GitLab Community Edition。然后使用GitLab开发工具包来运行这个fork的存储库。
只要阅读prepare.md和set-up-gdk.md这两个官方文档,基本上能够理解,但我们会根据当前环境的具体情况进行相应的调整。
安装Ruby
在这里,我们将使用rbenv进行环境设置,尽管在文件中使用了RVM:Ruby版本管理器。此外,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
使用 Node 版本管理工具安装最新版节点。
$ 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
接下来,使用WSL(Windows子系统Linux)在实验性的Windows 10上,通过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"
您可以使用 gkd redis-cli 进行连接验证,以确定设置是否正常。
$ gdk redis-cli
> ping
PONG
GitLab 社区版搭建
$ 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安装并没有成功。由于gdk本身也使用了bundler,所以路径解析等方面可能会有一些困难,但我没有详细调查。
$ 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}
更改配置文件
我們將在 WSL 那一側創建 gitlab.socket 檔案,方法與 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 时,并未显示任何页面…
请提供以下内容的中文本地化释义,仅需要一个选项:
参考
– 供参考
– 参数
– 参考资料
-
- Findings about the WSL (#223) · Issues · GitLab.org / GitLab Development Kit · GitLab
-
- Rails server doesn’t boot up due to getsockopt(2) error · Issue #1982 · Microsoft/WSL
- GitLab Development Kit で OSS開発 に参加する for MAC 2017 – Qiita