一、GitLab简介
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务

二、GitLab系统架构
git用户的主目录通常是/home/git(~git表示主目录路径),GitLab主要以/home/git用户身份安装在用户主目录中git。在主目录中是gitlabhq服务器软件所在的位置以及存储库(尽管存储库位置是可配置的)。裸存储库位于/home/git/repositories。GitLab是一个ruby on rails应用程序,因此可以通过研究ruby on rails应用程序的工作原理来学习内部工作的细节。为了通过SSH提供存储库,有一个名为gitlab-shell的附加应用程序,它安装在/home/git/gitlab-shell。

GitLab 应用程序是下面所述的所有组件的集合:

1. repository:代码库,可以是硬盘或 NFS 文件系统
2. Nginx:Web 入口
3. 数据库:包含以下信息:
    - repository 中的数据(元数据,issue,合并请求 merge request 等)
    - 可以登录 Web 的用户(权限)
4. Redis:缓存,负责分发任务
5. sidekiq:后台任务,主要负责发送电子邮件。任务需要来自 Redis
6. Unicorn:Gitlab 自身的 Web 服务器,包含了 Gitlab 主进程,负责处理快速/一般任务,与 Redis 一起工作。工作内容包括:
    -  通过检查存储在 Redis 中的用户会话来检查权限
    -  为 Sidekiq 制作任务
    -  从仓库(warehouse)取东西或在那里移动东西
7. gitlab-shell:用于 SSH 交互,而不是 HTTP。gitlab-shell 通过 Redis 与 Sidekiq 进行通信,并直接或通过 TCP 间接访问 Unicorn
8. gitaly:后台服务,专门负责访问磁盘以高效处理 git 操作,并缓存耗时操作。所有的 git 操作都通过 Gitaly 处理
9. gitlab-workhorse:反向代理服务器,可以处理与 Rails 无关的请求(磁盘上的CSS、JS 文件等),处理Git Push/Pull 请求,处理到Rails的连接(修改由Rails发送的响应或发送给 Rails 的请求,管理 Rails 的长期 WebSocket 连接等)。
10. mail_room:处理邮件请求。回复 GitLab 发出的邮件时,GitLab 会调用此服务

Sidekiq. Unicorn 和 GitLab-shell 是GitLab中处理任务的 3 个程序。

三、Gitlab安装、配置、启动管理
1、安装Gitlab必要的依赖项,还将在系统防火墙中打开HTTP和SSH访问
安装命令:yum install -y curl policycoreutils-python openssh-server
激活命令:systemctl enable sshd
启用命令:systemctl start sshd
防火墙命令:firewall-cmd --permanent--add-service=http && systemctl reload firewalld    //如果系统已关闭防火墙选项,忽略此步骤。

2、安装Postfix以发送通知电子邮件
安装命令:yum install postfix
激活命令:systemctl enable postfix
启用命令:systemctl start postfix

3、下载GitLab软件包(社区版),地址:https://packages.gitlab.com/gitlab/gitlab-ce

4、查看Gitlab相关目录,命令:find / -name gitlab

Gitlab目录结构
/opt/gitlab/         # 主目录
/etc/gitlab/         # 放置配置文件
/var/opt/gitlab/   # 各个组件
/var/log/gitlab/   # 放置日志文件
/var/opt/gitlab/git-data/repositories    #数据库的地址  
/var/opt/gitlab/postgresql/data          #gitlab组和项目的地址
/etc/gitlab/gitlab.rb                              #gitlab配置文件

5、初始化Gitlab命令(保存配置或重新载入配置):gitlab-ctl reconfigure

6、Gitlab服务的启停管理
启动服务: gitlab-ctl start
停止服务: gitlab-ctl stop
重启服务: gitlab-ctl restart
查看状态: gitlab-ctl status

7、Gitlab的supervisor方式启动服务
服务启动命令:   systemctl start gitlab-runsvdir.service
服务停止命令:   systemctl stop gitlab-runsvdir.service
服务重启命令:   systemctl restart gitlab-runsvdir.service
服务开机启动命令:   systemctl enable gitlab-runsvdir.service
取消开机启动命令:   systemctl disable gitlab-runsvdir.service
服务查看命令:   systemctl list-unit-files

8、Gitlab服务日志查看:/usr/bin/gitlab-ctl tail         //可以查看到gitlab所有插件的日志情况

四、Centos7下Gitlab快速安装的操作记录
1. 下面记录centos7.5系统下的Gitlab安装过程(最好找一台环境比较干净的机器):

1)配置系统防火墙,把HTTP和SSH端口开放(关闭iptables或者开放ssh).

[root@gitlab ~]# systemctl stop firewalld       //临时关闭
[root@gitlab ~]# systemctl disable firewalld //禁止开机启动
[root@gitlab ~]# yum install curl openssh-server postfix cronie
[root@gitlab ~]# systemctl start postfix.service
[root@gitlab ~]# systemctl enable postfix.service
[root@gitlab ~]# lokkit -s http -s ssh //如果iptables关闭了,这条命令就无需执行了。这条命令是用来设置防火墙的,开放http和ssh访问端口 2)下载gitlab的rpm安装包
[root@gitlab ~]# rpm -ivh gitlab-ce-12.5.0-ce.0.el6.x86_64.rpm --force //下载好安装包
-------------------------------------------------
警告:gitlab-ce-12.5.0-ce.0.el6.x86_64.rpm: 头V4 RSA/SHA1 Signature, 密钥 ID f27eab47: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:gitlab-ce-12.5.0-ce.0.el6 ########## ( 31%)
........
-------------------------------------------------
安装后的gitlab默认路径是/opt/gitlab(程序路径)、 /var/opt/gitlab(配置文件路径)。 3) 接着进行配置
[root@gitlab ~]# gitlab-ctl reconfigure 上面配置命令执行后,如没有报错,就说明gitlab配置成功。配置后会生成各应用服务配置文件,放在/opt/gitlab/etc下,日志路径为/var/log/gitlab/ 4)然后启动gitlab
[root@gitlab ~]# gitlab-ctl start
[root@gitlab ~]# gitlab-ctl status 5)最后就可以使用http://localhost顺利访问Gitlab了。整个安装过程大概10分钟搞定(rpm包下载比较费时间)

将ip访问修改为域名访问的更改方法:  

1)首先将/etc/gitlab/gitlab.rb文件中的external_url 'http://gitlab.example.com'全部替换为external_url 'http://gitlab.eason.com'
[root@code-server gitlab]# vim /etc/gitlab/gitlab.rb
----------------------------------------------
external_url 'http://gitlab.example.com'
改为:
external_url 'http://gitlab.eason.com'
---------------------------------------------- 2)其次将下面/var/opt/gitlab/gitlab-shell/config.yml 里面的内容进行调整;
----------------------------------------------
gitlab_url: "http://127.0.0.1:8080"
修改为:
gitlab_url: "http://gitlab.eason.com:8080"
----------------------------------------------
将/var/opt/gitlab/gitlab-rails/etc/gitlab.yml文件进行调整;
----------------------------------------------
修改:gitlab:
## Web server settings (note: host is the FQDN, do not include http://)
host: gitlab.eason.com
port: 80
https: false
----------------------------------------------- 注意:下面两文件都是上面两文件的软链接,修改上面两个文件即可
[root@code-server gitlab]# ll /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
lrwxrwxrwx 1 root root 43 Nov 9 18:00 /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml -> /var/opt/gitlab/gitlab-rails/etc/gitlab.yml
[root@code-server gitlab]# ll /opt/gitlab/embedded/service/gitlab-shell/config.yml
lrwxrwxrwx. 1 root root 39 Jun 11 20:04 /opt/gitlab/embedded/service/gitlab-shell/config.yml -> /var/opt/gitlab/gitlab-shell/config.yml 3)然后将下面文件中的gitlab.example.com全部替换为gitlab.eason.com
/var/opt/gitlab/nginx/conf/gitlab-http.conf 4)最后执行"gitlab-ctl reconfigure"命令使之配置生效(注意最好不要执行"gitlab-ctl restart",只执行本命令即可)

2. Gitlab安装后的几个细节的配置

1)  gitlab该版本安装后,首次登录需要设置root密码。
2)在管理员账号(root)登录后,先把"注册"功能关了,这样就只能在管理员账号下创建用户。关闭注册功能方法:
访问http://gitlab.eason.com/admin/application_settings,如下:

关闭"Sign-up enabled"功能(特别注意:Sign-in enabled登录功能不要关闭了,看清楚!)

3)设置邮件配置。

设置邮件,修改配置文件 /etc/gitlab/gitlab.rb
[root@gitlab01 ~]# vim /etc/gitlab/gitlab.rb
........
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'eason@126.com'
gitlab_rails['gitlab_email_display_name'] = 'Gitlab'
gitlab_rails['gitlab_email_reply_to'] = 'eason@126.com'
gitlab_rails['gitlab_email_subject_suffix'] = ''
gitlab_rails['gitlab_email_smime_enabled'] = false
gitlab_rails['gitlab_email_smime_key_file'] = '/etc/gitlab/ssl/gitlab_smime.key'
gitlab_rails['gitlab_email_smime_cert_file'] = '/etc/gitlab/ssl/gitlab_smime.crt'
user["git_user_email"] = "eason@126.com" ........
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.126.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "eason@126.com"
gitlab_rails['smtp_password'] = "xxxxxxxxx"
gitlab_rails['smtp_domain'] = "126.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false  

设置完成后,进行检查,可以通过创建新用户或者点击忘记密码验证邮件设置。如果不能正常发送邮件,请检查配置,使用命令,将监听日志打出来,进行问题排查。

[root@gitlab01 gitlab]# gitlab-ctl tail
==> /var/log/gitlab/gitlab-rails/sidekiq.log <==
{"severity":"INFO","time":"2019-12-03T01:40:14.736Z","message":"Upgrade to Sidekiq Pro for more features and support: http://sidekiq.org"}
{"severity":"WARN","time":"2019-12-03T01:40:14.737Z","message":"Sidekiq 6.0 will require Redis 4.0+, you are using Redis v3.2.12"}
{"severity":"INFO","time":"2019-12-03T01:40:15.168Z","message":"Starting processing, hit Ctrl-C to stop"}

3、Gitlab批量添加账号

[root@gitlab ~]# cat gitlab.sh
#!/bin/bash
#批量创建gitlab用户
userinfo="userinfo.text"
while read line
do
password=`echo $line | awk '{print $1}'`
mail=`echo $line | awk '{print $2}'`
username=`echo $line | awk '{print $3}'`
name=`echo $line | awk '{print $4}'`
curl -d "reset_password=$password&email=$mail&username=$username&name=$name&private_token=gc5T7PhqbvQFfQA1bdxG" "http://172.16.60.222/api/v4/users" done <$userinfo [root@gitlab ~]# cat userinfo.text
1 zhanjiang.feng@wang.com zhanjiang.feng zhanjiang.feng
1 hongkang.yan@wang.com hongkang.yan hongkang.yan
1 yansong.wang@wang.com yansong.wang yansong.wang
1 bo.xue@wang.com bo.xue bo.xue
1 junlong.li@wang.com junlong.li junlong.li
1 luyu.cao@wang.com luyu.cao luyu.cao
1 xueqing.wang@wang.com xueqing.wang xueqing.wang
1 xu.guo@wang.com xu.guo xu.guo
1 bing.xing@wang.com bing.xing bing.xing
1 mengmeng.li@wang.com linan linan

注意:上面userinfo.text文件里的四行分别表示密码,邮箱,用户名,别名。上面命令执行后,就可以批量创建用户了!
其中密码用1表示重置密码,也就是用户创建之后,会给用户邮箱发送两封邮件:
-> 一封确认绑定邮箱的邮件,一定要点击这个邮件里的confirm确认地址(否则登录无效);
-> 另一封是重置用户密码的邮件。重置后就可以使用邮箱或用户名登陆了。  

注意:上面脚本中的private_token(这个很重要,否则批量创建不了用户)

Gitlab 10.2版本之前private_token,使用管理员登录后,在"settings-Account"界面里找到的;如图:

Gitlab 10.2版本之后,使用Personal Access Tokens 既 profile->account->Personal Access Tokens

输入姓名,选定有效日期后勾选下面的四个选项,点击确认将生成的密码保存到private_token文件夹中。如图:

访问脚本中gitlab的用户接口地址http://172.16.60.222/api/v4/users,试试能否访问!

4、修改Gitlab登录界面  

4.1、设置主题

4.2、设置首页标题与图片

其他选项均可以进行定制设置,设计属于自己风格的首页和展示页。

-----------------------------------------------------------书山有路勤为径,学海无涯苦作舟-------------------------------------------------------------

Gitlab 快速部署及日常维护 (一)的更多相关文章

  1. Gitlab 快速部署及日常维护 (二)

    一.概述 上一篇我们将Gitlab的安装部署和初始化设置部分全部讲解完成了,接下来我们介绍Gitlab在日常工作中常遇见的问题进行梳理说明. 二.Gitlab的安装和维护过程中常见问题 1.Gitla ...

  2. 【gitlab】gitlab快速部署教程

    gitlab快速部署教程 部署环境 Ubuntu 16.04(亲测可用) 开始部署 安装依赖 sudo apt-get install curl openssh-server ca-certifica ...

  3. Oracle 11.2.0.4.0 Dataguard部署和日常维护(7) - Dataguard Flashback篇

    1. 设置备库的闪回目录 show parameter db_recovery_file; NAME TYPE VALUE ------------------------------------ - ...

  4. Oracle 11.2.0.4.0 Dataguard部署和日常维护(6)-Dataguard Snapshot篇

    1. 检查当前主备库同步状态 on primary select ads.dest_id,max(sequence#) "Current Sequence", max(log_se ...

  5. Oracle 11.2.0.4.0 Dataguard部署和日常维护(6)-Active Dataguard篇

    1. 检查主备库的状态 on primary column DATABASE_ROLE format a20 column OPEN_MODE format a15 column PROTECTION ...

  6. Oracle 11.2.0.4.0 Dataguard部署和日常维护(5)-Datauard 主备切换和故障转移篇

    1. dataguard主备切换   1.1. 查看当前主备库是否具备切换条件 on slave select sequence#,first_time,next_time,archived,appl ...

  7. Oracle 11.2.0.4.0 Dataguard部署和日常维护(4)-Datauard Gap事件解决篇

    Oracle dataguard主库删除备库需要的归档时,会导致gap事情的产生,或者备库由于网络或物理故障原因,倒是备库远远落后于主库,都会产生gap事件,本例模拟gap事件的产生以及处理. 1. ...

  8. Oracle 11.2.0.4.0 Dataguard部署和日常维护(3)-Datauard监控篇

    1.  v$database    查看当前数据库的角色和保护模式 primary库查看 column NAME format a10 column PROTECTION_MODE format a2 ...

  9. Oracle 11.2.0.4.0 Dataguard部署和日常维护(2)-Datauard部署篇

    1. primary库设置dataguard相关参数   1.1. 强制primay库在任何状态下必须记录日志 SYS@userdata>select FORCE_LOGGING from v$ ...

随机推荐

  1. 目录遍历 - Pikachu

    概述: 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活. 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行其对应 ...

  2. Job for docker.service failed because start of the service was attempted too often. See "systemctl status docker.service" and "journalctl -xe" for details. To force a start use "systemctl reset-failed

    安装docker时,自己添加了国内的hub.docker.com镜像 [root@ce-docker ~]# systemctl restart docker 出现以下报错:Job for docke ...

  3. dblink查找对应的目标端session

    v$session试图中process字段代表的是客户端所在机器的进程号 例如我使用toad连接数据库,查询到的process即toad的进程号 SELECT process FROM V$SESSI ...

  4. .NET Core部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx)

    在.NET Core部署到linux(CentOS)最全解决方案,常规篇一文,我们详细讲解了传统的.NET Core部署到Linux服务器的方法,学到了Linux在虚拟机下的安装.Xshell,Xft ...

  5. Android事件分发机制二:viewGroup与view对事件的处理

    前言 很高兴遇见你~ 在上一篇文章 Android事件分发机制一:事件是如何到达activity的? 中,我们讨论了触摸信息从屏幕产生到发送给具体 的view处理的整体流程,这里先来简单回顾一下: 触 ...

  6. 代理模式详解:静态代理+JDK/CGLIB 动态代理实战

    1. 代理模式 代理模式是一种比较好的理解的设计模式.简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标 ...

  7. HDU3062 PARTY

    Party Problem Description 有n对夫妻被邀请参加一个聚会,因为场地的问题,每对夫妻中只有1人可以列席.在2n 个人中,某些人之间有着很大的矛盾(当然夫妻之间是没有矛盾的),有矛 ...

  8. MySQL集群之MyCat

    MySQL集群之MyCat 一.MyCat简介及分析 1.1 MyCat是什么? 1.2 关键特性及应用场景 1.2.1 关键特性 1.2.2 应用场景 1.2.3 MyCat不适合的应用场景 1.3 ...

  9. python中如何添加模块导入路径?

    python中自定义模块导入路径的方式主要有以下3种: (1)使用sys.path.append() 随着程序执行,会动态地添加模块导入的路径,但是程序执行结束后就会立即失效(临时性的) import ...

  10. CF-1333F Kate and imperfection

    F. Kate and imperfection 假设一个一个的往集合里面放元素,显然在放某个元素之前,我们不想让它的倍数已经在集合里面.因为在这之前,我们不如先把这个数放进去,再把它的倍数放进去更优 ...