注册 登录
  • 感情有着极大的鼓舞力量,因此,它是一切道德行为的重要前提,谁要是没有强烈的志向,也就不能够热烈地把这个志向体现于事业中。 —— 凯洛夫 QQ群
  • 生活赋予我们一种巨大的和无限高贵的礼品,这就是青春:充满着力量,充满着期待志愿,充满着求知和斗争的志向,充满着希望信心和青春。 —— 奥斯特洛夫斯基
  • 很多事不是看到才相信,而是你相信才看到。
  • 自己选择的路,就算是跪着也要走完。
  • 成功在优点的发挥,失败是缺点的累积。

GitLab部署、管理

Git linghu 337次浏览 0个评论

GitLab搭建配置管理

搭建:

一、系统环境

· 服务器:阿里云主机

· 操作系统:Centos7.2 64位

二、安装版本

· GitLab分为社区版(GitLab Community Edition)和企业版(GitLab Enterprise Edition)。社区版免费,企业版收费,但是功能比社区版多。根据目前的需求,选择安装社区版(GitLab-CE)。

· 版本号:8.5.4

三、安装方式

以前试过源码安装,过程痛苦无比。此次选择官方提供的GitLab-CE Omnibus安装包。GitLab官网上有详细的安装说明,根据自己的操作系统选择相应的版本,按步骤操作即可。
https://about.gitlab.com/downloads

#https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-8.5.7-ce.0.el6.x86_64.rpm

四、安装过程

由于国内阿里云主机无法连接国外的GitLab Yum源,所以只能从GitLab中文社区直接下载rpm包进行安装。

curl -LJO https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-8.5.4-ce.0.el7.x86_64.rpm

rpm -i gitlab-ce-8.5.4-ce.0.el7.x86_64.rpm

GitLab中文社区:http://www.gitlab.cc

修改下配置文件

vim /etc/gitlab/gitlab.rb   #修改配置文件,改成gitlab服务器IP

修改结果如下:

[root@linux-node1 ~]# grep -n “^[a-Z]” /etc/gitlab/gitlab.rb

11:external_url ‘http://192.168.56.11’

[root@linux-node1 ~]# gitlab-ctl reconfigure  #配置并启动gitlab

/etc/gitlab/gitlab.rb 还有其他很多配置,(比如数据库,支持 MySQL 和 PostgreSQL ,默认是PostgreSQL)可自行参考文档设置。(在此均不设置)

打开浏览器输入http://192.168.56.11  #这里假设192.168.56.11是gitlab服务器ip

第一次登录要求设置root密码

登录成功之后,是这样的

gitlab@nicaifu.com / 18ev6jnbgSNT2wbc

汉化:

[root@linux-node1 ~]# rz

[root@linux-node1 ~]# ls

gitlabhq.tar.gz

[root@linux-node1 ~]# tar xf gitlabhq.tar.gz

[root@linux-node1 ~]# ls

gitlabhq  gitlabhq.tar.gz

###关于这个也可以直接git clone   git clone https://github.com/larryli/gitlabhq.git

[root@linux-node1 ~]# cp -r /opt/gitlab/embedded/service/gitlab-rails{,.ori}

[root@linux-node1 ~]# gitlab-ctl stop

ok: down: gitlab-workhorse: 1s, normally up

ok: down: logrotate: 0s, normally up

ok: down: nginx: 0s, normally up

ok: down: postgresql: 1s, normally up

ok: down: redis: 0s, normally up

ok: down: sidekiq: 0s, normally up

ok: down: unicorn: 0s, normally up

[root@linux-node1 ~]# \cp -rf /root/gitlabhq/* /opt/gitlab/embedded/service/gitlab-rails/

cp: cannot overwrite non-directory ‘/opt/gitlab/embedded/service/gitlab-rails/log’ with directory ‘/root/gitlabhq/log’

cp: cannot overwrite non-directory ‘/opt/gitlab/embedded/service/gitlab-rails/tmp’ with directory ‘/root/gitlabhq/tmp’

#这里的错误,忽略,因为之前已经设置gitlab的root密码了

[root@linux-node1 ~]# gitlab-ctl start

ok: run: gitlab-workhorse: (pid 25910) 0s

ok: run: logrotate: (pid 25914) 0s

ok: run: nginx: (pid 25920) 1s

ok: run: postgresql: (pid 25925) 0s

ok: run: redis: (pid 25933) 1s

ok: run: sidekiq: (pid 25937) 0s

ok: run: unicorn: (pid 25941) 0s

汉化完成之后的效果

五、GitLab服务构成

GitLab由以下服务构成:

· nginx:静态Web服务器

· gitlab-shell:用于处理Git命令和修改authorized keys列表

· gitlab-workhorse:轻量级的反向代理服务器

· logrotate:日志文件管理工具

· postgresql:数据库

· redis:缓存数据库

· sidekiq:用于在后台执行队列任务(异步执行)

· unicorn:An HTTP server for Rack applications,GitLab Rails应用是托管在这个服务器上面的。

 

 

 

gitlab架构图,来自GitLab搭建与维护

 

 

 

前端:Nginx,用于页面及Git tool走http或https协议
后端:Gitlab服务,采用Ruby on Rails框架,通过unicorn实现后台服务及多进程
SSHD:开启sshd服务,用于用户上传ssh key进行版本克隆及上传。注:用户上传的ssh key是保存到git账户中
数据库:目前仅支持MySQL和PostgreSQL
Redis:用于存储用户session和任务,任务包括新建仓库、发送邮件等等
Sidekiq:Rails框架自带的,订阅redis中的任务并执行

重点讲一下gitlab-shell和gitlab-workhorse。

Gitlab Shell

GitLab Shell有两个作用:为GitLab处理Git命令、修改authorized keys列表。

当通过SSH访问GitLab Server时,GitLab Shell会:

1. 限制执行预定义好的Git命令(git push, git pull, git annex)

2. 调用GitLab Rails API 检查权限

3. 执行pre-receive钩子(在GitLab企业版中叫做Git钩子)

4. 执行你请求的动作

5. 处理GitLab的post-receive动作

6. 处理自定义的post-receive动作

当通过http(s)访问GitLab Server时,工作流程取决于你是从Git仓库拉取(pull)代码还是向git仓库推送(push)代码。如果你是从Git仓库拉取(pull)代码,GitLab Rails应用会全权负责处理用户鉴权和执行Git命令的工作;如果你是向Git仓库推送(push)代码,GitLab Rails应用既不会进行用户鉴权也不会执行Git命令,它会把以下工作交由GitLab Shell进行处理:

1. 调用GitLab Rails API 检查权限

2. 执行pre-receive钩子(在GitLab企业版中叫做Git钩子)

3. 执行你请求的动作

4. 处理GitLab的post-receive动作

5. 处理自定义的post-receive动作

也许你会奇怪在通过http(s)推送(push)代码的情况下,GitLab Rails应用为什么不在GitLab Shell之前进行鉴权。这是因为GitLab Rails应用没有解析git push命令的逻辑。好的方法是将这些解析代码放在一个地方,这个地方就是GitLab Shell,这样我们就可以在通过SSH进行访问时重用这段代码。实际上,GitLabShell在执行git push命令时根本不会进行权限检查,它是依赖于pre-receive钩子进行权限检查的。而当你执行git pull命令时,权限检查是在命令执行之前的。对git pull命令的权限检查要简单得多,因为你只需要检查一个用户是否可以访问这个仓库就可以了(不需要检查分支权限)。

好吧,GitLab Shell这段话都是翻译官网的。链接在这里
https://gitlab.com/gitlab-org/gitlab-shell/blob/master/README.md

最后一段话有点拗口,我对此还是有一点问题的:既然你把git push的逻辑都放在GitLab Shell里面了,为什么不把git pull的逻辑也都放在里面提供重用呢?
猜想:git pull这段逻辑无法重用,因为通过http(s)方式访问时,要读取仓库的数据并且把这些数据封装成http包返回给客户端;而通过ssh方式访问时,仓库代码数据是通过ssh数据包返回的。两种访问方式返回数据的封装方式不一样,所以也没有必要提供重用。但是我觉得读取仓库数据这段逻辑应该还是重用了的。

 

GitLab Workhorse

GitLab Workhorse是一个敏捷的反向代理。它会处理一些大的HTTP请求,比如文件上传、文件下载、Git push/pull和Git包下载。其它请求会反向代理到GitLab Rails应用,即反向代理给后端的unicorn。官网对GitLab Workhorse的介绍在这里:https://gitlab.com/gitlab-org/gitlab-workhorse/

 

六、GitLab工作流程

 

 

 

 

七、配置

配置考量

· 要求能通过子域名git.zn2studio.com访问GitLab站点并且站点内的仓库地址也要用子域名显示。

· 要求使用腾讯企业邮箱的SMTP服务器发送邮件。

· 要求使用HTTP请求方式。

· 要求能使用SSH连接方式。

· 要求避免与已装软件的端口冲突

· 要求使用系统已安装的Nginx服务器

配置过程

· 修改GitLab配置文件,停用GitLab内置Nginx
nginx[‘enable’] = false

· 使用系统已经安装的Nginx给gitlab-workhorse作反向代理

· 因为unicorn的默认端口是8080,与系统已存在的Apache端口冲突,修改Apache端口为8000(也可以修改unicorn的端口)

· 修改GitLab配置文件中的external_url
external_url ‘http://git.zn2studio.com’
修改这个配置会影响GitLab里面显示的仓库链接

· 修改GitLab邮件服务配置,使用腾讯企业邮箱的SMTP服务器

gitlab_rails[‘smtp_enable’] = true

gitlab_rails[‘smtp_address’] = “smtp.exmail.qq.com”

gitlab_rails[‘smtp_port’] = 25

gitlab_rails[‘smtp_user_name’] = “xxx”

gitlab_rails[‘smtp_password’] = “xxx”

gitlab_rails[‘smtp_domain’] = “smtp.qq.com”

gitlab_rails[‘smtp_authentication’] = ‘plain’

gitlab_rails[‘smtp_enable_starttls_auto’] = true

·

八、关于GitLab-CI

GitLab-CE 8.0以上的版本已经将GitLab-CI集成进了GitLab里面,并且是默认开启的。所以不需要像以前一样再单独安装GitLab-CI并且为GitLab-CI开启单独的Server。如下图所示:

 

 

管理:

如果想要使用自定义的 nginx 如何配置

a. 禁用gitlab 启动时去启动nginx ,

配置 /etc/gitlab/gitlab.rb 里的 nginx[‘enable’] = false 即可

第一次启动时这里不可以关闭,因为关闭了将不再生成对应的nginx权限组,先启动一次,测试一下是否正常,如果正常了,再关闭

这里没有nginx了:

b. 启用自己的nginx 配置:

git.updateweb.cn.conf 的内容如下:

# GITLAB

# Maintainer: @randx

# CHUNKED TRANSFER

# It is a known issue that Git-over-HTTP requires chunked transfer encoding [0] which is not

# supported by Nginx < 1.3.9 [1]. As a result, pushing a large object with Git (i.e. a single large file)

# can lead to a 411 error. In theory you can get around this by tweaking this configuration file and either

# – installing an old version of Nginx with the chunkin module [2] compiled in, or

# – using a newer version of Nginx.

#

# At the time of writing we do not know if either of these theoretical solutions works. As a workaround

# users can use Git over SSH to push large files.

#

# [0] https://git.kernel.org/cgit/git/git.git/tree/Documentation/technical/http-protocol.txt#n99

# [1] https://github.com/agentzh/chunkin-nginx-module#status

# [2] https://github.com/agentzh/chunkin-nginx-module

server {

  listen 80;

  server_name git.updateweb.cn;

  rewrite ^(.*) https://$server_name$1 permanent;

}

upstream gitlab-workhorse {

  server unix:/var/opt/gitlab/gitlab-workhorse/socket;

}

server {

#  listen *:80;         # e.g., listen 192.168.1.1:80; In most cases *:80 is a good idea

  listen 443;

  ssl                  on;

  ssl_certificate      /etc/nginx/ssl_key/gitlab.crt;

  ssl_certificate_key  /etc/nginx/ssl_key/gitlab.key;

  ssl_session_timeout 10m;

  ssl_protocols SSLv2 SSLv3 TLSv1;

  ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

  ssl_prefer_server_ciphers on;

  server_name git.updateweb.cn;     # e.g., server_name source.example.com;

  server_tokens off;     # don’t show the version number, a security best practice

  root /opt/gitlab/embedded/service/gitlab-rails/public;

  # Increase this if you want to upload large attachments

  # Or if you want to accept large git objects over http

  #client_max_body_size 128M;

  client_max_body_size 0;

  # individual nginx logs for this gitlab vhost

  access_log  /srv/logs/nginx/gitlab_access.log;

  error_log   /srv/logs/nginx/gitlab_error.log;

  location / {

    proxy_read_timeout      300;

    proxy_connect_timeout   300;

    proxy_redirect          off;

    proxy_http_version 1.1;

    proxy_set_header Host $http_host;

    proxy_set_header X-Real-IP $remote_addr;

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_set_header X-Forwarded-Proto http;

    proxy_pass http://gitlab-workhorse;

  }

  location ~ ^/(assets)/  {

    root /opt/gitlab/embedded/service/gitlab-rails/public;

    gzip_static on; # to serve pre-gzipped version

    expires max;

    add_header Cache-Control public;

  }

  error_page 404 /404.html;

  error_page 422 /422.html;

  error_page 500 /500.html;

  error_page 502 /502.html;

  location ~ ^/(404|422|500|502)\.html$ {

    root /opt/gitlab/embedded/service/gitlab-rails/public;

    internal;

  }

}

c. 启用自己的nginx后,发现git进行push 报权限错误,

 

网站也会报错:

 

解决方法是加一上权限即可:

usermod -a -G gitlab-www www

 

 

这样就可以解决以上权限问题了,注意,如果你gitlab-ctl recongure 了,会将权限组给删除掉,需要重新加一下权限

————————————————

gitolite数据向 gitlab 迁移

老gitlab数据向新gitlab迁移也类似

早期gitlab使用gitolite为用户提供SSH服务,新版gitlab有了更好的解决方案gitlab-shell。安装新版本是必会涉及gitolite 向 gitlab 迁移,下面是我总结的一些迁移经验。

第一步,将gitolite复制到gitlab仓库目录下

# cp -r /gitroot/gitolite/repositories/* /var/opt/gitlab/git-data/repositories/

执行导入处理程序

进入web界面把用户创建项目的个数设置大些。

chown  git.git  /var/opt/gitlab/git-data/repositories/ -R

# gitlab-rake gitlab:import:repos

 

 

进入gitlab web界面,创建仓库与导入的仓库同名,这样就完成了导入工作。

此方法,只能导入git 库, 不会导入用户,用户需要自己再新建一下

————————————————

 

一、配置SMTP,使GitLab通过163邮箱给用户发送邮件

1. vim  /etc/gitlab/gitlab.rb  


具体配置信息:

1. gitlab_rails[‘smtp_enable’] = true  

2. gitlab_rails[‘smtp_address’] = “smtp.163.com”  

3. gitlab_rails[‘smtp_port’] = 25  

4. gitlab_rails[‘smtp_user_name’] = “xxuser@163.com”  

5. gitlab_rails[‘smtp_password’] = “xxpassword”  

6. gitlab_rails[‘smtp_domain’] = “163.com”  

7. gitlab_rails[‘smtp_authentication’] = :login  

8. gitlab_rails[‘smtp_enable_starttls_auto’] = true  

9. gitlab_rails[‘gitlab_email_from’] = “xxuser@163.com”  

10. user[“git_user_email”] = “xxuser@163.com”  

 

二、重启配置:

1. sudo gitlab-ctl reconfigure  

三、实时查看所有执行日志

1. gitlab-ctl tail  

四、可能遇到的问题:

1、Connection refused – connect(2) for \”smtp.163.com\” port 456

端口一开始填写为:456,这是不对的。163邮箱的端口是25.

2、User has no permission

登陆163邮箱,开启SMTP服务。

3、535 Error: authentication failed

用户名或密码不正确,注意这里的

1. gitlab_rails[‘smtp_password’] = “xxpassword”  

是163邮箱的“客户端授权密码 ”

4、553 Mail from must equal authorized user

网易服务器smtp机器要求身份验证帐号和发信帐号必须一致

1. ##修改gitlab配置  

2. gitlab_rails[‘gitlab_email_from’] = “xxuser@163.com”  

3. user[“git_user_email”] = “xxuser@163.com”  

————————————————

配置GitLab的默认发信邮箱

1、GitLab中使用 postfix 进行邮件发送。因此,可以卸载系统中自带的 sendmail 。
使用 yum list installed 查看系统中是否存在 sendmail ,若存在,则使用 yum remove sendmail 指令进行卸载。

2、测试系统是否可以正常发送邮件。

bashecho “Test mail from postfix” | mail -s “Test Postfix” xxx@xxx.com

注:上面的xxx@xxx.com为你希望收到邮件的邮箱地址。

3、当邮箱收到系统发送来的邮件时,将系统的地址复制下来,如: root@iZ23syflhhzZ.localdomain ,打开 /etc/gitlab/gitlab.rb ,将

    # gitlab_rails[‘gitlab_email_from’] = ‘gitlab@example.com’

修改为

gitlab_rails[‘gitlab_email_from’] = ‘root@iZ23syflhhzZ.localdomain’

保存后,执行 sudo gitlab-ctl reconfigure 重新编译GitLab。如果邮箱的过滤功能较强,请添加系统的发件地址到邮箱的白名单中,防止邮件被过滤。

Note:系统中邮件发送的日志可通过`tail /var/log/maillog`命令进行查看。

————————————————

GitLab头像无法正常显示

原因:gravatar被墙

解决办法:

编辑 /etc/gitlab/gitlab.rb ,将

#gitlab_rails[‘gravatar_plain_url‘] = ‘http://gravatar.duoshuo.com/avatar/%{hash}?s=%{size}&d=identicon’

修改为:

gitlab_rails[‘gravatar_plain_url‘] = ‘http://gravatar.duoshuo.com/avatar/%{hash}?s=%{size}&d=identicon’

然后在命令行执行:

bashsudo gitlab-ctl reconfigure

sudo gitlab-rake cache:clear RAILS_ENV=production或/opt/gitlab/bin/gitlab-rake cache:clear

GitLab使用的FAQ

1. git代码发布支持2种方法:ssh和http(s)

· ssh:必须添加ssh key才能发布

· http:使用用户名、密码,若接入了LDAP,就是LDAP中的账户密码

· https:暂未测试过

2. 限制git上传的单个文件大小

· 若gitlab是通过sameersbn/gitlab:7.4.3镜像创建的,那么可以通过环境变量NGINX_MAX_UPLOAD_SIZE进行限制

3. 通过API进行一些操作例如创建Project,得到成功的响应,但却没有立即生效,过了几秒才生效

· 由于GitLab为异步架构,Ruby on Rails收到创建Project请求后将该任务推送到Redis中,但是没有等待执行完毕,而是直接返回成功。后台Sidekiq从Redis订阅任务并实时执行,但由于执行需要时间,而API返回很快,因此会造成这种情况发生。目前没有其他解决办法,只能在自己程序逻辑里sleep几秒进行重试

4. 页面上”Profile settings->SSH Keys”与”Project Settings里Deploy Keys”的区别

· Profile settings->SSH Keys:是用户全局的Key,具有对该用户所有项目仓库进行上传下载(push、clone)的权限

· Project Settings里Deploy Keys:针对某个项目,具有下载(clone)的权限,而不具备上传(push)的权限

5. gitlab默认时区是UTC

· sameersbn/gitlab:7.4.3镜像无法对时区进行修改,若是手动安装的gitlab,可以通过修改一个.rb文件来生效,具体没有测试过,有需要的可以自行百度搜下。

时区是UTC主要影响的是数据库里关于时间字段的值(created_at、updated_at等),对用户git仓库是不影响的,因为git仓库的创建、代码更新都是用户通过git工具自行操作,因此是用户自己的时区。

Gitlab备份:

计划任务备份:

我们在/home/backup目录下创建auto_backup.sh文件,同时赋予执行权限,操作如下:

sudo chmod +x auto_backup.shs

udo vim auto_backup.sh

进入编辑界面,添加如下代码:

gitlab-rake gitlab:backup:create

然后保存退出。我们可以执行一遍该脚本,可以发现在bakcup目录下又创建了一个备份。
修改crontab文件,添加一行:

0 20 * * * root /home/backup/auto_backup.sh -D 1

备份到本地U盘:

#!/bin/bash

BACKUP_PATH1=”/home/backup/” 

BACKUP_PATH2=”/media/usb/” 

DAY=2 

gitlab-rake gitlab:backup:create;

find $BACKUP_PATH1 -name “*.tar” -ctime +$DAY -type f -exec rm -rf {} \;

if mount -t vfat /dev/sdb1 /media/usb;then 

if cp *.tar /media/usb;then 

find “/home/backup/” -name “*.tar” -ctime +1 -type f -exec rm -rf {} \;

umount /media/usb;

fi else 

echo “mount failed”;

Fi

 

恢复数据:

恢复gitlab数据

恢复数据使用以下命令:

# 停止相关数据连接服务

gitlab-ctl stop unicorn

gitlab-ctl stop sidekiq

# 从1393513186编号备份中恢复

gitlab-rake gitlab:backup:restore BACKUP=1466811825

# 启动

Gitlab sudo gitlab-ctl start

———————————————

将GitLab的数据库导入阿里云PostgreSQL RDS

GitLab的数据库用的是PostgreSQL,之前由于阿里云RDS不支持PostgreSQL,只能将GitLab的数据库部署在云服务器上。

6月1日得知阿里云推出了PostgreSQL RDS,于是立马将GitLab的数据库迁移至PostgreSQL RDS。

下面分享一下迁移的主要操作步骤:

1)在GitLab服务器上备份GitLab数据库

操作命令:

sudo gitlab-rake gitlab:backup:create SKIP=db

注:这个命令原本是只备份数据库,但实际运行时也会备份repositories,可以在完成数据库备份时,ctrl+C直接退出。

数据库备份成功后,会在 /var/opt/gitlab/backups/db 文件夹中看到 database.sql 文件,导入时只需将这个文件导入到阿里云RDS。 

2)在阿里云RDS中创建GitLab的数据库帐户与数据库

在阿里云RDS控制台首页点击“登录数据库”,进入idb.rds.aliyun.com,选择对应的PostgreSQL实例。

a)创建2个帐户:gitlab, gitlab-psql

b)创建gitlabhq_production数据库,所有者为gitlab。 

3) 在GitLab服务器上进行导入操作

a)  cd /var/opt/gitlab/backups/db 

b) psql -h [RDS实例网址] p 3433 -d gitlabhq_production -U gitlab -f database.sql 

导入成功时的控制台输出:

CREATE INDEX

psql:database.sql:5084: WARNING:  no privileges could be revoked for “public”

REVOKE

psql:database.sql:5085: WARNING:  no privileges could be revoked for “public”

REVOKE

psql:database.sql:5086: WARNING:  no privileges were granted for “public”

GRANT

psql:database.sql:5087: WARNING:  no privileges were granted for “public”

GRANT

4)修改GitLab的配置

a)打开配置文件

vi /etc/gitlab/gitlab.rb

b)修改如下设置

设置PostgreSQL RDS数据库连接

gitlab_rails[‘db_username’] = “gitlab”

gitlab_rails[‘db_password’] = 帐户密码

gitlab_rails[‘db_host’] = RDS实例网址

gitlab_rails[‘db_port’] = 3433

禁用本地PostgreSQL 

postgresql[‘enable’] = false

启用新设置

gitlab-ctl reconfigure

安装中文语言包(汉化)

1、下载汉化包,例如:

mkdir /home/local/gitlab
cd /home/local/gitlab
git clone https://gitlab.com/larryli/gitlab.git
#国内使用 https://git.coding.net/larryli/gitlab.git

2. 停止 gitlab 并执行汉化

gitlab-ctl stop
cp  /home/local/gitlab//opt/gitlab/embedded/service/gitlab-rails/  -rf

vi ~/.bashrc注释改行内容:alias cp=’cp -i’
如果执行 cp 命令时提示覆盖,则参考如下解决:

source ~/.bashrc退出重新登录后再执行 cp 命令

或者:

以下汉化步骤参考此篇文章,首先确认当前安装版本

cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

当前安装版本是8.5.7,因此中文补丁需要打8.5版本。

克隆 GitLab 源码仓库:

# 克隆 GitLab.com 仓库

git clone https://gitlab.com/larryli/gitlab.git

#或 Gitcafe.com 镜像,速度更快

git clone https://gitcafe.com/larryli/gitlab.git

运行汉化补丁:

# 8.5 版本的汉化补丁(8-5-stable是英文稳定版,8-5-zh是中文版,两个 diff 结果便是汉化补丁)

sudo git diff origin/8-5-stable..8-5-zh > /tmp/8.5.diff

# 停止 gitlab

sudo gitlab-ctl stop

# 应用汉化补丁

cd /opt/gitlab/embedded/service/gitlab-rails

git apply /tmp/8.5.diff  

# 启动gitlab

sudo gitlab-ctl start

至此,汉化完毕。

 

备份配置文件

配置文件含密码等敏感信息,不要和数据备份文件放在一起。

sh -c ‘umask 0077; tar -cf $(date “+etc-gitlab-%s.tar”) -C /etc/gitlab’

 

备份数据文件

默认数据备份目录是/var/opt/gitlab/backups,手动创建备份文件:

# Omnibus 方式安装使用以下命令备份

sudo gitlab-rake gitlab:backup:create

日常备份,添加 crontab,运行crontab -e

 

# 每天2点执行备份

0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

如要修改备份周期和目录,在/etc/gitlab/gitlab.rb中修改以下两个选项

 

# 设置备份周期为7天 – 604800秒

gitlab_rails[‘backup_keep_time’] = 604800

# 备份目录

gitlab_rails[‘backup_path’] = ‘/mnt/backups’

 

恢复

恢复之前,确保备份文件所安装 GitLab 和当前要恢复的 GitLab 版本一致。首先,恢复配置文件:

sudo mv /etc/gitlab /etc/gitlab.$(date +%s)

# 将下面配置备份文件的时间戳改为你所备份的文件的时间戳

sudo tar -xf etc-gitlab-1399948539.tar -C /

 

恢复数据文件

# 将数据备份文件拷贝至备份目录

sudo cp 1393513186_gitlab_backup.tar /var/opt/gitlab/backups/

 

# 停止连接数据库的进程

sudo gitlab-ctl stop unicorn

sudo gitlab-ctl stop sidekiq

 

# 恢复1393513186这个备份文件,将覆盖GitLab数据库!

sudo gitlab-rake gitlab:backup:restore BACKUP=1393513186

 

# 启动 GitLab

sudo gitlab-ctl start

 

# 检查 GitLab

sudo gitlab-rake gitlab:check SANITIZE=true

持续集成(GitLab-CI)

GitLab 从 8.0 之后就集成了GitLab-CI,所以不需要再另外安装 CI。但需要安装Runner

1.添加 Runner 安装源

# For Debian/Ubuntu

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash

 

# For CentOS

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash

安装gitlab-ci-multi-runner

 

# For Debian/Ubuntu

apt-get install gitlab-ci-multi-runner

 

# For CentOS

yum install gitlab-ci-multi-runner

2.注册 Runner。获取Token:以管理员身份登录GitLab,进入管理区域,点击侧边栏的Runner,如下图,“注册授权码”后的字符串便是Token。

sudo gitlab-ci-multi-runner register

Running in system-mode.

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci):

http://git.home.com/ci

Please enter the gitlab-ci token for this runner:

xxxx             # 输入Token

Please enter the gitlab-ci description for this runner:

[xxy-web-test-02]: test-runner  # 输入runner的名称

Please enter the gitlab-ci tags for this runner (comma separated):

test,php         # 输入runner的标签,以区分不同的runner,标签间逗号分隔

Registering runner… succeeded                     runner=YDPz2or3

Please enter the executor: ssh, shell, parallels, docker, docker-ssh, virtualbox:

shell

Runner registered successfully. Feel free to start it, but if it’s running already the config should be automatically reloaded!

注册完成便可在上图中查看你所注册的Runner。至此,所有安装完毕,Runner的构建,后续补充。

 

#gitlab修改密码
gitlab-rails console production
Loading production environment (Rails 4.2.5.2)
irb(main):001:0> user = User.where(id: 1).first
=> #<User id: 1, email: “admin@example.com”, …
irb(main):002:0> user.password=12345678
=> 12345678
irb(main):003:0> user.password_confirmation=12345678
=> 12345678
irb(main):004:0> user.save!
=> true
irb(main):005:0> quit

#修改ruby源
gem sources –add https://gems.ruby-china.org/ –remove https://rubygems.org/

 

 

 

 




乐趣公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明GitLab部署、管理
喜欢 (3)
支付宝[]
分享 (0)