GitLab,是一个使用 Ruby on Rails 开发的开源应用程序,与Github类似,能够浏览源代码,管理缺陷和注释,非常适合在团队内部使用。
gitlab是基于Ruby on Rails的,安装和配置非常麻烦,不过有傻瓜安装包,https://about.gitlab.com/downloads/,或者,https://bitnami.com/stack/gitlab/installer。但是这两个包都是英文界面的,gitlab把界面提示写在每一个rb文件里了,所以,要用中文版的不能像redmine那样设定一下就行了。
需要通过源码安装中文版giglab,代码地址:https://gitlab.com/larryli/gitlab,当前最新版为8.5.5。
由于公司的操作系统普遍采用centos,为统一管理,我们仍在centos上进行安装,官方没有8.5.5在centos上的安装文档,参考Ubuntu安装手册https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/installation.md,以及7.0版在centos上的安装手册https://github.com/gitlabhq/gitlab-recipes/tree/master/install/centos
开始之前
在开始之前请先查看官方的刚需文档: https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/requirements.md ,该文档说明了系统,软件和硬件等各方面的需求。详细的了解这些,可以避免碰到很多怪异的问题。
安装步骤总览
- 更新仓库源
- 安装必须的软件包
- 安装Ruby
- 安装Go语言
- 创建系统用户
- 安装数据库Mysql
- 安装Redis
- 安装GitLab
- 安装Nginx
0、更新仓库源
这个比较简单,安装完成之后记的配置下网络,使其可以在启动时自动连接。而后需要升级系统和安装一些相应的软件和依赖包,以下逐一说明。
Tips:如果不能连接国外的网络,经常出现网络错误或者couldn’t not resolve host这样的错误,建议修改dns服务器为8.8.8.8和8.8.4.4。
a、升级操作系统和安装wget
$ sudo yum -y update
$ sudo yum -y install wget
升级完成后,系统版本是6.7。
b、增加EPEL安装源
EPEL,即Extra Packages for Enterprise Linux,这个软件仓库里有很多非常常用的软件,而且是专门针对RHEL设计的,对RHEL标准yum源是一个很好的补充,完全免费使用,由Fedora项目维护,所以如果你使用的是RHEL,或者CentOS,Scientific等RHEL系的linux,可以非常放心的使用EPEL的yum源。
下载并安装GPG key
$ sudo wget -O /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6
$ sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
检验下是否安装成功
$ sudo rpm -qa gpg*
安装epel-release-6-8.noarch包
$ sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
提示:不要在意x86_64,在i686的机器上一样能使用。
c、增加PUIAS安装源
PUIAS Linux是面向桌面和服务器的完整的操作系统,它靠编译Red Hat Enterprise Linux的源代码包来创建。除了这些上游的软件包外,该项目还提供一些其他的软件仓库:“Addons”包含了通常的Red Hat发行中未收入的额外软件包,“Computational”提供专门针对科学计算的软件,“Unsupported”则收入各种各样的测试性软件 包。该发行由美国普林斯顿 大学的高等研究所维护。
获取/etc/yum.repos.d/PUIAS_6_computational.repo
$ sudo wget -O /etc/yum.repos.d/PUIAS_6_computational.repo https://gitlab.com/gitlab-org/gitlab-recipes/raw/master/install/centos/PUIAS_6_computational.repo
下载并安装GPG key
$ sudo wget -O /etc/pki/rpm-gpg/RPM-GPG-KEY-puias http://springdale.math.ias.edu/data/puias/6/x86_64/os/RPM-GPG-KEY-puias
$ sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-puias
检验下是否安装成功
$ sudo rpm -qa gpg*
Tips:安装完EPEL和PUIAS两个源后,可以检测下:
$ sudo yum repolist
c、增加REMI安装源
$ sudo rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
$ sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
默认地,REMI是禁用的。要检查REMI是否已经成功安装,使用这个命令。你会看到几个REMI仓库,比如remi、remi-php55和remi-php56。
$ yum repolist disabled | grep remi
从REMI仓库中安装一个包
如上所述,最好保持禁用REMI仓库,只有在需要的时候再启用。
要搜索或安装REMI仓库中的包,使用这些命令:
代码如下:
$ sudo yum --enablerepo=remi search
$ sudo yum --enablerepo=remi install
Note: 安装过程中需要手工编辑某些文件。通过下面命令可以将VIM设置为默认编辑器
安装vim并设置为默认编辑器(不知都什么原因,没生效)
sudo yum -y install vim-enhanced
sudo update-alternatives --set editor /usr/bin/vim.basic
# For reStructuredText markup language support, install required package:
yum -y install python-docutils
1、安装GitLab的所需依赖包和工具
a、安装依赖包
$ su -
# yum -y groupinstall 'Development Tools'
# yum -y install readline readline-devel ncurses-devel gdbm-devel glibc-devel tcl-devel openssl-devel curl-devel expat-devel db4-devel byacc sqlite-devel libyaml libyaml-devel libffi libffi-devel libxml2 libxml2-devel libxslt libxslt-devel libicu libicu-devel system-config-firewall-tui redis sudo wget crontabs logwatch logrotate perl-Time-HiRes git cmake libcom_err-devel.i686 libcom_err-devel.x86_64 nodejs
b、安装git
确定git版本在2.7.3及以上
git --version
系统默认版本为1.8.3,版本太老,删除并通过源代码安装
删除安装的git
yum -y remove git
安装git依赖包
$ sudo yum install curl-devel expat-devel gettext-devel openssl-devel perl-devel zlib-devel
下载源码并编译安装
mkdir /tmp/git && cd /tmp/git
curl --progress https://www.kernel.org/pub/software/scm/git/git-2.8.2.tar.gz | tar xz
cd git-2.8.2/
./configure
make
make prefix=/usr/local install
为确保$PATH环境变量生效,需要重新连接后执行git --version
当编辑文件 config/gitlab.yml 时(第5步), 修改 git -> bin_path 为 /usr/local/bin/git
c、安装邮件服务器
接下来我们还要安装一个邮件服务器,官方推荐使用postfix
yum install -y postfix
接下来选择 'Internet Site' 并回车确定主机名
2、安装Ruby
注意:当前支持的Ruby版本为2.1.x. Ruby 2.2 和2.3尚不支持。
下载并编译:
su -
mkdir /tmp/ruby && cd /tmp/ruby
curl --progress https://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.8.tar.gz | tar xz
cd ruby-2.1.8
./configure --disable-install-rdoc
make
make prefix=/usr/local install
安装完成后,重新登录终端确保$PATH生效,检测ruby的安装成功与否:
$ which ruby
/usr/local/bin/ruby
$ ruby -v
ruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-linux]
Gitlab的包使用bundler进行依赖关系管理,所以还得安装。如果在国内的用户请先修改Ruby的源服务器
gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/
gem sources -l
安装bundle:
$ sudo gem install bundler --no-ri --no-rdoc
如果提示sudo: gem: command not found,使用root账号登录执行该命令即可。
3.安装Go语言支持
在GitLab8.0以后HTTP请求开始依赖Go编译,所以我们要进行安装,这里要注意Go会区分操作系统位数
mkdir /tmp/golang && cd /tmp/golang
curl -O --progress https://storage.googleapis.com/golang/go1.5.3.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.5.3.linux-amd64.tar.gz
sudo ln -sf /usr/local/go/bin/{go,godoc,gofmt} /usr/local/bin/
4、创建系统用户
adduser --system --shell /bin/bash --comment 'GitLab' --create-home --home-dir /home/git/ git
修改git用户的PATH路径
visudo
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
修改为
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
5.安装数据库
注意:因为gitlab需要最低9.1版本,centos默认的8.x版postgreSQL无法支持, 需要添加 PGDG yum库,如果系统已安装postgresql需要先进行卸载:
yum remove postgresql
安装 pgdg 资源库:
rpm -Uvh http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-centos93-9.3-1.noarch.rpm
wget https://www.postgresql.org/ftp/source/v9.3.8/postgresql-9.3.8.tar.gz
安装 postgresql93-server 以及 postgreqsql93-devel 包:
yum install postgresql93-server postgresql93-devel
可执行文件被安装在 /usr/pgsql-9.3/bin/。 为保证正常执行,需要将该路径添加到 $PATH 环境变量或创建链接。这里我们为gitlab创建链接:
ln -s /usr/local/postgresql-9.3.8/bin/pg_dump /usr/bin/pg_dump
ln -s /usr/local/postgresql-9.3.8/bin/pg_restore /usr/bin/pg_restore
ln -s /usr/local/postgresql-9.3.8/bin/psql /usr/bin/psql
重命名服务脚本为postgresql:
mv /etc/init.d/{postgresql-9.3,postgresql}
ln -s /usr/local/postgresql-9.3.8/bin/psql /usr/bin/psql
初始化数据库:
service postgresql initdb
启动postgresql服务,并设置开机自动启动:
service postgresql start
chkconfig postgresql on
配置数据库用户及密码
su - postgres
export PATH=$PATH:/usr/pgsql-9.3/bin/
psql -d template1
psql (9.4.3)
Type "help" for help.
template1=# CREATE USER git CREATEDB;
CREATE ROLE
template1=# CREATE DATABASE gitlabhq_production OWNER git;
CREATE DATABASE
template1=# \q
exit # exit uid=postgres, return to root
使用 gitlab 用户 (uid=git) 测试连接,检查当前用户:
whoami
用 git 用户连接Postgres:
sudo -u git psql -d gitlabhq_production
显示如下提示:
gitlabhq_production=>
说明已经连接成功,可以通过 \q 命令退出
在 /var/lib/pgsql/9.3/data/pg_hba.conf 中配置认证方式及认证信息:
host all all 127.0.0.1/32 trust
6.安装Redis
Gitlab要求Redis版本不低于2.8,系统默认安装版本为2.4.1,卸载当前版本并采用remi源安装最新版本:
卸载当前redis:
yum -y remove redis
采用remi源安装最新版本:
yum --enablerepo=remi install redis
设置开机自动启动:
chkconfig redis on
Configure redis to use sockets:
cp /etc/redis.conf /etc/redis.conf.orig
Disable Redis listening on TCP by setting 'port' to 0:
sed 's/^port .*/port 0/' /etc/redis.conf.orig | sudo tee /etc/redis.conf
Enable Redis socket for default CentOS path:
echo 'unixsocket /var/run/redis/redis.sock' | sudo tee -a /etc/redis.conf
echo -e 'unixsocketperm 0770' | sudo tee -a /etc/redis.conf
Create the directory which contains the socket
mkdir /var/run/redis
chown redis:redis /var/run/redis
chmod 755 /var/run/redis
Persist the directory which contains the socket, if applicable
if [ -d /etc/tmpfiles.d ]; then
echo 'd /var/run/redis 0755 redis redis 10d -' | sudo tee -a /etc/tmpfiles.d/redis.conf
fi
Activate the changes to redis.conf:
service redis restart
Add git to the redis group:
usermod -aG redis git
7. GitLab
我们将 GitLab 安装到 "git" 用户的home中:
cd /home/git
获取源代码
选择中文版代码地址进行克隆,默认采用master版本,对应gitlab8.5.5
sudo -u git -H git clone https://gitlab.com/larryli/gitlab.git gitlab
配置gitlab
进入gitlab安装目录
cd /home/git/gitlab
复制gitlab配置文件
sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml
Update GitLab config file, follow the directions at top of file
sudo -u git -H vim config/gitlab.yml
修改 gitlab -> host 为主机域名
更新 gitlab -> email_from 为vp_svn@vprisk.com
修改 git -> bin_path 为 /usr/local/bin/git
复制安全文件
sudo -u git -H cp config/secrets.yml.example config/secrets.yml
sudo -u git -H chmod 0600 config/secrets.yml
保证 GitLab 对 log/ 和 tmp/ 目录具备写权限
sudo chown -R git log/
sudo chown -R git tmp/
sudo chmod -R u+rwX,go-w log/
sudo chmod -R u+rwX tmp/
保证 GitLab 对 tmp/pids/ 和 tmp/sockets/ 目录具备写权限
sudo chmod -R u+rwX tmp/pids/
sudo chmod -R u+rwX tmp/sockets/
创建 public/uploads/ 目录
sudo -u git -H mkdir public/uploads/
保证只有 GitLab 用户能够访问 public/uploads/ 目录
因此 public/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
查询内核数了
nproc
如果支持高负载可以启用集群设置
将 workers 数据设置为不小于CPU内核数量
Ex. change amount of workers to 3 for 2GB RAM server
sudo -u git -H vim config/unicorn.rb
通过复制 example 创建 Rack attack 配置文件
sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb
为 git 用户配置全局 Git 配置,当使用 web 编辑器进行编辑时使用
sudo -u git -H git config --global core.autocrlf input
配置 Redis 连接
sudo -u git -H cp config/resque.yml.example config/resque.yml
Change the Redis socket path if you are not using the default Debian / Ubuntu configuration
sudo -u git -H vim config/resque.yml
Important Note: Make sure to edit both gitlab.yml and unicorn.rb to match your setup.
Note: If you want to use HTTPS, see Using HTTPS for the additional steps.
配置 GitLab 数据库连接配置
只采用 PostgreSQL 配置信息:
sudo -u git cp config/database.yml.postgresql config/database.yml
只为 git 用户分配 config/database.yml 的读权限
sudo -u git -H chmod o-rwx config/database.yml
安装 Gems
修改 git 用户的Ruby的源服务器
sudo -u git -H gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/
sudo -u git -H gem sources -l
sudo -u git -H bundle config mirror.https://rubygems.org https://ruby.taobao.org
PostgreSQL 数据库(不使用mysql)
sudo -u git -H bundle config build.pg --with-pg-config=/usr/pgsql-9.3/bin/pg_config
sudo -u git -H bundle install --deployment --without development test mysql aws kerberos
安装 GitLab Shell
GitLab Shell 是一个 SSH 访问以及仓库管理软件,专门用于 GitLab。
启动 gitlab-shell 安装任务 (请根据需要替换 REDIS_URL
):
sudo -u git -H bundle exec rake gitlab:shell:install REDIS_URL=unix:/var/run/redis/redis.sock RAILS_ENV=production
默认情况下, gitlab-shell 是根据 GitLab 配置信息生成的。
可以通过以下命令检查及修改 gitlab-shell :
sudo -u git -H vim /home/git/gitlab-shell/config.yml
Note: Make sure your hostname can be resolved on the machine itself by either a proper DNS record or an additional line in /etc/hosts ("127.0.0.1 hostname"). This might be necessary for example if you set up GitLab behind a reverse proxy. If the hostname cannot be resolved, the final installation check will fail with "Check GitLab API access: FAILED. code: 401" and pushing commits will be rejected with "[remote rejected] master -> master (hook declined)".
安装 gitlab-workhorse
cd /home/git
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-workhorse.git
cd gitlab-workhorse
sudo -u git -H git checkout 0.6.5
sudo -u git -H make
初始化数据库及高级特性
进入 Gitlab 安装目录
cd /home/git/gitlab
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production
输入 'yes' 创建数据库表结构
完成时显示输出 'Administrator account created:'
默认密码
login.........root
password......5iveL!fe
本系统登录后修改为gitlab@2016
Note: You can set the Administrator/root password and e-mail by supplying them in environmental variables, GITLAB_ROOT_PASSWORD and GITLAB_ROOT_EMAIL respectively, as seen below. If you don't set the password (and it is set to the default one) please wait with exposing GitLab to the public internet until the installation is done and you've logged into the server the first time. During the first login you'll be forced to change the default password.
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production GITLAB_ROOT_PASSWORD=yourpassword GITLAB_ROOT_EMAIL=youremail
Secure secrets.yml
The secrets.yml file stores encryption keys for sessions and secure variables. Backup secrets.yml someplace safe, but don't store it in the same place as your database backups. Otherwise your secrets are exposed if one of your backups is compromised.
安装启动脚本
下载启动脚本 (位于 /etc/init.d/gitlab
):
sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab
chkconfig --add gitlab
配置 GitLab 自动运行:
chkconfig gitlab on
安装 Logrotate
sudo cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab
检查应用状态
检查 Gitlab 程序及环境是否正确配置:
sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
编译Assets
sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production
启动 GitLab 服务
sudo service gitlab start
或者
sudo /etc/init.d/gitlab restart
8. 配置WebServer
这里官方建议使用nginx,当然如果你对apache足够熟悉也可以改用apache。
首先配置nginx 源:
vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1
yum -y --enablerepo=nginx install nginx
chkconfig nginx on
如果你的机器上没能IPV6地址,一定要注释掉IPV6协议部分
cp lib/support/nginx/gitlab /etc/nginx/conf.d/gitlab.conf
添加用户nginx到git组
usermod -a -G git nginx
chmod g+rx /home/git/
检查配置
sudo nginx -t
重启nginx:
sudo service nginx restart
安装完成!
再次验证应用状态,保证安装过程中没有错过任何步骤,可以通过以下命令验证:
sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production
如果所有检查项均显示为绿色,那么恭喜你完成了 Gitlab 中文版安装!