呜呜....点我干嘛!

哈哈恰恰、好玩吧!

info info
回 忆

回忆就是你手心里的水,不管你握紧还是敞开,都会随着时间一点一点的从指尖流逝,在刻骨铭心的回忆也会随着时间漫漫淡忘。

GitLab部署、管理

    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

     

    安装中文语言包(汉化)

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

    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/