April 3, 2016 ... 评论

CentOS 7 64bit中安装GitLab 8.6.1

QQ20160403-1.png

GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

GitLab 5.0以前版本要求服务器端采用 Gitolite 搭建,5.0版本以后不再使用 Gitolite ,采用自己开发的 gitlab-shell 来实现。

今天要介绍的是在阿里云ECS(全新安装的CentOS 7 - 64bit)中安装GitLab 8.6.1的过程,今天才注意到没几天 8.6.3已经发布了。

gitlab_file_view.png

一、下载GitLab rpm安装包

(注:以下的操作都是以root身份进行)

#从国内镜像下载最新的GitLab(速度会比从官方下载快得多),注意对应的版本,CentOS 6选择el6、CentOS 7选择el7的版本,否则安装的过程会报错
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-8.6.1-ce.0.el7.x86_64.rpm

二、安装并配置相关服务(openssh-server & postfix)

yum -y install openssh-server postfix
/etc/init.d/postfix start
chkconfig postfix on

配置postfix

#略

三、安装并配置GitLab

安装GitLab:

rpm -ivh gitlab-ce-8.6.1-ce.0.el7.x86_64.rpm

部分配置示例:

vi /etc/gitlab/gitlab.rb
#配置URL
external_url 'https://gitlab.example.com'
#配置ssh host
gitlab_rails['gitlab_ssh_host'] = 'gitlab.example.com'
#配置时区,如果有需要的话
gitlab_rails['time_zone'] = 'UTC'
#email功能开启
gitlab_rails['gitlab_email_enabled'] = true
#email发件地址
gitlab_rails['gitlab_email_from'] = 'gitlab@example.com'
#email发件者名称
gitlab_rails['gitlab_email_display_name'] = 'GitLab'
#如果需要开启SMTP,那么就要配置跟SMTP相关的项目
gitlab_rails['smtp_enable'] = true
...
#如果要启用SSL,那么默认的证书是读取自/etc/gitlab/ssl/目录,以下配置不用修改,只需要创建ssl目录并将crt与key文件放到该目录
# nginx['ssl_certificate'] = "/etc/gitlab/ssl/#{node['fqdn']}.crt"
# nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/#{node['fqdn']}.key"

配置SSL:

将crt与key文件拷到该目录(可以从startssl.com申请免费的SSL证书,具体的步骤先略过)

mkdir /etc/gitlab/ssl
#假设证书已经申请好,并存放在/root/ssl中,文件名前缀与url相同
cp /root/ssl/my.crt /etc/gitlab/ssl/gitlab.example.com.crt
cp /root/ssl/my.key /etc/gitlab/ssl/gitlab.example.com/key

重新应用GitLab配置:

gitlab-ctl reconfigure

配置GitLab内置的Nginx:

vi /var/opt/gitlab/nginx/conf/gitlab-http.conf
#修改完配置后重启服务
gitlab-ctl restart

添加到开机自启动:

#如果/etc/rc.local文件中没有gitlab-ctl start,那么就加到该文件的最后
echo "gitlab-ctl start" >> /etc/rc.local

评论

(function(){ var bp = document.createElement('script'); bp.src = '//push.zhanzhang.baidu.com/push.js'; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();