在搭建 Gitlab 之前,请先思考以下几个问题:为什么会选择 git 而不用 svn?应该选择哪种适合自己或团队的 git 服务器?想要搭建 Gitlab 是否因各种难题甚至想要放弃?
有时候我们不想把代码托管在外网上,想在内网搭建一个 git 服务器,该如何选择呢?
可能大家会从团队人数、硬件等方面考虑,我选择 Gitlab 的原因是它有非常美观的 web 界面,而且功能很强大。但是搭建起来有点麻烦,尤其是在 Windows 上。
在 Windows 中搭建 Gitlab 可能并非一件易事。
第一种方法是通过docker,首先安装docker for windows,接下来在docker中搭建gitlab,参考这里。
在网上有很多教程,比如这篇:win10企业版在docker上部署gitlab,按照教程一步一步确实是可以运行 Gitlab 并且可访问的。
然而,这种方式是存在风险的。Gitlab官方文档中并不推荐,主要因为存储权限和其它一些未知问题,最严重的是它不支持持久化存储,当你的服务器重启之后,Gitlab 中的所有数据都会丢失。而且我没有找到好的解决办法。
所以,这种方法目前是不可取的。
第二种方法是通过在虚拟机中运行一个 Linux 系统来搭建 Gitlab,我使用的是 VMware + CentOS。
该方法主要分为3步:
- 在 VMware 中安装 CentOS 系统
- 在 CentOS 中安装 Gitlab
- 网络配置,使得局域网内可访问 Gitlab
下面将对这3个步骤作详细介绍——
-
自定义硬件
增加内存到2G
调整处理器数目
网络连接可选择桥接模式,也可以选择NAT模式。在后面需进行配置
删除声卡选项
其它不变
-
完成安装,重启
至此,CentOS便安装成功了。
在 CentOS 等 Linux 系统中安装 Gitlab,可参考官方教程。下面是一些详细说明:
安装 ssh
sudo yum install -y curl policycoreutils-python openssh-server需要注意的是policycoreutils-python在 CentOS 8 中变成了python3-policycoreutils,所以目前在 CentOS 8 中是无法直接安装 Gitlab 的。
将ssh服务设为开机自启动
sudo systemctl enable sshd开启ssh服务
sudo systemctl start sshd安装防火墙,如果已安装了防火墙,则可跳过这一步
yum install firewalld systemd -y开启防火墙
service firewalld start将 http 和 https 添加到防火墙,permanent 表示永久生效
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https重启防火墙
sudo systemctl reload firewalld接下来,安装 Postfix 用来发送通知邮件。如果你想使用其它方法来发送邮件,可以跳过这个步骤,并在 Gitlab 安装完成后配置 SMTP 服务。
以下分别是安装、设为自启动以及开启。
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
在这里,我们需要通过 wget 来下载 Gitlab安装包,如果 wget 没有安装,则可通过下面的命令安装:
yum -y install wget此外,你可能还需要安装 vim,因为后面需要修改 Gitlab的配置文件:
yum install vim -y
接下来是下载 Gitlab 安装包,到官网可以下载最新的安装包。
为了保证下载速度,可以从清华大学开源软件镜像站下载,但不是最新的。
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.11.8-ce.0.el7.x86_64.rpm安装 Gitlab
rpm -i gitlab-ce-11.11.8-ce.0.el7.x86_64.rpm等待 Gitlab安装完成后,终端界面会提示你修改 /etc/gitlab/gitlab.rb 文件,通过设置 external_url l来配置你的 URL,通常情况下是你的服务器 ip 和端口号。
vim /etc/gitlab/gitlab.rb终端界面还提示你通过下面的命令启动gitlab:
sudo gitlab-ctl reconfigure到此为止,你在 CentOS 中的浏览器输入 http://localhost 或者 ip及端口号,便可以看到 Gitlab 的页面了。
如果你的 VMware 虚拟机网络适配器选择的是“桥接模式”,那么只需在 CentOS 中设置一个静态 IP,以后局域网内便可通过该 IP 访问 Gitlab。(也许可以不用设置静态ip,我没有试过虚拟机每次重启,ip 会不会变化)。
如果你的 VMware 虚拟机网络适配器选择的是“NAT模式”,那么需要配置网络端口转发,即将主机的端口与虚拟机的端口关联起来,今后访问主机 IP 便可间接访问到虚拟机中的 Gitlab。
关于桥接模式和 NAT 模式的区别,可参考这篇文章。
在 CentOS 7 中,通过以下命令编辑IP:
vim /etc/sysconfig/network-scripts/ifcfg-ens33修改如下,注意其中加注释的几处
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static # 使用静态IP地址,默认是dhcp
IPADDR=192.168.5.122 # 设置的静态IP
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.5.2 # 网关
DNS1=192.168.5.2 # DNS服务器
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=8df5a6e0-cba0-4f89-b55c-319d2616a985
DEVICE=ens33
ONBOOT=yes
ZONE=public
注意:在 NAT 模式下,这里设置的静态 IP 网关不要与主机的网关相同。
最后,重启网络使刚才配置的IP生效
service network restart打开 VMware 菜单,编辑 - 虚拟网络编辑器 - NAT 设置。
最后,总结一下安装过程中的常见问题和解决办法
-
虚拟机无法开启,提示 VMware Workstation 15 与 Device/Credential Guard 不兼容。 解决办法:关闭 Hyper-V,参考这里。
-
yum 被其它进程占用,无法安装。 解决办法:将该进程杀掉。
-
局域网内其它电脑无法访问。 解决办法:可能需要开放 Windows 端口,参考这里。
-
Gitlab 中的时区不对 解决办法:参考这里。
-
如何汉化? 解决办法:参考这里。
在写这篇教程时,参考了如下的一些文章:






