背景
Gitlab是一个Git仓库系统,分CE和EE版本,其中CE作为社区版,是开源免费的,用来替代github上要钱才能用私有库是非常不错的选择。
安装
Gitlab-ce安装有多种方法,而且Ubuntu有直接的package可以用,但是坑有点多,装过一个晚上完全跑不起来,差点要放弃了。
然后尝试了一下这种完全自己安装的方法,虽然坑也不少,但是总算成功了。
这篇基本算半翻译半除坑地过一遍安装方法,会跳过一下原帖上我服务器上用不到的部分。
因为是Ubuntu是默认有sudo的,所以可以跳过相关部分。
更新软件源
1 | $ sudo apt update -y |
设置默认的文本编辑器
这一步完全可以跳过,后面有editor命令的全部换成想要文本编辑器即可,如Nano,vim等。
PS: 后面会以vi代替原文中的editor命令,做了这一步的需要继续使用editor命令。1
2
3 Install vim and set as default editor
sudo apt-get install -y vim
sudo update-alternatives --set editor /usr/bin/vim.basic
安装依赖
1 | sudo apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl openssh-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate python-docutils pkg-config cmake nodejs |
这里的nodejs如果需要最新版可能需要看一下怎样安装最新版的NodeJS,但是原文没有提要多少的版本,所以不知道有没有版本要求。可以先继续,如果有什么问题在补上。
一些说明
- Kerberos,我这里不用,所以直接跳过。正如原文所说,你如果不知道这是什么,那么就可以认为是不需要的。
Git
需要Git版本是2.7.4或者更高。Ubuntu的package下载下来的是符合要求的,所以直接使用即可。1
2
3 sudo apt-get install -y git-core git
确认git版本符合要求
git --version
postfix
然后是安装邮件服务,这个是给用户发邮件用的。1
sudo apt-get install -y postfix
安装时选择Internet Site,其他随意。邮件部分配置好点的话,然后可以让Gitlab登录自己邮箱,这样发送的邮件不容易被归到垃圾邮件,这里跳过。
Ruby
推荐2.3.x,而Ubuntu的包管理带的就是2.3.1版本,所以可以直接简单的安装上。1
2
3 sudo apt install ruby
确认一下
ruby -v
Gem
1 | $ sudo gem install bundler --no-ri --no-rdoc |
这里使用gem命令下载感觉不开VPN超慢,建议开启VPN,或者使用tsocks之类的工具来做wrapper使用代理下载。
Go
Git配置
给Gitlab添加一个git用户,1
$ sudo adduser --disabled-login --gecos 'GitLab' git
PostgreSQL
然后安装数据库,推荐PostgreSQL数据库,没用过也没关系,除非是想contribute。想用MySQL也是可以的,但是一切从简的原则,毕竟被坑得不行过,所以跟着使用PostgreSQL。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 安装包
sudo apt-get install -y postgresql postgresql-client libpq-dev postgresql-contrib
建一个用户
sudo -u postgres psql -d template1 -c "CREATE USER git CREATEDB;"
建立数据库并授权
sudo -u postgres psql -d template1 -c "CREATE DATABASE gitlabhq_production OWNER git;"
安装一个扩展,不是很懂有什么用
sudo -u postgres psql -d template1 -c "CREATE EXTENSION IF NOT EXISTS pg_trgm;"
链接一下数据库
sudo -u git -H psql -d gitlabhq_production
检查刚刚那个扩展有没有安装
SELECT true AS enabled
FROM pg\_available\_extensions
WHERE name = 'pg_trgm'
AND installed_version IS NOT NULL;
原文说会输出
enabled
---------
(1 row)
然而,我并没有这个输出,但是可以运行,只是有一个monitor的功能返回500错误,个人认为可能和这个扩展有关,先不管。1
2 退出sql环境
\q
Redis
需要至少2.8版本,而Ubuntu 16.04的包管理提供的是3.0.6版本,Ubuntu大法好。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 安装包
sudo apt-get install redis-server
配置redis
sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.orig
设置port为0来禁用Redis对TCP的监听
sed 's/^port .*/port 0/' /etc/redis/redis.conf.orig | sudo tee /etc/redis/redis.conf
使用Ubuntu的sock文件,这个后面会用到,如果自己改了路径需要注意
echo 'unixsocket /var/run/redis/redis.sock' | sudo tee -a /etc/redis/redis.conf
给所有redis组成员权限
echo 'unixsocketperm 770' | sudo tee -a /etc/redis/redis.conf
创建sock所在的文件夹
mkdir /var/run/redis
chown redis:redis /var/run/redis
chmod 755 /var/run/redis
shell弱鸡表示不懂这段干嘛,直接copy & paste
if [ -d /etc/tmpfiles.d ]; then
echo 'd /var/run/redis 0755 redis redis 10d -' | sudo tee -a /etc/tmpfiles.d/redis.conf
fi
重启redis让配置生效
sudo service redis-server restart
把git用户添加到redis组
sudo usermod -aG redis git
安装主体
Gitlab默认是安装在/home/git目录下,就是git用的home目录下。1
2
3 cd /home/git
clone一下代码
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 8-14-stable gitlab
这里有坑,我安装的时候没有在这个git里面找到8-14-stable的分支,所以用的是8-13-stable,安装的时候需要自己去找最新的分支。
可以使用这个地址,已经使用关键字stable和按最新更新排列了,想要最新的使用master分支也可以,但是稳定性不一定有stable的好。
而且直接clone的话不用VPN或者代理的话非常慢,而且文件有将近200M,很痛苦,直接去网址下载zip包到时候再解压会比较好一点。
配置Gitlab主体
clone好了以后需要配置一下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 打开源文件目录,这里是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
复制一下secret配置文件,这个不用改,后面会有一步程序会自动生成
sudo -u git -H cp config/secrets.yml.example config/secrets.yml
sudo -u git -H chmod 0600 config/secrets.yml
修改权限,让git用户有必须的权限
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 public/uploads/
确保只有Gitlab可以使用uploads目录,这个目录由Gitlab-workhorse使用
sudo chmod 0700 public/uploads
改变CI目录的权限
sudo chmod -R u+rwX builds/
改变CI的artifacts目录的权限
sudo chmod -R u+rwX shared/artifacts/
复制一份Unicorn的配置
sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb
看一下CPU的core数
nproc
需要高性能就要启用族群模式,设置这个Unicorn.rb的worker数目不小于core数,其他的后面讲
sudo -u git -H editor config/unicorn.rb
复制一份Rack attack的配置,这个不需要修改
sudo -u git -H cp config/initializers/rack\_attack.rb.example config/initializers/rack\_attack.rb
配置git,copy直接运行
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
复制一份Redis设置
sudo -u git -H cp config/resque.yml.example config/resque.yml
这里如果是按照上面redis安装过程一路过来的话是不需要修改的,否则就要根据自己的设置修改
sudo -u git -H editor config/resque.yml
讲一下2个配置文件,config/gitlab.yml和config/unicorn.rb。所有文件都只需要修改production的部分就行了,因为后面是直接运行production的。config/gitlab.yml
修改配置,1
2
3host: orzorc.space
port: 8088
https: false
这里主要配置服务器的,必须和nginx的配置一样,我因为主要运行的Apache服务器占用了80和443端口,所以nginx使用的是8088。
注意8080是默认被Unicorn占用掉的,之前好几次没运行起来估计就是因为我nginx配置了8080端口,然后早于Unicorn服务启动,导致Unicorn服务启动失败。
config/unicorn.rb
修改配置,1
2working_directory "/home/git/gitlab"
listen "127.0.0.1:8080", :tcp_nopush => true
主要是这2项,注意端口,务必不要被占用了。
这些配置文件看清楚自己的路径,如果根据上面一步一步下来的话,是不需要任何修改的。
然后是Gitlab的数据库配置,使用PostgreSQL和MySQL不一样的,要去原文看,这里是PostgreSQL的,1
2$ sudo -u git cp config/database.yml.postgresql config/database.yml
$ sudo -u git -H chmod o-rwx config/database.yml
如果是一步一步过来的,这里配置不需要做任何修改,建议不熟悉PostgreSQL的话就直接一步一步过来。 然后Gem安装依赖,1
$ sudo -u git -H bundle install --deployment --without development test mysql aws kerberos
kerberos就是前面提到不知道就不要装的那个,如果你用了,就去掉最后那个。
安装Gitlab-shell
1 | $ sudo -u git -H bundle exec rake gitlab:shell:install REDIS_URL=unix:/var/run/redis/redis.sock RAILS_ENV=production SKIP_STORAGE_VALIDATION=true |
REDIS_URL就是之前配置redis的sock路径,然后会有一个文件生成/home/git/gitlab-shell/config.yml,这个文件里面有一项1
gitlab_url: http://localhost:8088/
这一项默认是你的在gitlab.yml里面配置的网站地址,但是我发现会在后面的check中无法通过,具体表现为Gitlab shell check 里面的API check 502错误。
可以先留着默认,如果出现了这个情况,再改为localhost试试。
安装Gitlab-workhorse
1 | $ cd /home/git |
这里git clone也是比较慢,但是好在文件不大。
初始化数据库,
1 | $ cd /home/git/gitlab |
这里的设置的admin密码可以不用管,第一次登陆的时候系统会直接要求改密码。
设置初始化脚本
1 | $ sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab |
设置Logrotate
1 | 不知道什么用,直接copy |
环境检查
1 | sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production |
生成网站静态文件
1 | $ sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production |
启动Gitlab服务
1 | $ sudo service gitlab start |
nginx
1 | $ sudo apt-get install -y nginx |
把网站配置文件复制过去1
2$ sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
$ sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
配置文件里面修改一下监听的端口和hostname就行了,和之前配置的gitlab.yml里面一样就行了1
2
3
4# 测试一下配置文件syntax
$ sudo nginx -t
# 重启nginx
$ sudo service nginx restart
最后完成
1 | $ sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production |
如果没有红色的提示,那就是没有问题了,有红色提示的部分按照提示的建议做一遍基本也能成功,还有一些前面已经提过了,要是还不行,1
$ sudo service gitlab restart
也不行,重启电脑再试试,如果是按照这篇文章一路下来的应该这时候就可以了。
直接打开网站首页,去设置root密码吧。