GitLab在线代码仓库托管
概念
GitLab作为一个开源项目,开始帮助团队在团队开发上进行合作。通过以业界领先的步伐交付新的功能为整个软件开发和操作生命周期提供了一个单独的应用平台。GitLab提供了管理、计划、创建、验证、打包、发布、配置、监视和保护应用程序所需的一切。GitLab是一个基于Git实现的在线代码仓库托管软件,一般用于企业、学校等内部网络搭建Git私服。GitLab是一个提供代码托管、提交审核和问题跟踪的代码管理平台。GitLab粉社区版(CE)和企业版(EE)
用来进行代码程序版本控制的软件有:svn、GitHub、GitLab
相关
Git/GitLab/GitHub简单区别
Git
是一种基于命令的版本控制系统,全命令操作,没有可视化界面。
GitLab
是一个基于Git实现的在线代码仓库软件,提供web可视化管理界面,通常用于企业团队内部协作开发。
GitHub
是一个基于Git实现的在线代码托管仓库(远程仓库),也可提供可视化管理界面,同时免费账户提供付费账户,提供开放和私有的仓库,大部分的开源项目都选择GitHub作为代码托管仓库。
lab相比hub更适合内部使用,而hub是全球用户都在使用存储代码,更适合开源代码的存储,GitLab可以理解为Git的私有仓库,和Maven私库Nexus类似。
GitLab软件内置的服务组件
- Nginx:静态web服务器
- GitLab-shell:用于处理Git命令和修改authorized keys列表(Ruby)
- GitLab-workhorse:轻量级反向代理服务器(go)。它会处理一些大的HTTP请求,比如文件的上传/下载、
git push/pull
和git包下载。其他请求会反向代理到gitlab rails应用,及反向代理给后端的unicorn(托管组件) - logrotate:日志文件管理工具
- postgresql:数据库
- redis:缓存数据库
- sidekiq:用于在后台执行队列任务(异步执行)(Ruby)
- unicorn:用Ruby编写的一个HTTP服务器,gitlab rails应用是托管在这个服务器上
GitLab的基础操作指令
gitlab-ctl start/stop # 开启/关闭gitlab
gitlab-ctl start/stop 组件名 # 开启/关闭某组件
gitlab-ctl tail # 查看gitlab日志
gitlab-ctl tail 组件名 # 查看gitlab某组件日志
gitlab-ctl reconfigure # 修改完配置文件之后必须执行,类似重启服务
gitlab-ctl status # 查看gitlab的状态
安装GitLab
硬件配置建议CPU两个核心,4G内存及以上,已安装Git(yum)
192.168.1.1
拖入gitlab包
rpm -ivh gitlab-ce-12.3.0-ce.0.el7.x86_64.rpm
基础配置和首次登陆准备
修改配置文件
vim /etc/gitlab/gitlab.rb
# 修改
external_url 'http://192.168.1.1' # 生产环境中使用公司域名
重新编译配置文件并启动
gitlab-ctl reconfigure # 第一次需要很长时间
gitlab-ctl start # 启动gitlab
登陆到Web管理界面设置的登录密码
http://192.168.1.1
默认用户为root
登录成功
配置gitlab的邮件报警系统
vim /etc/gitlab/gitlab.rb
# 取消注释并修改
56行:gitlab_rails['gitlab_email_from'] = '841597730@qq.com'
559行--568行
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com" # 邮箱服务器地址
gitlab_rails['smtp_port'] = 25 # smtp端口号
gitlab_rails['smtp_user_name'] = "841597730@qq.com" # 本人邮箱地址
gitlab_rails['smtp_password'] = "" # 邮箱授权码,获取授权码方式自行百度
gitlab_rails['smtp_domain'] = "qq.com" # gamil的域名
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false # 邮件安全加密
每次修改完配置文件都要重新配置并重启
gitlab-ctl reconfigure
gitlab-ctl restart # 重新启动gitlab
测试邮件配置
gitlab-rails console # 进入gitlab的shell环境,有点慢
irb(main):001:0> Notify.test_email('收件人','标题','正文').deliver_now
GitLab数据备份恢复
备份所有数据
gitlab-rake gitlab:backup:create # 创建备份
/var/opt/gitlab/backups/ # 备份数据的存放目录
恢复数据
gitlab-ctl stop unicorn # 停止托管功能
gitlab-ctl stop sidekiq # 停止消息队列功能
# 为了防止数据紊乱
gitlab-rake gitlab:backup:restore \
BACKUP=/var/opt/gitlab/backups/1583575461_2020_03_07_12.3.0
# 恢复时会先将数据全部清除,在恢复数据
# 成功后将停止的组件重新启动
gitlab-ctl start unicorn
gitlab-ctl start sidekiq
管理员用户忘记密码
gitlab-rails console
irb(main):001:0> user = User.where(id:1).first # 用户id
=> #<User id:1 @root>
irb(main):002:0> user.password='12345678'
=> "12345678"
irb(main):003:0> user.save
irb(main):004:0> exit
新建GitLab用户
使用管理员登录到GitLab,进入管理界面
使用以下方式创建2个用户
创建组
只需要填写一个组名即可
将用户加入组
新建项目
使新项目为组使用有权限
查看项目地址,点击左上角的logo回到首页,进入项目
以下两处为http地址和ssh地址
在本机端添加生产密钥对
[root@192 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:tizjSgJs2RyHhAFis6+3jS4BIQnMKcb9MX6XTzO5H6g root@192.168.1.1
The key's randomart image is:
+---[RSA 2048]----+
|X==. |
|BB+..o |
|+o oo.o . . |
|o = oo . o = |
|o+ + . S o = |
|.o. o . + . |
| .o.. o o . . . |
| ..o+. o E . |
| o+.o. |
+----[SHA256]-----+
[root@192 ~]# cat /root/.ssh/id_rsa.pub
将公钥信息放到GitLab的页面中
然后就可以在本地开始操作,创建本地代码仓库
mkdir /xiangmuming # 创建本地项目目录
cd /xiangmuming/
git init # 初始化目录
git config --global user.email "mupeifeiyi@gmail.com" # 配置使用邮箱,能够在知道是谁上传的代码
git config --global user.name "feiyi" # 配置使用用户,同上
# 将GitLab仓库中的项目ssh路径创建为本地的远程仓库
git remote add origin git@192.168.1.1:mupeifeiyi/xiangmuming.git
echo 123 >> cyj.txt # 在本地项目中,假装有一个代码文件
git add cyj.txt # 添加到暂存区
git commit -m "cyj" # 提交到本地仓库
git push origin master # 上传到远程仓库
然后可以登录到GitLab查看上传之后的内容
页面中英文的解释详情,请参考:https://www.cnblogs.com/linuxws/p/10718930.html