gitlab安装部署维护

@[TOC] (gitlab安装部署维护)

git简介

git是分布式版本控制系统,git(/ɡɪt/,音频)是一个分布式版本控制软件,最初由林纳斯·托瓦兹(LinusTorvalds)创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。应注意的是,这与GNUInteractiveTools(一个类似NortonCommander界面的文件管理器)有所不同,具休介绍和相关文档可参阅gitlab中文文档(http://www.git-scm.com.cn/)

特点

  • 直接记录快照,而非差异比较
  • 近乎所有操作都是本地执行
  • Git 保证完整性
  • Git 一般只添加数据

git的三种状态

  • 已提交(committed)
  • 已修改(modified)
  • 已暂存(staged)
  • 在这里插入图片描述在这里插入图片描述

工作目录、暂存区域以及 Git 仓库.

Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。

工作目录是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。

暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作`‘索引’’,不过一般说法还是叫暂存区域。

基本的 Git 工作流程如下:

  • 在工作目录中修改文件。

  • 暂存文件,将文件的快照放入暂存区域。

  • 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

如果 Git 目录中保存着的特定版本文件,就属于已提交状态。 如果作了修改并已放入暂存区域,就属于已暂存状态。 如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。 在Git 基础一章,你会进一步了解这些状态的细节,并学会如何根据文件状态实施后续操作,以及怎样跳过暂存直接提交。

安装部署维护

GitLab简介

  • GitLab是由GitLabInc.开发,使用MIT许可证的基于网络的Git仓库管理工具,且具有wiki和issue跟踪功能。使用Git作为代码管理工具,并在此基础上搭建起来的web服务
  • Gitlab 是一个基于Git实现的在线代码仓库托管软件,你可以用Gitlab自己搭建一个类似于Github一样的系统平台,一般搭建gitlab私服就是用在公司的内部
  • Gitlab 功能就是能够对代码的提交审核和问题跟踪,这个对于软件工程质量的管理是至关重要
  • Gitlab分为社区版(CE) 和 企业版(EE) 我感觉大多数的公司还是会选择社区版,反正我们公司是要用社区版的
  • 部署Gitlab 是对服务器有配置要求的 建议是CPU两核,内存4G以上

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安装完初始化后的目录结构

  • /opt/gitlab //gitlab组件二进制文件存放目录
  • /etc/gitlab //配置文件目录
  • /etc/gitlab/gitlab.rb //gitlab主配置文件
  • /var/opt/gitlab //各组件配置文件所在目录
  • /var/opt/gitlab/git-data/repositories //仓库默认存储目录
  • /var/log/gitlab //gitlab 各个组件产生的日志
  • /var/opt/gitlab/backups //备份文件生成的目录

gitlab下载安装

  • 下载地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-13.5.5-ce.0.el7.x86_64.rpm
  • 版本选择:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/

[root@jenkins-git opt]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-13.5.5-ce.0.el7.x86_64.rpm
[root@jenkins-git opt]# yum -y install gitlab-ce-13.5.5-ce.0.el7.x86_64.rpm

安装完成后的部分内容显示:

       *.                  *.
      ***                 ***
     *****               *****
    .******             *******
    ********            ********
   ,,,,,,,,,***********,,,,,,,,,
  ,,,,,,,,,,,*********,,,,,,,,,,,
  .,,,,,,,,,,,*******,,,,,,,,,,,,
      ,,,,,,,,,*****,,,,,,,,,.
         ,,,,,,,****,,,,,,
            .,,,***,,,,
                ,*,.
  


     _______ __  __          __
    / ____(_) /_/ /   ____ _/ /_
   / / __/ / __/ /   / __ `/ __ \
  / /_/ / / /_/ /___/ /_/ / /_/ /
  \____/_/\__/_____/\__,_/_.___/
  

Thank you for installing GitLab!

修改配置、初始化启动、502问题

  • 修改配置
    [root@jenkins-git opt]# vim /etc/gitlab/gitlab.rb (ip改成自己对应的本机IP)
    external_url ‘http://192.168.10.20’
    ## 用于配置邮件服务
    gitlab_rails[‘smtp_enable’] = true
    gitlab_rails[‘smtp_address’] = “smtp.163.com”
    gitlab_rails[‘smtp_port’] = 25
    gitlab_rails[‘smtp_user_name’] = “cbuyXXX@163.com” ##自己的163邮箱账号
    gitlab_rails[‘smtp_password’] = “xxxx” ##开通smtp时返回的授权码
    gitlab_rails[‘smtp_domain’] = “163.com”
    gitlab_rails[‘smtp_authentication’] = “login”
    gitlab_rails[‘smtp_enable_starttls_auto’] = true
    gitlab_rails[‘smtp_tls’] = false
    gitlab_rails[‘gitlab_email_from’] = “cbuyXXX@163.com” ##指定发送邮件的邮箱地址
    user[“git_user_email”] = “cbuyXXX@163.com” ##指定接收邮件的邮箱地址
  • 初始化启动
    [root@jenkins-git opt]# gitlab-ctl reconfigure
  • 502问题
    初始启动后,主页显示502
    因8080端口被占用,导致unicorn服务无法启动,从而出现502错误,要更改unicorn端口
    [root@jenkins-git opt]# vim /etc/gitlab/gitlab.rb
    unicorn[‘port’] = 8181 //原来端口是8080,这里换一个

相关组件服务操作

  • 检查gitlab各组件状态:
    gitlab-ctl status
  • 重启gitlab(start/stop/restart):
    gitlab-ctl restart
  • 只重启某个组件:
    gitlab-ctl restart nginx
  • gitlab组件:
    alertmanager 负责接收并处理来自Prometheus Server(也可以是其它的客户端程序)的告警信息
    gitaly Gitaly是一个Git RPC服务,用于处理GitLab发出的所有git调用
    gitlab-exporter
    gitlab-workhorse 轻量级的反向代理服务器
    grafana 跨平台的开源的度量分析和可视化工具
    logrotate 日志文件管理工具
    nginx 高性能HTTP和反向代理服务器
    node-exporter 监控服务器CPU、内存、磁盘、I/O等信息
    postgres-exporter postgresql监控组件
    postgresql 开源对象-关系数据库服务器
    prometheus 开源监控报警系统和时序列数据库
    puma 是用于HTTP 1.1应用程序的多线程ruby服务器
    redis 内存高速缓存数据库
    redis-exporter 获取redis状态信息
    sidekiq 是Ruby中一个非常优秀而且可靠的后台任务处理软件,其依赖 Redis 实现队列任务的增加、重试以及调度等

Gitlab备份和恢复、迁移操作记录

  1. 修改gitlab配置文件:
    [root@jenkins-git opt]# vim /etc/gitlab/gitlab.rb
    #指定备份后数据存放的路径、权限、时间配置
    gitlab_rails[‘manage_backup_path’] = true #292行 开启备份功能
    gitlab_rails[‘backup_path’] = “/opt/gitlab_backup” #293行 指定备份的路径
    gitlab_rails[‘backup_archive_permissions’] = 0644 #296行 备份文件的权限
    gitlab_rails[‘backup_keep_time’] = 7776000 #301行 备份保留时间(保留90天)

  2. 创建备份目录并授权:
    [root@jenkins-git opt]# mkdir /opt/gitlab_backup && chown -R git.git /opt/gitlab_backup/

  3. 重新生效gitlab配置:
    [root@jenkins-git opt]# gitlab-ctl reconfigure

  4. 手动备份:
    [root@jenkins-git opt]# gitlab-ctl stop unicorn && gitlab-ctl stop sidekiq && gitlab-ctl stop nginx
    [root@jenkins-git opt]# gitlab-rake gitlab:backup:create

  5. 查看备份:
    [root@jenkins-git opt]# ll -sh /opt/gitlab_backup/

  6. 脚本定时备份
    编写备份脚本,结合crontab实施自动定时备份,比如每天0点、6点、12点、18点各备份一次
    编写备份脚本:
    [root@jenkins-git opt]# vim /opt/gitlab_backup/git_back.sh
    #!/usr/bin/bash
    /usr/bin/gitlab-rake gitlab:backup:create CRON=1
    chmod +x /opt/gitlab_backup/git_back.sh
    注意:环境变量CRON=1的作用是如果没有任何错误发生时, 抑制备份脚本的所有进度输出
    加入定时任务:
    [root@jenkins-git opt]# crontab -e
    0 0,6,12,18 * * * /bin/bash /opt/gitlab_backup/git_back.sh > /dev/null 2>&1

  7. 恢复备份
    GItlab只能还原到与备份文件相同的gitlab版本
    关闭数据库连接服务:
    [root@jenkins-git opt]# gitlab-ctl stop unicorn && gitlab-ctl stop sidekiq && gitlab-ctl stop nginx
    Gitlab的恢复操作会先将当前所有的数据清空,然后再根据备份数据进行恢复.
    在指定备份文件恢复时,gitlab文件名只贴到数字尾,注意。
    [root@jenkins-git opt]# cd /opt/gitlab_backup
    [root@jenkins-git opt]# gitlab-rake gitlab:backup:restore BACKUP=1613439490_2021_02_16_13.5.5

Gitlab ssh设置和git日常操作

  • 在客户端电脑上执行
    [root@jenkins .ssh]# ssh-keygen -t rsa -b 4096 -C “lcf@ald8.cn”
    [root@jenkins .ssh]# ls
    id_rsa id_rsa.pub
    [root@jenkins .ssh]# cat id_rsa.pub
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDWye2PALrwas6KiEdj2zq+6PD6mM2TkvunlpgCMSHJa3phjNaJGE2eskQS+dDuXl/nYJjqotN8WHOwz/rGNV5w3E1mQOFV9fHoQNfNq1d1FDejqHbFEKo+w/lQsb/2IT5x0bw0pd+PLNZ3q72sbk4wL0l0mhfA5ciVdx5zEcJJMDtMcqqLFdqtuCkENHZgQCxrByBPifPQzs75NBho1PrM61Ya7QIpO1cf+stvvSFHOf3JigmYwhTJn34jAQiCi9yMP9s+A0dk0NB3WCNKQlQwWqxtQfw0r4DwL9lLuUxUKHZ6F1Q42FkPjAATTYA4tv0Dw1UJa+xFx8v/1r0dkYOp+PEp9Ipm3x7yTHU7Y/gPyUnec7Vao/NbwVpKUzoeEjOBcJ1vjKkd8rSJ4s19LgX+SNQVyIlu6+RuAKDLSWgIY8u/bWEmPnu1cXP+zXWgV40I+SJQltiddHbkcmUU+n8yd3FOo1Q1CiU8yxxpuwU821KYHFt+b/VQiDj3sjFYGNJU0Yj7ENtPD2ysmtzaR918RdawXuE0KwPBoEw7f7O1yqJABJbN07wHKcS9OcpMt5Bfp0Jl+XlW16U/Iqm2QY5e3xWsZoW/nPPySIrh4Zi3EvNftJ6Gtqt1sMqnEaGlxzgVdGkQKjct94VEPGVDMfDiFfK89a/eX5TpC5QCh7Me6Q== lcf@ald8.cn
  • 然后装id_rsa.pub的内容添加到 gitlab添加ssh密钥
    在这里插入图片描述
  • 在客户端上测试创建项目等操作
    1. 创建版本库
      [root@jenkins mnt]# mkdir mygit
      [root@jenkins mnt]# cd mygit/
      [root@jenkins mygit]# git init
      初始化空的 Git 版本库于 /mnt/mygit/.git/
      [root@jenkins mygit]# echo ‘this is test’ > index.html
      [root@jenkins mygit]# git add .
      [root@jenkins mygit]# git commit -m ‘index.html’
      [master(根提交) ce12606] index.html
      1 file changed, 1 insertion(+)
      create mode 100644 index.html

    2. 添加到远程库
      [root@jenkins mygit]# git remote add origin git@192.168.10.20:lcf/mygit.git
      [root@jenkins mygit]# git push origin master
      Counting objects: 3, done.
      Writing objects: 100% (3/3), 213 bytes | 0 bytes/s, done.
      Total 3 (delta 0), reused 0 (delta 0)
      remote:
      remote:
      remote: The private project lcf/mygit was successfully created.
      remote:
      remote: To configure the remote, run:
      remote: git remote add origin git@192.168.10.20:lcf/mygit.git
      remote:
      remote: To view the project, visit:
      remote: http://192.168.10.30/lcf/mygit
      remote:
      remote:
      remote:
      To git@192.168.10.20:lcf/mygit.git
      * [new branch] master -> master

    3. 克隆版本
      [root@jenkins mnt]# git clone git@192.168.10.20:lcf/mygit.git
      正克隆到 ‘mygit’…
      remote: Enumerating objects: 3, done.
      remote: Counting objects: 100% (3/3), done.
      remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
      接收对象中: 100% (3/3), done.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

璐程风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值