什么是 GitLab?
GitLab 是一个用于仓库管理系统的开源项目,使用 Git 做为代码管理工具,并在此基础上搭建起来的 web 服务。node
GitLab的功能特色
提供了管理,计划,建立,验证,打包,发布,配置,监视和保护应用程序的功能 是一个在线代码仓库托管软件,是提供代码托管、提交审核和问题跟踪的代码管理平台python
对服务器的要求:配置建议CPU2核心,内存4G以上
Git、GitLab、GitHub三者的区别
Git 基于命令的版本操做,全命令操做,无可视化界面;ios
Gitlab 基于 Git 实现的在线代码仓库软件,提供了 web 的管理界面,用于企业内部;nginx
Github 基于 Git 实现的在线代码仓库软件,提供了可视化管理界面,提供开放和私有的仓库。大部分开源项目选择 Github 做为代码托管仓库;git
服务组成部分
nginx:静态web服务器:端口号为80;web
gitlab-shell:用于处理 git 命令和修改 authorized key 列表;redis
gitlab-workhorse:轻量级反向代理服务器(go语言);sql
gitlab-workhorse 是一个敏捷的反向代理,它会处理一些大的 HTTP 请求,好比文件上传、下载,gitshell
push/pull 和 git 包下载,其余请求会反向代理到 gitlab rails 应用,即反向按代理给后端的unicorn;数据库
logrotate:日志文件管理工具;
postgresql:数据库;
reids:缓存数据库;
sidekiq:用于在后台执行队列任务(异步执行) (ruby);
unicorn:用ruby编写的一个HTTP服务器:端口号为8080;
gitlab rails应用:是托管在这个服务器上
功能介绍
基于web方式的管理平台;
拥有完善的权限的控制和身份认证模块;
问题追踪和代码质量管理;
代码review(复查)功能;
文档管理、知识库管理;
安装 GitLab 的步骤
[root@localhost ~]# ls /var/cache/yum/x86_64/\$releasever/gitlab_gitlab-ce/packages/ //从网络上yum下载的包的位置 [root@localhost ~]# yum install -y curl openssh-server openssh-clients cronie policycoreutils-python postfix //安装依赖包 [root@localhost ~]# curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash //下载gitlab的yum(仓库)源,sudo用于提权(适用于普通用户) [root@localhost ~]# yum list | grep gitlab-ce //查看是否有gitlab-ce gitlab-ce.x86_64 11.7.5-ce.0.el7 gitlabgitlab-ce [root@localhost ~]# yum -y install gitlab-ce //安装gitlab-ce [root@localhost ~]# ls /var/cache/yum/x86_64/\$releasever/gitlab_gitlab-ce/packages/ //从网络上yum下载的包的位置 ###设置URL [root@localhost ~]# vim /etc/gitlab/gitlab.rb //修改一个URL地址 external_url 'http://gitlab.bdqn.cn' [root@localhost ~]# vim /etc/hosts //编辑一个域名解析 192.168.1.21 gitlab.bdqn.cn [root@localhost ~]# gitlab-ctl reconfigure //从新配置gitlab的配置文件 [root@localhost ~]# gitlab-ctl start //启动gitlab服务 ok: run: alertmanager: (pid 5151) 363s ok: run: gitaly: (pid 4934) 368s ok: run: gitlab-monitor: (pid 5070) 366s ok: run: gitlab-workhorse: (pid 4897) 370s ok: run: logrotate: (pid 4120) 416s ok: run: nginx: (pid 4071) 418s ok: run: node-exporter: (pid 4974) 367s ok: run: postgres-exporter: (pid 5178) 362s ok: run: postgresql: (pid 3564) 458s ok: run: prometheus: (pid 5111) 364s ok: run: redis: (pid 3420) 464s ok: run: redis-exporter: (pid 5090) 365s ok: run: sidekiq: (pid 3934) 430s ok: run: unicorn: (pid 3862) 431s [root@localhost ~]# gitlab-ctl restart //从新启动gitlab服务 [root@localhost ~]# free -m //查看运行内存 [root@localhost ~]# firefox gitlab.bdqn.cn //查看gitlab页面,或者使用ip地址访问 [root@localhost ~]# firefox 192.168.1.21
gitlab页面的出现的问题; 检测端口号80和8080是否被占用;
访问主页502的时候,看一下端口号8080是否被占用
gitlab相关命令 gitlab-ctl start //启动gitlab服务 gitlab-ctl stop //中止gitlab服务 gitlab-ctl start unicorn(添加组件名称) //单独开启某个组件 gitlab-ctl status //查看gitlab的运行状态 gitlab-ctl reconfigure //修改完配置文件从新编译 gitlab-ctl tail //查看gitlab的日志
配置 GitLab 邮件服务
sendmail /postfix /smtp
古老邮箱 邮件服务服务器 在线邮箱
配置smtp邮箱步骤
###修改配置文件 [root@localhost ~]# vim /etc/gitlab/gitlab.rb gitlab_rails['gitlab_email_from'] = 'bm73333@163.com' //说明邮箱从哪里发,设置本身的邮箱地址 #ctrl+v 进入可视块 +x gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.163.com" //在线邮件服务器地址 gitlab_rails['smtp_port'] = 25 //端口号,开启本地发邮件的端口 gitlab_rails['smtp_user_name'] = "bm73333@163.com" //邮箱地址 gitlab_rails['smtp_password'] = "qwerty567890" //邮箱受权码,调用邮箱 ###邮箱受权码的获取 设置 POP3/SMTP/IMAP 客户端受权密码,在里面就能够设置受权码 gitlab_rails['smtp_domain'] = "163.com" gitlab_rails['smtp_authentication'] = "login" //在登陆时,查看是否有受权码 gitlab_rails['smtp_enable_starttls_auto'] = true //加密方式 gitlab_rails['smtp_tls'] = false //加密方式 user['git_user_email'] = "bm73333@163.com" ###修改完成 从新编译配置文件 [root@localhost ~]# gitlab-ctl reconfigure 重启gitlab服务 [root@localhost ~]# gitlab-ctl restart 进入控制台 [root@localhost ~]# gitlab-rails console ------------------------------------------------------------------------------------- GitLab: 11.7.5 (c5b5b18) GitLab Shell: 8.4.4 postgresql: 9.6.11 ------------------------------------------------------------------------------------- Loading production environment (Rails 5.0.7.1) irb(main):001:0> Notify.test_email('18256001006@163.com','yangxiaofeiNB','hello,world!').deliver_now //发送邮件,deliver_now表明马上发送 (格式:收件人的邮箱地址,邮件标题,邮件内容) irb(main):003:0> exit //退出控制台
GitLab 的平常操做
gitlab的备份 [root@localhost ~]# gitlab-rake gitlab:backup:create //gitlab的备份 备份的数据的目录 [root@localhost ~]# ls /var/opt/gitlab/backups/ 1550541218_2019_02_19_11.7.5_gitlab_backup.tar //备份完成后会造成tar包,文件名格式:时间戳,当前日期,当前gitlab版本,backup备份包
恢复数据的步骤 首先中止一下两个组件 [root@localhost ~]# gitlab-ctl stop sidekiq ok: down: sidekiq: 0s, normally up [root@localhost ~]# gitlab-ctl stop unicorn ok: down: unicorn: 0s, normally up 切换到备份目录 [root@localhost ~]# cd /var/opt/gitlab/backups/ [root@localhost backups]# ls 1550541218_2019_02_19_11.7.5_gitlab_backup.tar [root@localhost backups]# gitlab-rake gitlab:backup:restore BACKUP=1550541218_2019_02_19_11.7.5 //进行数据的恢复,名字为上面的时间戳,日期,版本号组成 出现如下提示 Do you want to continue (yes/no)? yes Do you want to continue (yes/no)? yes [root@localhost backups]# gitlab-ctl start sidekiq //启动组件服务 ok: run: sidekiq: (pid 19474) 0s [root@localhost backups]# gitlab-ctl start unicorn //启动组件服务 ok: run: unicorn: (pid 19536) 1s 数据恢复完成
访问gitlab的web页面
http://gitlab.bdqn.com 或者 http://localhost 的 ip 地址
进入控制台的两种方法
一、[root@localhost ~]# gitlab-rails console //进入控制台 ------------------------------------------------------------------------------------- GitLab: 11.7.5 (c5b5b18) GitLab Shell: 8.4.4 postgresql: 9.6.11 ------------------------------------------------------------------------------------- Loading production environment (Rails 5.0.7.1) //加载生产环境 irb(main):001:0> #二、[root@localhost ~]# gitlab-rails console production ------------------------------------------------------------------------------------- GitLab: 11.7.5 (c5b5b18) GitLab Shell: 8.4.4 postgresql: 9.6.11 ------------------------------------------------------------------------------------- Loading production environment (Rails 5.0.7.1) irb(main):001:0>
忘记 root 密码,进行修改
[root@localhost ~]# gitlab-rails console production ------------------------------------------------------------------------------------- GitLab: 11.7.5 (c5b5b18) GitLab Shell: 8.4.4 postgresql: 9.6.11 ------------------------------------------------------------------------------------- Loading production environment (Rails 5.0.7.1) irb(main):001:0> user = User.where(id:1).first //切换到root用户 => #<User id:1 @root> irb(main):002:0> user.password='1234.com' //''里面修改密码,密码为8位 => "1234.com" irb(main):003:0> user.save! Enqueued ActionMailer::DeliveryJob (Job ID: 7661b452-fcb4-48a0-b9f0-35995ba21258) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", #<GlobalID:0x00007f4360748a10 @uri=#<URI::GID gid://gitlab/User/1>> => true irb(main):004:0> exit 验证是都修改为功,使用web进行登陆测试 ##至此修改完成
查看 GitLab 的日志
[root@localhost ~]# gitlab-ctl tail //查看总体的日志 查看组件的相关日志 [root@localhost ~]# gitlab-ctl tail redis //查看redis的日志 [root@localhost ~]# gitlab-ctl tail logrotate
经过 ssh 远程链接方式往 GitLab 上传文件
查看密钥 [root@localhost ~]# ssh-keygen -t rsa -C "zhangsan@bdqn.cn" //为建立用户时输入的邮箱地址 [root@localhost .ssh]# pwd /root/.ssh [root@localhost .ssh]# ls id_rsa id_rsa.pub [root@localhost .ssh]# cat id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDG+woCe7UsBcXhU/I5hRZ0B7fzOOzzGsYzm1+qSvxn1SRaWQ53TNfWJJKpmamodHDI0IWHld6MI+2IB5bSXobNjrV1W147m34fE3KZZ4Kx9wwQ89UnUzqREIPDHnTLozHOE36AxGh6pREFawMjxJJjzd6d3xC9PM9bQ3KaY80agGY44N1vO6c+Turfkpyre3fyITudEqPlrCibJF9eikXgFhHNtrrWVAII6LUKU89LNfXKKYfOmXvB+T+ZYODkXqPR5GPCz4IIuGd5fxpfAmnTvm+Sz3Dp5APVSmveEx9ivtRVsb5lqlYoXJT1vL+D9dQKFY7HI8/FttOSduQNLfrv 45354066@qq.com 复制密钥,到web页面进行添加密钥 验证远程登陆是否成功 [root@localhost .ssh]# ssh -T git@gitlab.bdqn.cn The authenticity of host 'gitlab.bdqn.cn (192.168.1.21)' can't be established. ECDSA key fingerprint is SHA256:88Ixrb6xHdt9SVsQ3n78nQbfzPplW8kZNKQLuldud6w. ECDSA key fingerprint is MD5:3e:34:68:db:3a:f6:5c:a5:de:18:9b:1c:cc:ef:f9:ff. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'gitlab.bdqn.cn,192.168.1.21' (ECDSA) to the list of known hosts. Welcome to GitLab, @root!
克隆项目,进行上传
[root@localhost ~]# yum install -y git //下载git 声明谁操做,全局配置,为用户和用户邮箱(用户必须有才行) [root@localhost ~]# git config --global user.name "zhangsan" [root@localhost ~]# git config --global user.email "zahngsan@bdqn.cn" [root@localhost ~]# git clone git@gitlab.bdqn.cn:ios/ios.git //克隆项目库 正克隆到 'ios'... warning: 您彷佛克隆了一个空版本库。 [root@localhost ~]# ls //生成一个目录,就是克隆的代码 anaconda-ks.cfg ios 模板 图片 下载 桌面 initial-setup-ks.cfg 公共 视频 文档 音乐 [root@localhost ~]# cd ios/ //首先进入到克隆的库中 [root@localhost ~]# touch README.md //建立一个文件 [root@localhost ~]# echo 111 > README.md //输入内容 [root@localhost ios]# git add README.md //git中添加内容 [root@localhost ios]# git commit -m "test111" //进行提交,打一个标签 [master(根提交) ad3c913] test111 1 file changed, 1 insertion(+) create mode 100644 README.md [root@localhost ios]# git push origin master //上传,原来的,向主干添加 Counting objects: 3, done. Writing objects: 100% (3/3), 209 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@gitlab.bdqn.cn:ios/ios.git * [new branch] master -> master 进入web页面就能够看到项目了 克隆项目 [root@localhost ~]# mkdir test [root@localhost ~]# cd test/ [root@localhost test]# git clone git@gitlab.bdqn.cn:ios/ios.git 正克隆到 'ios'... remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0) 接收对象中: 100% (3/3), done. [root@localhost test]# ls ios [root@localhost test]# cd ios/ [root@localhost ios]# ls README.md