一、概述

gitlab 是一个开源的托管 Git 的存储库。

git相关概念:
git 是一种版本控制系统,是一个命令,是一种工具
gitlib 是用于实现git功能的开发库
github 是一个基于git实现的在线代码托管仓库,包含一个网站界面,向互联网开放
gitlab 是一个基于git实现的在线代码仓库托管软件,一般用于在企业内网搭建git***
注:gitlab-ce 社区版 ;gitlab-ee是企业版,收费

二、搭建环境

1、虚拟机配置

由于 gitlab 比较吃资源,所以你要保证虚拟机给的配置应该至少是这样:

而且安装完之后就不要再打开浏览器等其他应用程序了,不然的话就会这样:

可以看到,CPU 和 RAM 全部爆红。

我当时心态崩了。

如果你还是觉得很卡可以点这里远程连接,反正都是使用命令行操作的。

2、开启防火墙

由于LInux原始的防火墙工具iptables过于繁琐,所以ubuntu默认提供了一个基于iptable之上的防火墙工具ufw

sudo  ufw enable|disable

查看防火墙的状态:

sudo ufw status


打开或关闭某个端口,例如:

//允许所有的外部IP访问本机的25/tcp (smtp)端口
sudo ufw allow smtp
//禁止外部访问smtp服务
sudo ufw deny smtp
//删除上面建立的某条规则
sudo ufw delete allow smtp

对于我们此次安装 gitlab 只需要保证这3个,请依次执行:

sudo ufw allow http
sudo ufw allow https
sudo ufw allow OpenSSH

3、安装依赖项

在我们自己安装GitLab之前,安装一些在安装过程中持续使用的软件非常重要。可以从Ubuntu的默认包存储库轻松安装所有必需的软件。

分别输入:

//刷新本地包索引
sudo apt update
//安装依赖项
sudo apt install ca-certificates curl openssh-server postfix

如果你安装的时候遇到了如下图的问题:


请参考我的这篇文章换源:换源,完了回来再继续下面的操作:

  • 安装过程会有图形界面选项,一直回车就行了

可能会让你设置一个邮箱:

//我设置成了这个,随便设置的,后面可以改,可以选择回车跳过
 wsuo@ubuntu-gitlab.com

打开HTTP和SSH端口:

 iptables -I INPUT -m tcp -p tcp --dport 22 -j ACCEPT
 iptables -I INPUT -m tcp -p tcp --dport 80 -j ACCEPT
 //如果提示你 Permission Denied 就是说权限不足,解决办法就是在前面加上 sudo
 //或者切换到管理员 : sudo su
  • 如果要卸载的话执行:
apt-get --purge remove postfix

三、安装GitLab

官方下载地址太慢了,这里我们换源:

1、首先信任 GitLab 的 GPG 公钥:

curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null

2、然后用root账户,打开vi:

sudo su
vi /etc/apt/sources.list.d/gitlab-ce.list

3、将下面的内容粘贴进去

deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu xenial main
//粘贴至文本中,按Esc键,键入:,最后输入wq保存并退出。

4、安装 gitlab-ce:

sudo apt-get update
sudo apt-get install gitlab-ce



5、打开 sshd 和 postfix 服务

service sshd start
service postfix start

6、安装完成之后启动gitlab

初次启动会比较漫长,如果电脑配置低会卡成狗。

补充:时间是超级无敌长,由你的电脑配置决定。

sudo gitlab-ctl reconfigure

7、在浏览器中打开:http://127.0.0.1。

但是不建议在虚拟机中这么做,建议先获取虚拟机的 ip 地址,然后在自己的电脑上访问,比如我的 ip 地址为 192.168.2.105 ,可以这样访问:

http://192.168.2.105

获取 ip 地址的方法:

ifconfig
//如果没有net-tools,按照他的提示安装.
//好像是这个命令
apt install net-tools

首次使用时,GitLab会提示设置密码,默认配置的是root用户的密码,设置后就可以正常使用了。


四、配置GitLab

1、配置域名地址

1、敲入vim /etc/gitlab/gitlab.rb打开文件,将external_url = 'http://git.example.com'修改成自己的 IP 或者 HostName,比如:

external_url = 'http://192.168.2.105'


以下为高级操作,小白请无视

2、配置 postfix

配置 GitLab 的发件邮箱,我们可以使用下面命令,测试发布发送邮件:

执行下面的进行命令测试发送邮件:

sudo apt-get install mailutils
echo "Test mail from postfix" ws2821@yeah.net

要等很久才能收到邮件,建议先去干别的事情。

然后过一会他会莫名其妙的有个提示:


我当时很害怕,但是又很好奇,于是我就进去看看:

vim /var/mail/root

打开之后:

把系统发件邮箱地址记下来:

我是这个:

"MAILER-DAEMON@wsuo"@ubuntu-gitlab.com

然后再打开vim /etc/gitlab/gitlab.rb文件,将gitlab_rails['gitlab_email_from'] = 'gitlab@example.com'修改为系统发件邮箱地址:

gitlab_rails['gitlab_email_from'] = '"MAILER-DAEMON@wsuo"@ubuntu-gitlab.com'


上面这些配置好之后,就可以启动 GitLab 了:

sudo gitlab-ctl reconfigure

3、配置SMTP服务

如果你觉得这样太繁琐了,可以不设置,对你的操作没有任何影响,只是接收不到邮件消息,也可以使用腾讯的邮件系统:

修改GitLab邮件服务配置(gitlab.rb文件),使用腾讯企业邮箱的SMTP服务器,填写账号和密码

gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "xxx"
gitlab_rails['smtp_password'] = "xxx"
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_authentication'] = 'plain'
gitlab_rails['smtp_enable_starttls_auto'] = true

使配置生效:

gitlab-ctl reconfigure
gitlab-rake cache:clear RAILS_ENV=production      # 清除缓存

附上常用命令:

//查看版本信息
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

//12.8.1

五、卸载GitLab

装完就后悔了,卡的都不能动,因为装完之后它默认开机自启动。好好的虚拟机被败坏成什么样了?

于是我觉得还我的 Ubuntu 一个青春亮丽的形象,把可恶的 gitlab 卸载掉:

卸载之前我们先看一下它安装到哪个位置了,因为我们是通过 apt 命令安装的,所以他会安装在 /opt 目录下,我们来看一下是不是这样子的:

我们发现这小子果然在这里,那他就死定了。

下面执行我们的灭绝计划:

1、停止运行

sudo gitlab-ctl stop

2、执行卸载命令

执行下面的命令,后重启系统

这块注意了,看看是 gitlab-ce 版本还是 gitlab-ee 版本,别写错误了

//因为我们是使用 新立得 安装的所以直接执行命令
sudo apt-get remove gitlab-ce    等价于这条命令:  sudo apt-get --purge remove gitlab-ce
//执行完这个命令就可以了,你的电脑上就卸载了这个软件,如果你想更彻底的删除,可以继续执行下面的命令
# 删除暂存的软件安装包
sudo apt-get clean gitlab-ce

删除过程中会让你输入一次 y

执行完之后再去看一看,发现原来的文件里只有 2M 了:

3、查看 gitlab 进程

ps -ef|grep gitlab


杀死第一个进程:

kill -9 8922

然后在查看就没有了。

4、删除 gitlab 文件

//删除所有包含gitlab的文件及目录
find / -name gitlab|xargs rm -rf 

删除gitlab-ctl uninstall时自动在root下备份的配置文件:

cd /root
rm -rf /root/gitlab然后按tab自动补全

比如我的是:

root@ubuntu:~# rm -rf gitlab-cleanse-2020-02-29T08\:43/

六、遇到的问题

1、gitlab安装报错

执行sudo apt-get install gitlab-ce时报错:

文字信息如下:

There was an error running gitlab-ctl reconfigure:

gitlab_sysctl[kernel.shmmax] (postgresql::enable line 67) had an error: Mixlib::ShellOut::ShellCommandFailed: execute[load sysctl conf kernel.shmmax] (/opt/gitlab/embedded/cookbooks/cache/cookbooks/package/resources/gitlab_sysctl.rb line 46) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '255'
---- Begin output of sysctl -e --system ----
STDOUT: * Applying /etc/sysctl.d/10-console-messages.conf ...
kernel.printk = 4 4 1 7
* Applying /etc/sysctl.d/10-ipv6-privacy.conf ...
net.ipv6.conf.all.use_tempaddr = 2
net.ipv6.conf.default.use_tempaddr = 2
* Applying /etc/sysctl.d/10-kernel-hardening.conf ...
kernel.kptr_restrict = 1
* Applying /etc/sysctl.d/10-link-restrictions.conf ...
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /etc/sysctl.d/10-magic-sysrq.conf ...
kernel.sysrq = 176
* Applying /etc/sysctl.d/10-network-security.conf ...
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.all.rp_filter = 2
* Applying /etc/sysctl.d/10-ptrace.conf ...
kernel.yama.ptrace_scope = 1
* Applying /etc/sysctl.d/10-zeropage.conf ...
vm.mmap_min_addr = 65536
* Applying /usr/lib/sysctl.d/30-tracker.conf ...
fs.inotify.max_user_watches = 65536
* Applying /usr/lib/sysctl.d/50-default.conf ...
net.ipv4.conf.all.promote_secondaries = 1
net.core.default_qdisc = fq_codel
* Applying /etc/sysctl.d/90-omnibus-gitlab-kernel.sem.conf ...
* Applying /etc/sysctl.d/90-omnibus-gitlab-kernel.shmall.conf ...
* Applying /etc/sysctl.d/90-omnibus-gitlab-kernel.shmmax.conf ...
kernel.shmmax = 17179869184
* Applying /etc/sysctl.d/90-omnibus-gitlab-net.core.somaxconn.conf ...
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.d/protect-links.conf ...
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /etc/sysctl.conf ...
STDERR: sysctl: cannot open "/etc/sysctl.d/90-omnibus-gitlab-kernel.sem.conf": 没有那个文件或目录
sysctl: cannot open "/etc/sysctl.d/90-omnibus-gitlab-kernel.shmall.conf": 没有那个文件或目录
sysctl: cannot open "/etc/sysctl.d/90-omnibus-gitlab-net.core.somaxconn.conf": 没有那个文件或目录
---- End output of sysctl -e --system ----
Ran sysctl -e --system returned 255

全是红色的,我当时吓坏了。

去GitLab论坛找到了解决方案:

touch /opt/gitlab/embedded/etc/90-omnibus-gitlab-kernel.sem.conf
touch /opt/gitlab/embedded/etc/90-omnibus-gitlab-net.core.somaxconn.conf

2、启动502

我服了,本来好好的,突然莫名其妙就502了,我猜想是 timeout 的问题,去配置文件里找到它设置时间长一点应该就好了:

1、打开文件:

vim /etc/gitlab/gitlab.rb

2、修改时间

找到这两个地方:

gitlab_rails[‘webhook_timeout’] = 90
gitlab_rails[‘git_timeout’]=90

3、更新配置文件

sudo gitlab-ctl reconfigure

然后我修改完上述文件就好了,如果你还不行?

试试修改端口:

unicorn['port'] = 8888

gitlab_workhorse['auth_backend'] = "http://localhost:8888" 

注意:unicorn['port']与gitlab_workhorse['auth_backend']的端口必须相同

如果你还不行,请回去执行第五步-卸载-重装。