公司初创, 新买了一台Dell r320服务器。略屌, 但屌的是它居然是机架式的而不是之前常见到的塔式, 所以大家都觉得很叼的样子。但其实性能一般, 4核8G内存1T硬盘的配置并不算什么高端水准。但是不管怎么样, 既然服务器买了总不能当做摆设吧。
按最初设计, 服务器至少两台。一台用来做测试服务器, 另一台用来部署各种工具, 比如svn, gitlab, 游戏后台管理和自动化发布工具等等。但是预算有限, 服务器只有一个那就先用着吧, 实在不行以后再想辙。
工具最先要用到也就是策划和美术们要管理资源和文档的svn, 另外就是技术要用的gitlab。svn很简单没什么可说的, 其实技术也完全可以使用svn, 但是为了更好地装逼, 虽然暂时只有一前一后两个技术, 但我们还是任性地选择了gitlab这个部署起来非常蛋疼但biger够高的代码版本管理工具。
言归正传, 介绍一下centos7安装gitlab的正确姿势。
系统工具安装设置
论官方文档的重要性
https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/installation.md 开始装之前, 建议各位老少爷们千万不要吝惜这点时间, 动手点进去, 花个十分钟把整个流程熟悉一下。这真是血的教训, 我最开始的时候网上搜到一篇安装教程就开始动手装, 结果中间出了N多问题。所以, 劝诫各位不管是装什么工具, 花点时间看看官方的文档, 百利而无一害。
说一下服务器上的环境和需要用到的依赖
OS: centos 7
Ruby: 2.1.2p95
redis: 2.8.19
mysql: 5.6.25
git: 2.1.3
nginx: 1.8.0
升级linux系统版本和安装wget
升级所有包, 改变软件设置和系统设置,系统版本内核都升级;wget是很常用的linux系统下载工具, 方便之后下载需要用到的包。
$ sudo yum -y update
$ sudo yum -y install wget
增加EPEL安装源
EPEL, 即Extra Packages for Enterprise Linux, 是对标准yum安装源的很好补充, 里边包含了很多常用的软件。
下载并安装GPG key
$ sudo wget -O /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 https://www.fedoraproject.org/static/0608B895.txt
$ 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/6/x86_64/epel-release-6-8.noarch.rpm
配置EPEL源
创建文件/etc/yum.repos.d/PUIAS_6_computational.repo, 然后写入以下内容:
name=PUIAS computational Base $releasever - $basearch
mirrorlist=http://puias.math.ias.edu/data/puias/computational/$releasever/$basearch/mirrorlist
#baseurl=http://puias.math.ias.edu/data/puias/computational/$releasever/$basearch
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-puias
下载并安装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
检验成功没有
出现类似的打印既安装成功
gpg-pubkey-352c64e5-52ae6884
安装配置完后, 可以敲入命令检测一下:
$ sudo yum repolist
安装GitLab的所需依赖包和工具
$ su -
$ yum -y groupinstall ‘Development Tools’
$ yum -y install vim-enhanced readline readline-devel ncurses-devel gdbm-devel glibc-devel tcl-devel openssl-devel curl-devel expat-devel db4-devel byacc sqlite-devel gcc-c++ libyaml libyaml-devel libffi libffi-devel libxml2 libxml2-devel libxslt libxslt-devel libicu libicu-devel system-config-firewall-tui python-devel redis sudo wget crontabs logwatch logrotate perl-Time-HiRes git
如果安装过程中出现不能安装的情况, 那么增加rhel6的安装源, 再试试。
$ yum-config-manager —enable rhel-6-server-optional-rpms
配置redis
$ sudo chkconfig redis on # 加入开机自启动redis的设置
$ sudo service redis start # 启动redis, 默认端口6379
配置邮件服务器
这里暂时略过了, 没有弄。
安装Ruby
$ su -
$ mkdir /tmp/ruby && cd /tmp/ruby
$ curl —progress ftp://ftp.ruby-lang.org/pub/ruby/2.1/ruby-2.1.2.tar.gz | tar xz
$ cd ruby-2.0.0-p353
$ ./configure —prefix=/usr/local/
$ make && make install
确认安装是否成功
$ which
/usr/local/bin/ruby
$ ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
安装bundle
$ sudo gem install bundler —no-ri —no-rdoc
如果提示sudo: gem: command not found, 切换到root账户下执行。
创建git用户来运行gitlab服务
$ su -
$ adduser —system —shell /bin/bash —comment ‘GitLab’ —create-home —home-dir /home/git/ git
Tip:省略密码
配置gitlab-shell
GitLab shell是专门为GitLab开发的提供ssh访问和版本管理的软件。
$ su - git # 因为git用户没有密码, 所以这里要先切到root, 然后切换到git用户
clone gitlab-shell的源码
$ git clone https://github.com/gitlabhq/gitlab-shell.git
$ cd gitlab-shell
切换到v2.2.0版本
$ git checkout v2.2.0
然后根据自己的需求修改配置
$ cp config.yml.example config.yml
将 gitlab_url: “http://localhost:8080/“ 修改成自己的域名或者地址, 如 http://test.gitlab.net
Tip: 另外如果使用的域名是测试域名, 不要忘记在系统的/etc/hosts做域名映射。
执行脚本安装其他一些必备的配置或者目录
$ ./bin/install
安装mysql数据库
安装mysql并设置开机启动
$ su -
$ yum install -y mysql-server mysql-devel
$ chkconfig mysqld on
$ service mysqld start
设置mysql root账户的密码:
$ /usr/bin/mysql_secure_installation
创建新用户和数据库给gitlab使用
$ mysql -u root -p
# 输入root密码
# 为gitlab创建使用用户
CREATE USER 'gitlab'@'localhost' IDENTIFIED BY 'gitlab账号的密码';
# 创建gitlaba使用的数据库
CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
# 给予gitlab用户权限
GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'gitlab'@'localhost';
# 登出数据库
\q
安装配置Gitlab
安装
$ su - git # 因为git用户没有密码, 所以这里要先切到root, 然后切换到git用户
克隆GitLab并切换分支到7-4-stable
$ git clone https://github.com/gitlabhq/gitlabhq.git gitlab
$ cd /home/git/gitlab
$ git checkout 7-4-stable
根据自己的实际情况配置
# 复制配置文件
$ cp config/gitlab.yml.example config/gitlab.yml
# 修改配置文件中的访问域名(your_domain_name为项目的访问域名)
$ sed -i ‘s|localhost|your_domain_name|g’ config/gitlab.yml
# 设定log和tmp目录所有者和权限
$ chown -R git log/
$ chown -R git tmp/
$ chmod -R u+rwX log/
$ chmod -R u+rwX tmp/
# 创建gitlab-satellites目录
$ mkdir /home/git/gitlab-satellites
# 创建tmp/pids/和tmp/sockets/目录, 确保gitlab有相应的权限
$ mkdir tmp/pids/
$ mkdir tmp/sockets/
$ chmod -R u+rwX tmp/pids/
$ chmod -R u+rwX tmp/sockets/
# 创建public/uploads目录
$ mkdir public/uploads
$ chmod -R u+rwX public/uploads
# 复制unicorn配置
$ cp config/unicorn.rb.example config/unicorn.rb
# 编辑unicorn配置(笔者这里采用默认配置)
$ vim config/unicorn.rb
# 配置git的用户和邮件
$ git config —global user.name “GitLab”
$ git config —global user.email “gitlab@your_domain_name”
$ git config —global core.autocrlf input
# 配置数据库访问文件, 修改其中username和password就可以了, 其中密码就是上面数据库步骤中创建gitlab用户的密码。
$ cp config/database.yml.mysql config/database.yml
#
# PRODUCTION
#
production:
adapter: mysql2
encoding: utf8
reconnect: false
database: gitlabhq_production
pool: 10
username: gitlab
password: "gitlab"
# host: localhost
# socket: /tmp/mysql.sock
确保该文件只有git账号有权限读取。
$ chmod o-rwx config/database.yml
Tip:配置的时候需要仔细一点, 很可能因为一点小问题导致gitlab项目运行失败, 又得回头来折腾。
安装Gems
$ su -
$ gem install charlock_holmes —version ‘0.6.9.4’
$ exit
安装mysql依赖包
$ cd /home/git/gitlab/
$ bundle install —deployment —without development test postgres puma aws
Tip1: gem install和bundle install这两步安装的时候很坑爹, 因为安装的源都是国外的, 所以有时候会因为网络的原因导致整个安装过程频频失败, 因为这两步耗费了大量的精力。后来等公司人少了之后, 安装就很顺利了。so建议找个人少网好的地方执行这两步骤。
Tip2: 如果安装过程中出现长时间没有反应的时候, 可以尝试将GemFile里边source: http://rubygems.org 替换成 source: “https://ruby.taobao.org“, 然后再尝试。
初始化数据
$ cd /home/git/gitlab
$ bundle exec rake gitlab:setup RAILS_ENV=production
完成之后会生成一个默认的管理员账号:admin@local.host 5iveL!fe
安装gitlab服务启动脚本
$ su -
$ wget -O /etc/init.d/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/master/init/sysvinit/centos/gitlab-unicorn
$ chmod +x /etc/init.d/gitlab
设置开机自启动
$ chkconfig —add gitlab
$ chkconfig gitlab on
检测应用程序状态
$ su - git
$ cd gitlab/
$ bundle exec rake gitlab:env:info RAILS_ENV=production
Tip: 这里可以查看系统、Ruby、GitLab和GitLab Shell的版本和其他信息
启动Gitlab
$ service gitlab start
查看应用更加详细的信息
$ su - git
$ cd gitlab/
$ bundle exec rake gitlab:check RAILS_ENV=production
Tip: 这里可以看到一些检测的日志, 如果中间出现了红色的报错信息, 那就挨个解决。其中Init script up-to-date整个错误, 官方文档上提示可以忽略。
安装web服务器
选择Nginx,版本1.8.0
$ su -
$ yum -y install nginx
加入开机启动项
$ chkconfig nginx on
将gitlab的web服务配置文件拷入/etc/nginx/conf.d目录下
$ cd /home/git/gitlab
$ cp lib/support/nginx/gitlab /etc/nginx/conf.d/gitlab
根据实际情况修改配置,servre_name修改成自己的域名或者ip地址, 然后清除无用的web配置表
$ cd /etc/nginx/conf.d
$ mv default.conf default.conf.bak
将nginx加入git用户组,确保nginx有访问gitlab目录的权限,避免出现403错误
$ usermod -a -G git nginx
$ chmod g+rx /home/git/
重新启动nginx
$ sudo service nginx restart
配置防火墙
如果nginx配置里gitlab的端口不是默认的80端口, 需要把端口加入到防火的配置里, 避免出现无法连通的情况。然后重启防火墙。
当所有的步骤都顺利完成之后, 恭喜你也能拥有自己的gitlab了。访问地址就是gitlab.conf里配置的地址, 打开之后就能看到如此页面了。可以输入之前生成的管理员账号进入系统。
问题摘录
在这里把我在这整个过程中遇到的问题记录一下, 希望能给到大家一点帮助。
bundle install的时候出现
Could not find addressable-2.3.2 in any of the sources Run
bundle installto install missing gems.
类似的问题, 但去相应目录下查看却发现这个库是存在的, 并且安装提示出现了time out这样的提示, 那就是网络的原因导致了安装过程失败。
解决办法: 找个网速好的地方或者等公司用网的时候少了再试试。访问页面的时候出现302错误, 查看/home/git/gitlab/log/unicorn.stderr.log日志的时候发现有31 > 30秒这一行, 访问请求超时。分析其原因, 可能是因为访问页面的时候要加载大量的资源, 但是服务器尚未生成这些页面的资源, 所以需要执行下面的命令编译生成需要的资源文件。
解决办法:$ cd /home/git/gitlab
$ bundle exec rake assets:precompile RAILS_ENV=productiongitlab是使用http或者https访问, nginx的配置和上述好几个文件里对应的ssl项的配置都是不一样的, https比http的配置更加复杂。当时第一次安装的时候, 从网上down下来的gitlab nginx配置的时候错误地down到了https的配置, 结果运行起来出现了许多验证失败导致push失败等相关的问题, 所以如果不是刚性需求, 这里还是建议选择http的访问方式。
解决办法: 选择简便配置的http访问方式。运行gitlab-shell bin目录下check脚本可以有效地发现一些ssh验证权限可能存在的问题, 所以这一步很有必要。