Gitlab 快速部署及日常维护 (一)
一、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 快速部署及日常维护 (一)的更多相关文章
- Gitlab 快速部署及日常维护 (二)
一.概述 上一篇我们将Gitlab的安装部署和初始化设置部分全部讲解完成了,接下来我们介绍Gitlab在日常工作中常遇见的问题进行梳理说明. 二.Gitlab的安装和维护过程中常见问题 1.Gitla ...
- 【gitlab】gitlab快速部署教程
gitlab快速部署教程 部署环境 Ubuntu 16.04(亲测可用) 开始部署 安装依赖 sudo apt-get install curl openssh-server ca-certifica ...
- Oracle 11.2.0.4.0 Dataguard部署和日常维护(7) - Dataguard Flashback篇
1. 设置备库的闪回目录 show parameter db_recovery_file; NAME TYPE VALUE ------------------------------------ - ...
- Oracle 11.2.0.4.0 Dataguard部署和日常维护(6)-Dataguard Snapshot篇
1. 检查当前主备库同步状态 on primary select ads.dest_id,max(sequence#) "Current Sequence", max(log_se ...
- 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 ...
- Oracle 11.2.0.4.0 Dataguard部署和日常维护(5)-Datauard 主备切换和故障转移篇
1. dataguard主备切换 1.1. 查看当前主备库是否具备切换条件 on slave select sequence#,first_time,next_time,archived,appl ...
- Oracle 11.2.0.4.0 Dataguard部署和日常维护(4)-Datauard Gap事件解决篇
Oracle dataguard主库删除备库需要的归档时,会导致gap事情的产生,或者备库由于网络或物理故障原因,倒是备库远远落后于主库,都会产生gap事件,本例模拟gap事件的产生以及处理. 1. ...
- Oracle 11.2.0.4.0 Dataguard部署和日常维护(3)-Datauard监控篇
1. v$database 查看当前数据库的角色和保护模式 primary库查看 column NAME format a10 column PROTECTION_MODE format a2 ...
- Oracle 11.2.0.4.0 Dataguard部署和日常维护(2)-Datauard部署篇
1. primary库设置dataguard相关参数 1.1. 强制primay库在任何状态下必须记录日志 SYS@userdata>select FORCE_LOGGING from v$ ...
随机推荐
- java 记录数据持续变化时间
1.需求:获取count为null和不为null的持续变化 [{count=0, time=0}, {count=10, time=1000}, {count=20, time=2000}, {cou ...
- 手机QQ空间自动点赞登录
学以致用~使用 Appium 模拟人类操控手机行为 V2.0在手机上运行,目前实现以下功能: 1.小黑屋模式,一分钟内给好友发100条消息然后进了好友的小黑屋 2.定时发消息提醒对象多喝热水~ 3.对 ...
- Rancher On K3s 高可用架构部署
Rancher 推荐部署架构 k3s 模式 RKE 和 k8s 模式 备注: 我对 RKE 的理解就是 Ansible + kubeadm 的打包,首先 rke 需要到每一个节点都可以免密 ssh , ...
- jmeter三种阶梯式加压
一.前言 在做性能测试的时候,在某些场景下需要逐渐加压,不总是停下来再修改线程再加压,且可以对比加压,找出服务的性能拐点. 二.三种逐渐加压方式 备注:普通的压测方式,并发的Samples是可预知的: ...
- .NET 中依赖注入组件 Autofac 的性能漫聊
Autofac 是一款超赞的 .NET IoC 容器 ,在众多性能测评中,它也是表现最优秀的一个.它管理类之间的依赖关系, 从而使 应用在规模及复杂性增长的情况下依然可以轻易地修改.它的实现方式是将常 ...
- hive报错:Failed with exception java.io.IOException: rename for src path:
在hive中,会有这样一种情形: 1.创建一个分区外部表A(比如A表有5个字段),并且向A表里指定的分区(比如20160928这个分区)里插入数据 2.发现A表缺少一些字段,因为存在元数据不实时更新的 ...
- 策略模式 VS 状态模式
策略模式 VS 状态模式 策略模式 VS 状态模式 | 菜鸟教程 https://www.runoob.com/w3cnote/state-vs-strategy.html
- AWS Lightsail 开启 Root 登陆权限
将下面代码中的第一句中的 Passwd 改为自己将要设置的密码,否则默认 root 密码为 Passwd. #!/bin/bash echo root:Passwd |sudo chpasswd ro ...
- Node.js 安全指南
当项目周期快结束时,开发人员会越来越关注应用的"安全性"问题.一个安全的应用程序并不是一种奢侈,而是必要的.你应该在开发的每个阶段都考虑应用程序的安全性,例如系统架构.设计.编码, ...
- Web信息收集之搜索引擎-Zoomeye Hacking
Web信息收集之搜索引擎-Zoomeye Hacking https://www.zoomeye.org ZoomEye(钟馗之眼)是一个面向网络空间的搜索引擎,"国产的Shodan&quo ...