01 . GitLab简介及环境部署
GitLab简介
最初,该产品名为GitLab,是完全免费的开源软件,按照MIT许可证分发。
2013年7月,产品被拆分为:GitLabCE(社区版)和GitLabEE(企业版),当时,GitLabCE和GitLabEE的许可仍然是根据MIT许可分发的免费和开源软件。
Gitlab于2017年1月31日发布一系列紧急通告称,位于荷兰的系统管理员因操作失误而删除了包含310GB产品数据的文件夹,在取消删除操作后仅剩下4.5GB。运维人员之后检查发现,网站宣称和配备的多项备份措施均未正常运作或难以利用。Gitlab在YouTube直播了恢复数据的过程。网站最终丢失了最后6小时的数据库数据(包括问题、合并请求、评论、片段等,不含代码库)
GitLab是由 GitLab Inc.开发,使用 MIT 许可证的基于网络的 Git 仓库管理工具开源项目,且具有 wiki 和 issue 跟踪功能,使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。GitLab 由乌克兰程序员 Dmitriy Zaporozhets 和 Valery Sizov 开发,它由 Ruby 写成。后来,一些部分用 Go 语言重写.
GitLab原理:
GitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上建立的web服务.
其实说直白点,他就是个git服务器,和github差不多,只不过,这个gitlab可以下载到本地进行搭建,代码存在本地服务器上,而不是远端的github上.
col1 | GitLab | GitHub |
---|---|---|
安全性 | 代码存在本地,自行管控 | 代码存在远端,厂商管控 |
私密性 | 代码能见度自行设定 | 免费的代码开放,付费的代码隐藏 |
成本 | 运维成本 | 代码隐藏 |
综上所述
# 要是企业中有服务器,建议搭建gitlab,毕竟代码放到自己这里安心些.
# 当然要是公司写的代码不重要的话,可以放到免费版的github上
Git,GitLab,GitHub,Gittee到底是什么?
git 是一种版本控制系统,是一个命令,是一种工具
github 是一个基于git实现在线代码托管的仓库,向互联网开放,企业版要收钱
gitee 类似github,一般在企业内搭建git私服,要自己搭建环境
git-ce 是社区版,gitlab-ee是企业版,要收费.
GitHub、GitLab 不同点:
GitHub如果使用私有仓库,是需要付费的,GitLab可以在上面搭建私人的免费仓库。
GitLab让开发团队对他们的代码仓库拥有更多的控制,相对于GitHub,它有不少的特色:
# 1 允许免费设置仓库权限
# 2 允许用户选择分享一个project的部分代码
# 3 允许用户设置project的获取权限,进一步提升安全性
# 4 可以设置获取到团队整体的改进进度
# 5 通过innersourcing让不在权限范围内的人访问不到该资源
GitLab部署
环境清单
# CentOS 7.3
# gitlab-ce-11.11.3-ce.0.el7.x86_64.rpm
# policycoreutils-python
# openssh-server
注意事项
# 必须要安装环境清单的两个依赖包
初始化
mkdir -p /etc/yum.repos.d/backup
mv /etc/yum.repos.d/CentOS-* /etc/yum.repos.d/backup
curl -o /etc/yum.repos.d/163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo &>/dev/null
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install ntpdate
ntpdate -b ntp1.aliyun.com
setenforce 0
sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld
sed -i '/^GSSAPIAu/ s/yes/no/' /etc/ssh/sshd_config
sed -i '/^#UseDNS/ {s/^#//;s/yes/no/}' /etc/ssh/sshd_config
下载安装GitLab包
# 安装依赖包
yum -y install policycoreutils-python openssh-server
# 去这个网址下载rpm包,四百-六百多兆,也可以用rpm -ivh 直接跟上已经下载好的下载包安装
# https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
rpm -ivh gitlab-ce-11.11.3-ce.0.el7.x86_64.rpm
修改配置文件并配置邮箱,启动
# 修改配置文件,可以直接在文件末尾追加以下行即可,
# 默认Nginx监听的是80端口,如果Nginx修改端口,external_url里面也必须带端口:
[root@gitlab-9 ~]# sed -r '/^(#|$)/d' /etc/gitlab/gitlab.rb
external_url 'http://192.168.43.61'
nginx['listen_port'] = 80
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'you_menz@163.com'
gitlab_rails['gitlab_email_display_name'] = 'Admin' # 待会邮箱收到邮件的发件人就是此处名字
gitlab_rails['gitlab_email_reply_to'] = 'you_menz@163.com'
gitlab_rails['gitlab_email_subject_suffix'] = 'gitlab[]'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "you_menz@163.com"
gitlab_rails['smtp_password'] = "zhoujian22" # 此处密码是邮箱客户端的授权密码
gitlab_rails['smtp_domain'] = "163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
# 重置配置服务
gitlab-ctl reconfigure
# 查看服务是否都起来了
gitlab-ctl status
lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 17165 root 7u IPv4 45430 0t0 TCP *:http (LISTEN)
nginx 17166 gitlab-www 7u IPv4 45430 0t0 TCP *:http (LISTEN)
# 至此说明服务都起来了,可以用web浏览器直接访问了
# 登录到http://IP: 修改root密码,gitlab默认管理用户是root,
# 登录: root/修改后的新密码
# 测试发送邮件是否成功,进入控制台,然后发送邮件
gitlab-rails console # 输入下面绿色命令
Notify.test_email('18621048481@163.com','','flying').deliver_now
# 如果出现以下信息代表成功
Notify#test_email: processed outbound mail in 201.9ms
Sent mail to 18621048481@163.com (5551.4ms)
Date: Fri, 08 Nov 2019 10:48:36 +0800
From: Admin <you_menz@163.com>
Reply-To: Admin <you_menz@163.com>
To: 18621048481@163.com
Message-ID: <5dc4d78469ee3_73ca3fddefcd66008640@zk01.mail>
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
Auto-Submitted: auto-generated
X-Auto-Response-Suppress: All
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>flying</p></body></html>
Gitlab用户在组有五种不同权限
/*
Guest: 可以创建issue,发表评论,不能读写版本库Reporter,可以克隆代码,不能提交.
QA,PM可以赋予Developer权限: 可以克隆代码,开发,提交,push, 普通开发可以赋予这个权限
Maintainer: 可以创建项目,添加tag,保护分支,添加项目成员,编辑项目
核心开发可以赋予Owner: 可以设置项目访问权限,Visibility Level,删除项目,迁移项目,管理组成员,开发组长可以给这个权限
*/
GitLab主要组件
1.Nginx: # web入口
2.database: # (postgresql,mysql) (gitlab repository issue, merge request等,用户(权限))
3.redis缓存: # 负责分发任务
4.sideiq: # 后台任务,主要负责发送电子邮件,任务需要来自redis
5.unicorn: # 包含gitlab主进程
6.gitlab-shell: # 用于ssh交互
7.gitlab-workherse: # 反向代理服务器,可以处理与unicorn无关的请求,处理git pull / push请求,处理unicorn的连接
8.gitaly后台服务: # 用于处理GitLab发出的所有调用
GitLab常用命令
gitlab-ctl start #启动全部服务
gitlab-ctl restart #重启全部服务
gitlab-ctl stop #停止全部服务
gitlab-ctl restart nginx #重启单个服务
gitlab-ctl status #查看全部组件的状态
gitlab-ctl show-config #验证配置文件
gitlab-ctl uninstall #删除gitlab(保留数据)
gitlab-ctl cleanse #删除所有数据,重新开始
gitlab-ctl tail <svc_name> #查看服务的日志
gitlab-rails console production #进入控制台 ,可以修改root 的密码
Gitlab重置用户密码
# 进入Gitlab控制台
[root@gitlab-4 ~]# sudo gitlab-rails console production
# 查询Gitlab超级管理员信息
irb(main):004:0> user = User.where(id:1).first
=> #<User id:1 @root>
# 重置密码
irb(main):005:0> user.password = 'zhoujian'
=> "zhoujian"
irb(main):006:0> user.password_confirmation='zhoujian'
=> "zhoujian"
# 保存
irb(main):007:0> user.save
Enqueued ActionMailer::DeliveryJob (Job ID: e9963aca-284e-44ad-b9e1-d87fc6ac7c7f) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", #<GlobalID:0x00007f7447995eb8 @uri=#<URI::GID gid://gitlab/User/1>>
=> true
GitLab的备份操作与恢复
备份<设置备份目录及保存天数>
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
gitlab_rails['backup_keep_time'] = 604800
# 备份<重载>
[root@gitlab ~]# gitlab-ctl reconfigure
# 开始备份
[root@gitlab ~]# gitlab-rake gitlab:backup:create
# 会提示敏感信息
警告:您的gitlab.rb和gitlab-secrets.json文件包含敏感数据,并且不包含在此备份中。您将需要这些文件来还原备份。请手动备份它们。
#备份完成出现在指定目录下的文件
[root@gitlab backups]# ls
1541872172_2018_11_11_11.4.5_gitlab_backup.tar
#这个压缩包包含Gitlab所有数据(例如:管理员、普通账户以及仓库等等)。
"1541872172"是一个时间戳,从1970年1月1日0时到当前时间的秒数
从备份文件恢复
[备份和恢复的GitLab版本尽量保持一致]
[root@gitlab ~]# cd /var/opt/gitlab/backups
[root@gitlab backups]# chmod 777 1541872172_2018_11_11_11.4.5_gitlab_backup.tar
# 停止相关数据连接服务
[root@gitlab backups]# gitlab-ctl stop unicorn
ok: down: unicorn: 0s, normally up
[root@gitlab backups]# gitlab-ctl stop sidekiq
ok: down: sidekiq: 0s, normally up
# 从备份恢复
[root@gitlab backups]# gitlab-rake gitlab:backup:restore BACKUP=<指定时间戳,即1541872172_2018_11_11_11.4.5>
(若只有一个备份则无需指定时间戳)
后会让你输入一个"yes",输入成功开始还原(,其实最主要是还原数据库,总体时间有点长...)
之后再让你输一个“yes”,意思是因为备份中没有用户敏感数据,重写恢复时会丢失这些敏感数据;
成功;
#恢复完成,重载配置
[root@gitlab backups]# gitlab-ctl reconfigure
#重新启动,不然会报502错误;
gitlab-ctl stop && gitlab-ctl start
01 . GitLab简介及环境部署的更多相关文章
- Python简介及环境部署
Python的由来: Python的创始人:Guido van Rossum Guido 在1989年12月时,寻找一门“课余”编程项目来打发圣诞节前后的时间.Guido决定为当时正构 ...
- 01 Python简介、环境搭建及包管理(一)
一.Python简介 1. Python的特点: 是一门动态.解释型.强类型语言 动态:在运行期间才做数据检查(不用提前声明变量)- 静态语音(C/Java):编译时检查数据类型(编码时需要声明变量类 ...
- 01 . Vue简介,原理,环境安装
简介 vue是一个JavaMVVM库,是一套用于构建用户界面的渐进式框架,是初创项目的首选前端框架.它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计.它是轻量级的,它有很多独立的功能或库 ...
- ELKstack简介及环境部署
ELK工作流程图 环境准备 安装Logstash依赖包JDK Logstash的运行依赖于Java运行环境, Logstash 1.5以上不低于java 7推荐使用最新版本的Java.由于只是运行Ja ...
- OpenStack实践系列①openstack简介及基础环境部署
OpenStack实践系列①openstack简介及基础环境部署 一.OpenStack初探1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运 ...
- SDN概述:简介、工具、环境部署
一.前言: 本文初步接触 SDN 的相关概念.需要依次完成下面几项任务: SDN 简介 SDN 工具 SDN 环境部署 推荐阅读 推荐阅读下述内容: Ethane 项目,openflow 的基础 op ...
- Jenkins+maven+gitlab自动化部署之基础环境部署(一)
从一个二线城市,来到上海,刚入职,老大就给任务,为了减少开发打包部署时间,需要搭建一套自动化部署环境.接到任务后,赶紧上网查找资料,以及了解jenkins作用等等,用了一周时间,了解了个大概,由于都是 ...
- salt+jenkins+gitlab+ecs构建公司部署平台
1.网络架构图如下 2.采用这种方案的原因 1.现网机器都在各个省机房内网,或者堡垒机内部.无法直接从公司总部ssh到各个现网机器 2.现网机器可以访问到公网.因此可以从公网下载制作的tar包 3.每 ...
- Linux下rsyslog日志收集服务环境部署记录【转】
rsyslog 可以理解为多线程增强版的syslog. 在syslog的基础上扩展了很多其他功能,如数据库支持(MySQL.PostgreSQL.Oracle等).日志内容筛选.定义日志格式模板等.目 ...
随机推荐
- 10万级etl批量作业自动化调度工具Taskctl之轻量级Web应用版
什么是批量作业: 批量处理是银行业整个信息后台最为重要的技术形态,也是银行核心信息资产数据的分享.传输.演化的重要技术手段.有调查指出,全球70%的数据是经过批量处理得以再次使用,可见批量处理在整个信 ...
- odoo13之右上角弹出提示框
前言 在odoo中已经提供好了右上角弹出提示框的接口,我们只需要调用即可: 而提示框的实现又分为前端js实现和后段函数实现,前后端实现的效果相同. 实现效果图 前端实现提示框 在前端中显示提示框最常用 ...
- Django的下载及命令
安装 命令行 pip3 install django==1.11.11 测试是否安装成功 django-admin 创建django项目 django-admin startproject 项目名称( ...
- loading爬坑--跳出思维误区
最近在摸loading这个登录的loading动画,爬了一些坑. 第一坑--百度坑 我们爬的坑,前人都已经已经爬过了.并且把路都放在度娘了.--鲁迅 我最开始是不知道这个直接叫loading的,最开始 ...
- Java中的Set对象去重
前言部分 Set<T> 去重相信大家一定不陌生,尤其是在 Set<String>.Set<Integer> 等等,但是在使用 Set<实体> ,在不重写 ...
- JZOJ 11.21 提高B组反思
JZOJ 11.21 提高B组反思 T1 第二类斯特林数 直接套公式 \(S(i,j)=S(i-1,j-1)+S(i-1,j)*j\) 由于过大,\(unsigned\ long\ long\)都存不 ...
- getElementBy系列和querySelector系列的区别
querySelector和querySelectorAll的用法和getElementBy大致一样,获取的时候带上符号,getElementBy获取的是元素的动态集合,querySelector获取 ...
- 数据库事务ACID/隔离级别
参考博客 1. 事务的定义 事务是用户定义的一个数据库操作序列.这些操作要么全执行,要么全不执行,是一个不可分割的工作单元.在关系型数据库中,事务可以是一条SQL语句,也可以是一组SQL语句或整个程序 ...
- PyQt(Python+Qt)学习随笔:QTableWidget的属性
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 1.概述 除了从父类继承的属性外,在Designer中QTableWidget只有两个属性,就是行数 ...
- vue中两行代码实现全选及子选项全部选中,则全选按钮选中,反之有一个没选中,就取消选中全选按钮
every() 方法使用指定函数检测数组中的所有元素: 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测. 如果所有元素都满足条件,则返回 true. 逻辑 ...