一、简介
GitLab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。
二、Gitlib和Github区别
相同点
两个都是基于web的Git仓库,而且GitLab在使用方式上和GitHub基本上是一样的,都提供了存储、分享、发布和合作开发项目的中心化云存储场所
不同点
GitHUb同时提供公共仓库和私有仓库,但如果需要使用私有仓库,是需要收费的.GitLab让开发团队对他们的代码仓库拥有更多的控制,相比于GitHub,它有不少的特色:
允许免费设置仓库权限;允许用户选择分享一个project的部分代码;允许用户设置project的获取权限,进一步的提升安全性;可以设置获取到团队整体的改进进度;通过innersourcing让不在权限范围内的人访问不到该资源。
所以根据业务使用场景来看,私密性的话,gitlib权限管制无疑是最好的选择;而面对于开源的话,github则是最好的选择。这个我们根据实际情况而定。
安装Gitlib
- 环境 centos7.6 关闭防火墙及seliunx设置(不再介绍)
- 依赖
sudo yum install -y curl policycoreutils-python openssh-server
- 安装postfix来实现邮件通知功能
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
- 配置Gitlib官网的安装脚本地址并下载安装,详情可见官网介绍 这里强调一下版本问题 我们使用CE社区版本免费 企业版本则为EE版本,若其他操作平台,请参考相对应操作系统
#添加仓库地址,根据实际情况选择
#ee版本
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
#ce版本
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
- 安装
yum intall gitlab-ce
- RPM包安装试,国内清华源镜像下载[RPM]包相对要快很多(https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
包自行安装
此时文件量比较大 所以需要时间来下载 请耐心等待直到 compete完成安装
- 访问 正常来说,执行完这步之后,会帮我们安装和自动配置GitLab相关的信息的.如果没有启动GitLab可以再执行一下这句命令。 请初始化配置,如下命令,自动创建服务及数据
gitlab-ctl reconfigure
直接初始完成
- 502报错,如图,此时请重启服务
sudo gitlab-ctl restart
查看gitlab启动状态,gitlab-ctl status查看状态,如果没有报错,那么请查看内存使用情况,如有变动说明gitlab仍在启动中,请耐心等候
[root@k8s ~]# gitlab-ctl status
run: alertmanager: (pid 7017) 115s; run: log: (pid 7013) 115s
run: gitaly: (pid 6956) 116s; run: log: (pid 6955) 116s
run: gitlab-monitor: (pid 6993) 115s; run: log: (pid 6992) 115s
run: gitlab-workhorse: (pid 6980) 115s; run: log: (pid 6979) 115s
run: grafana: (pid 7018) 115s; run: log: (pid 7016) 115s
run: logrotate: (pid 7009) 115s; run: log: (pid 7008) 115s
run: nginx: (pid 7010) 115s; run: log: (pid 6982) 115s
run: node-exporter: (pid 6986) 115s; run: log: (pid 6981) 115s
run: postgres-exporter: (pid 7015) 115s; run: log: (pid 7012) 115s
run: postgresql: (pid 6966) 116s; run: log: (pid 6965) 116s
run: prometheus: (pid 7014) 115s; run: log: (pid 7011) 115s
run: redis: (pid 6985) 115s; run: log: (pid 6984) 115s
run: redis-exporter: (pid 6987) 115s; run: log: (pid 6983) 115s
run: sidekiq: (pid 6958) 116s; run: log: (pid 6957) 116s
run: unicorn: (pid 14764) 1s; run: log: (pid 6994) 115s
[root@k8s ~]# free -m
total used free shared buff/cache available
Mem: 5699 1723 2817 72 1158 3621
Swap: 0 0 0
[root@k8s ~]# free -m
total used free shared buff/cache available
Mem: 5699 1920 2620 72 1158 3424
Swap: 0 0 0
[root@k8s ~]# free -m
total used free shared buff/cache available
Mem: 5699 1943 2597 72 1158 3401
Swap: 0 0 0
稍等片刻 设置密码后 以root用户登陆
系统邮件配置
目的,系统配置邮箱使用stmp发送创建帐号信息等,如:创建帐号后发送用户密码初始设置页面到用户或用户有变更时会出现类似情况
SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: unknown protocol)
若报错则为ssl配置问题,因本次我们未使用https域名所以此项则不配置,具体操作如下
vim /etc/gitlab/gitlab.rb
找到如下设置
### Email Settings
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.XXX.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "XXX@XXX.com"
gitlab_rails['smtp_password'] = "your password"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false #这里是否使用ssl协议,本次因未配置ssl域名,这里我们设置为false
gitlab_rails['smtp_openssl_verify_mode'] = 'none' #如上同理
gitlab_rails['smtp_domain'] = "mail.XXX.com"
gitlab_rails['gitlab_email_from'] = 'XXX@XXX.com'
保存后
gitlab-ctl reconfigure #重启配置
gitlab-ctl restart
gitlab-rails console #测试邮件
Notify.test_email(‘接收方邮件地址’,‘邮件标题’,‘邮件内容’).deliver_now
Notify.test_email('xxx@XXX.com','hello','hello').deliver_now
-
当创建用户或用户信息变更时,系统邮件将会发送邮件通知用户
汉化
请注意对应版本信息 如不清楚gitlab版本以及git,请不要操作,否则gitlab瘫痪!
[root@k8s ~]# sudo cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
12.2.4
- 下载汉化包 注意补丁包版本一定要与gitlab的版本一致,以下直接下载的是gitlab-12-2稳定版的。
wget https://gitlab.com/xhang/gitlab/repository/12-2-stable-zh/archive.tar.bz2 -O gitlab-12-2-stable-zh.tar.bz2
或
git clone https://gitlab.com/xhang/gitlab.git
-rw-r--r-- 1 root root 2231640 Sep 4 14:33 gitlab-12-2-stable-zh.tar.bz2
- 解压
[root@k8s ~]# tar xf gitlab-12-2-stable-zh.tar.bz2
[root@k8s home]# mv gitlab-12-2-stable-zh-d492132c9775663063d2438cbc674e14cda3bd25/ gitlab-12-2-stable-zh
[root@k8s home]# cat gitlab-12-2-stable-zh/VERSION
12.2.0
- 备份原有配置
[root@k8s home]# cp -r /opt/gitlab/embedded/service/gitlab-rails{,.ori}
- 复制并覆盖配置文件
[root@k8s home]# cp -rf gitlab-12-2-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/
cp: overwrite ‘/opt/gitlab/embedded/service/gitlab-rails/app/controllers/abuse_reports_controller.rb’? yes
cp: overwrite ‘/opt/gitlab/embedded/service/gitlab-rails/app/controllers/acme_challenges_controller.rb’? yes
这里仍提示是否覆盖 发现这是别名引起的
[root@k8s home]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
发现每次执行cp命令,其实是执行了cp -i命令的别名,因此无论怎么输入都提示是否覆盖。
修改~/.bashrc,在“alias cp='cp -i'”前添加#号注释后即可。
[root@k8s home]# vi ~/.bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
# alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
~
刷新
[root@k8s home]# source ~/.bashrc
仍不生效的话,请在命令前加上“\”
[root@k8s home]# \cp -rf gitlab-12-2-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/
cp: cannot overwrite non-directory ‘/opt/gitlab/embedded/service/gitlab-rails/log’ with directory ‘gitlab-12-2-stable-zh/log’
cp: cannot overwrite non-directory ‘/opt/gitlab/embedded/service/gitlab-rails/tmp’ with directory ‘gitlab-12-2-stable-zh/tmp’
这里的错误,忽略,因为之前已经设置gitlab的root密码了
- 重新配置gitlab
[root@k8s home]# gitlab-ctl reconfigure
- 重置gitlab
[root@k8s home]# gitlab-ctl restart
ok: run: alertmanager: (pid 26363) 0s
ok: run: gitaly: (pid 26378) 0s
ok: run: gitlab-monitor: (pid 26400) 0s
ok: run: gitlab-workhorse: (pid 26417) 1s
ok: run: grafana: (pid 26426) 0s
ok: run: logrotate: (pid 26443) 1s
ok: run: nginx: (pid 26451) 0s
ok: run: node-exporter: (pid 26537) 0s
ok: run: postgres-exporter: (pid 26547) 1s
ok: run: postgresql: (pid 26561) 0s
ok: run: prometheus: (pid 26571) 1s
ok: run: redis: (pid 26584) 0s
ok: run: redis-exporter: (pid 26589) 1s
ok: run: sidekiq: (pid 26597) 0s
ok: run: unicorn: (pid 26609) 1s
[root@k8s home]#
-
进入界面,请耐心等待,仍会出502错误提示。此时界面已不再是英文,可见汉化成功,耶~~~
Gitlab基本命令
sudo gitlab-ctl start # 启动所有 gitlab 组件;并加入开机启动项里面:/etc/rc.local
sudo gitlab-ctl stop # 停止所有 gitlab 组件;
sudo gitlab-ctl restart # 重启所有 gitlab 组件;
sudo gitlab-ctl status # 查看服务状态;
sudo gitlab-ctl tail # 查看日志;
安装GitLab服务器配置注意事项,502很大程度上是因为CPU、内存耗尽导致
安装硬件需求
CPU
1 核心CPU最多支持100个用户,所有的workers和后台任务都在同一个核心工作这将导致GitLab服务响应会有点缓慢。
2核心 支持500用户,这也是官方推荐的最低标准。
4 核心支持2,000用户。
8 核心支持5,000用户。
16 核心支持10,000用户。
32 核心支持20,000用户。
64 核心支持40,000用户。
如果想支持更多用户,可以使用 集群式架构
Memory
安装使用GitLab需要至少4GB可用内存(RAM + Swap)! 由于操作系统和其他正在运行的应用也会使用内存, 所以安装GitLab前一定要注意当前服务器至少有4GB的可用内存. 少于4GB内存会导致在reconfigure的时候出现各种诡异的问题, 而且在使用过程中也经常会出现500错误.
1GB 物理内存 + 3GB 交换分区 是最低的要求,但我们 强烈反对 使用这样的配置。 查看下面unicorn worker章节获取更多建议。
2GB 物理内存 + 2GB 交换分区 支持100用户,但服务响应会很慢。
4GB 物理内存 支持100用户,也是 官方推荐 的配置。
8GB 物理内存 支持 1,000 用户。
16GB 物理内存 支持 2,000 用户。
32GB 物理内存 支持 4,000 用户。
64GB 物理内存 支持 8,000 用户。
128GB 物理内存 支持 16,000 用户。
256GB 物理内存 支持 32,000 用户。
如果想支持更多用户,可以使用 集群式架构
即使你服务器有足够多的RAM, 也要给服务器至少分配2GB的交换分区。 因为使用交换分区可以在你的可用内存波动的时候降低GitLab出错的几率。
注意: Sidekiq的25个workers在查看进程(top或者htop)的时候会发现它会单独显示每个worker,但是它们是共享内存分配的,这是因为Sidekiq是一个多线程的程序。 详细内容查看下面关于Unicorn workers 的介绍。
注意事项
一、首先看看配置文件/etc/gitlab/gitlab.rb 中的端口号是否被占用
二、另外一个原因是gitlab占用内存太多,导致服务器崩溃
内存问题 解决办法,启用swap分区,步骤如下:
cat /proc/swaps 查看swap分区是否启动(无)
创建 :
dd if=/dev/zero of=/data/swap bs=512 count=8388616
创建swap大小为bs*count=4294971392(4G);
通过mkswap命令将上面新建出的文件做成swap分区
mkswap /data/swap
查看内核参数vm.swappiness中的数值是否为0,如果为0则根据实际需要调整成60
查看: cat /proc/sys/vm/swappiness
设置: sysctl -w vm.swappiness=60
若想永久修改,则编辑/etc/sysctl.conf文件,改文件中有vm.swappiness变量配置,默认为0
启用分区
swapon /data/swap
echo “/data/swap swap swap defaults 0 0” >> /etc/fstab
再次使用cat /proc/swaps 查看swap分区是否启动
重启gitlab。
卸载gitlab
- 清理命令
sudo gitlab-ctl uninstall
sudo gitlab-ctl cleanse
sudo gitlab-ctl remove-accounts
- 停止gitlab
gitlab-ctl stop
- 卸载gitlab
rpm -e gitlab-ce
- 查看进程
ps aux | grep gitlab
kill -9 xxx
杀掉守护进程
- 清理残余文件
find / -name gitlab | xargs rm -rf