GitLab-阿里云开发者社区

开发者社区> 彼岸花2012s> 正文

GitLab

简介: GitLab 是一个利用 Ruby on Rails 开发的开源版本控制系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目。 它拥有与 GitHub 类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。
+关注继续查看

开源中国代码托管平台就是基于 GitLab 项目搭建。

http://git.oschina.net/

GitLab 分为 GitLab Community Edition(CE) 社区版 和 GitLab Enterprise Edition(EE) 专业版。社区版免费,专业版收费,两个版本在功能上的差异对比,可以参考官方对比说明:

https://about.gitlab.com/features/#compare


安装过程

一、在线安装

本文以 CentOS 7.4 && Ubuntu16.04为例,更多安装方法参考:https://about.gitlab.com/installation/

  • 准备工作

推荐配置至少2C4G.(官方推荐配置,低配机器可自行测试)

1. YUM(RedHat 体系)

以 CentOS7.4为例:

  • 安装依赖
sudo systemctl enable sshd
sudo systemctl start sshd
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld

sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix


  • 设置 gitlab 安装源

官方源安装方法:

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash


由于网络问题,国内推荐使用清华大学镜像源进行安装:

cat>/etc/yum.repos.d/gitlab-ce.repo<<'EOF'
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
EOF
  • 安装 GitLab

首先可以设置域名,域名需要保证能够正常解析,可以根据使用场景选择公网域名或者是本地 hosts 测试。

sudo EXTERNAL_URL="http://gitlab.ikiwi.me" yum install -y gitlab-ce


也可以不设置域名,域名绑定可以随时在配置文件/etc/gitlab/gitlab.rb里进行修改:

external_url 'http://gitlab.xxx.com'

直接安装:

sudo yum install -y gitlab-ce


安装完成以后,运行下面的命令进行配置:

sudo gitlab-ctl reconfigure


2. APT(Debian 体系)

以 Ubuntu 16.04为例:

  • 安装依赖
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates
sudo apt-get install -y postfix


  • 设置 gitlab 安装源

官方源安装方法:

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash


  • 安装 GitLab

首先可以设置域名,域名需要保证能够正常解析,可以根据使用场景选择公网域名或者是本地 hosts 测试。

sudo EXTERNAL_URL="http://gitlab.ikiwi.me" apt-get install gitlab-ce


也可以不设置域名,域名绑定可以随时在配置文件/etc/gitlab/gitlab.rb里进行修改:

external_url 'http://gitlab.xxx.com'

直接安装:

sudo apt-get install gitlab-ce


二、离线包安装

1. RPM 包(RedHat 体系)

以 CentOS7.4为例:

wget --content-disposition <https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-11.0.3-ce.0.el7.x86_64.rpm/download.rpm>
rpm -ivh [gitlab-ce-11.0.3-ce.0.el7.x86_64.rpm](https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-11.0.3-ce.0.el7.x86_64.rpm/download.rpm)

2. DEB 包(Debian 体系)

以 Ubuntu 16.04为例:

wget --content-disposition <https://packages.gitlab.com/gitlab/gitlab-ce/packages/ubuntu/xenial/gitlab-ce_11.3.8-ce.0_amd64.deb/download.deb>
sudo dpkg -i [gitlab-ce_11.3.8-ce.0_amd64.deb](https://packages.gitlab.com/gitlab/gitlab-ce/packages/ubuntu/xenial/gitlab-ce_11.3.8-ce.0_amd64.deb/download.deb)

安装完成以后,运行下面的命令进行配置:

sudo gitlab-ctl reconfigure


整个 Gitlab 项目构成:

  • nginx: 静态 web 服务器
  • gitlab-shell: 用于处理 Git 命令和修改 authorized
  • keys 列表
  • gitlab-workhorse: 轻量级的反向代理服务器
  • logrotate:日志文件管理工具
  • postgresql:数据库
  • redis:缓存数据库
  • sidekiq:用于在后台执行队列任务(异步执行)
  • unicorn:An HTTP server for Rack applications,GitLab Rails 应用是托管在这个服务器上面的。

安装目录信息:

  • 主配置文件: /etc/gitlab/gitlab.rb
  • GitLab 文档根目录: /opt/gitlab
  • 默认存储库位置: /var/opt/gitlab/git-data/repositories
  • GitLab Nginx 配置文件路径: /var/opt/gitlab/nginx/conf/gitlab-http.conf
  • Postgresql 数据目录: /var/opt/gitlab/postgresql/data

安装工作完成后,登录 web 界面以及修改账户密码:

访问之前设置的域名

http://gitlab.example.com/

初次登录强制要求修改 root 用户的密码,修改后并登录。

1.png

登录成功后的主界面:

2.png

SSL 配置

GitLab 默认是使用 HTTP 的,可以手动配置为 HTTPS.

  • 上传 SSL 证书

创建 ssl 目录,用于存放 SSL 证书

# mkdir -p /etc/gitlab/ssl
# chmod 0700 /etc/gitlab/ssl

上传证书并修改证书权限

# chmod 600 /etc/gitlab/ssl/*
  • 修改 GitLab 的配置文件

修改配置文件/etc/gitlab/gitlab.rb

external_url "https://gitlab.xxx.com"
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.xxx.com.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.xxx.com.key"
  • 重启服务,使其生效
# gitlab-ctl restart

以上操作后,GitLab 自带的 Nginx 服务的配置文件 /var/opt/gitlab/nginx/conf/gitlab-http.conf 会被重新修改:

server {
 listen *:80;
 server_name gitlab.xxx.com;
 server_tokens off; ## Don't show the nginx version number, a security best practice
 return 301 https://gitlab.xxx.com:443$request_uri;
 access_log /var/log/gitlab/nginx/gitlab_access.log gitlab_access;
 error_log   /var/log/gitlab/nginx/gitlab_error.log;
}

不用额外再配置,HTTP 会自动跳转到 HTTPS 。记得要对外放行443端口。

3.png

常用命令

服务管理

# 启动所有 gitlab 组件:
gitlab-ctl start
# 停止所有 gitlab 组件:
gitlab-ctl stop
# 停止所有 gitlab postgresql 组件:
gitlab-ctl stop postgresql
# 停止相关数据连接服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
# 重启所有 gitlab 组件:
gitlab-ctl restart
# 重启所有 gitlab gitlab-workhorse 组件:
gitlab-ctl restart gitlab-workhorse
# 查看服务状态
gitlab-ctl status
# 生成配置并启动服务
gitlab-ctl reconfigure


运维管理

# 查看版本
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
# 检查 gitlab
gitlab-rake gitlab:check SANITIZE=true --trace
# 实时查看日志
gitlab-ctl tail
# 数据库关系升级
gitlab-rake db:migrate
# 清理 redis 缓存
gitlab-rake cache:clear
# 升级 GitLab-ce 版本
yum update gitlab-ce
# 升级 PostgreSQL 最新版本
gitlab-ctl pg-upgrade


日志排查

# 实时查看所有日志
gitlab-ctl tail
# 实时检查 redis 的日志
gitlab-ctl tail redis
# 实时检查 postgresql 的日志
gitlab-ctl tail postgresql
# 检查 gitlab-workhorse 的日志
gitlab-ctl tail gitlab-workhorse
# 检查 logrotate 的日志
gitlab-ctl tail logrotate
# 检查 nginx 的日志
gitlab-ctl tail nginx
# 检查 sidekiq 的日志
gitlab-ctl tail sidekiq
# 检查 unicorn 的日志
gitlab-ctl tail unicorn


常见报错

1.postfix 启动出现 fatal: parameter inet ··· 错误

[root@iZbp1h5pmg6spg0eodt4laZ ~]# sudo systemctl start postfix
Job for postfix.service failed because the control process exited with error code. See "systemctl status postfix.service" and "journalctl -xe" for details.
[root@iZbp1h5pmg6spg0eodt4laZ ~]# systemctl status postfix.service
● postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since 六 2018-09-15 14:48:32 CST; 23s ago
  Process: 1856 ExecStart=/usr/sbin/postfix start (code=exited, status=1/FAILURE)
  Process: 1854 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
  Process: 1851 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=75)

解决方案:

1. 查看 centos 的 postfix 日志
[root@iZbp1h5pmg6spg0eodt4laZ sbin]# more  /var/log/maillog
Sep 15 14:44:24 localhost postfix/sendmail[961]: fatal: parameter inet_interface
s: no local interface found for ::1
Sep 15 14:44:24 localhost postfix[967]: fatal: parameter inet_interfaces: no loc
al interface found for ::1
Sep 15 14:48:31 localhost postfix/sendmail[1853]: fatal: parameter inet_interfac
es: no local interface found for ::1
Sep 15 14:48:31 localhost postfix[1856]: fatal: parameter inet_interfaces: no lo
cal interface found for ::1
Sep 15 14:49:38 localhost postfix/sendmail[1883]: fatal: parameter inet_interfac
es: no local interface found for ::1
Sep 15 14:49:38 localhost postfix[1887]: fatal: parameter inet_interfaces: no lo
cal interface found for ::1
2. vim /etc/postfix/main.cf
修改
inet_interfaces = localhost
inet_protocols = all
inet_interfaces = all
inet_protocols = all
即可。


2. /var/spool/postfix 目录无权限问题

[root@linux115 spool]# service postfix start
启动 postfix: [失败]
[root@linux115 log]# postfix start
postsuper: fatal: scan_dir_push: open directory defer: Permission denied
postfix/postfix-script: fatal: Postfix integrity check failed!
[root@linux115 log]# postfix check
postsuper: fatal: scan_dir_push: open directory defer: Permission denied
1.查看日志文件
more /var/log/maillog
有如下两行:
May 26 09:01:51 linux115 postfix/postsuper[6199]: fatal: scan_dir_push: open directory defer: Permission denied
May 26 09:01:52 linux115 postfix/postfix-script[6200]: fatal: Postfix integrity check failed!
问题原因:
那是/var/spool/postfix 这个目录拥有都权限的问题,原来默认的拥有都是 root,需要将拥有者改为 postfix,如(1)
解决命令:
(1)
[root@linux115 spool]# chown -R postfix:postfix /var/spool/postfix/
[root@linux115 spool]# service postfix start
启动 postfix: [确定]

备份与恢复

GitLab 作为公司项目代码的版本管理系统,数据非常重要,所以应做好备份工作。

  • 修改备份目录

GitLab 备份的默认目录是/var/opt/gitlab/backups ,如果想改备份目录,可修改/etc/gitlab/gitlab.rb

gitlab_rails['backup_path'] = '/data/backups'

修改配置后,记得:

gitlab-ctl reconfigure


  • 备份命令
gitlab-rake gitlab:backup:create


该命令会在备份目录(默认:/var/opt/gitlab/backups/)下创建一个 tar 压缩包 xxxxxxxx_gitlab_backup.tar,其中开头的 xxxxxx 是备份创建的时间戳,这个压缩包包括 GitLab 整个的完整部分。

  • 自动备份

通过任务计划 crontab 实现自动备份

# 每天2点备份 gitlab 数据
0 2 * * * /usr/bin/gitlab-rake gitlab:backup:create


  • 备份保留7天

可设置只保留最近7天的备份,编辑配置文件/etc/gitlab/gitlab.rb

# 数值单位:秒
gitlab_rails['backup_keep_time'] = 604800

重新加载 gitlab 配置文件

gitlab-ctl reconfigure


  • 恢复

备份文件:

/var/opt/gitlab/backups/1499244722_2017_07_05_9.2.6_gitlab_backup.tar


停止 unicorn 和 sidekiq ,保证数据库没有新的连接,不会有写数据情况。

# 停止相关数据连接服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
# 指定恢复文件,会自动去备份目录找。确保备份目录中有这个文件。
# 指定文件名的格式类似:1499242399_2017_07_05_9.2.6,程序会自动在文件名后补上:“_gitlab_backup.tar”
# 一定按这样的格式指定,否则会出现 The backup file does not exist! 的错误
gitlab-rake gitlab:backup:restore BACKUP=1499242399_2017_07_05_9.2.6
# 启动 Gitlab
gitlab-ctl start


扩展:自动备份到阿里云 OSS

Gitlab 还支持自动备份文件到阿里云 OSS,具体配置如下:

  • 修改配置文件 /etc/gitlab/gitlab.rb
gitlab_rails['backup_upload_connection']={
'provider'=>'aliyun',
'aliyun_accesskey_id'=>'xxxxx', # 阿里云 ak
'aliyun_accesskey_secret'=>'xxxxxxxxxxxxxxxx', # 阿里云 aks
'aliyun_oss_endpoint'=>'oss-cn-shenzhen-internal.aliyuncs.com', # 阿里云 oss 连接地址
'aliyun_oss_bucket'=>'xy-gitlab', # oss 的 bucket 地址
'aliyun_oss_location'=>'cn-shenzhen', # oss 地域
}
gitlab_rails['backup_upload_remote_directory']='gitlab' # 远端备份路径,即为 bucket 的子目录


  • 重启 gitlab,使配置生效
gitlab-ctl reconfigure
gitlab-ctl restart

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
6889 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4458 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
7744 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
9415 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
5447 0
阿里云服务器远程登录用户名和密码的查询方法
阿里云服务器远程连接登录用户名和密码在哪查看?阿里云服务器默认密码是什么?云服务器系统不同默认用户名不同
435 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
2133 0
6
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载