WindowsServer2019下使用Docker搭建内网GitLab

文章目录

  • 导读
  • 需求文档说,要有域名。
    • 第一次尝试
    • 第二次尝试
    • 第三次尝试
  • DNS配置
    • 一定要优先设置域!
    • 哪怕你是管理员也不准改的文件!
  • 绑定域名
  • 测试访问
  • 配置DNS
    • Windows所有版本通用的方法
    • Ubuntu的方法
  • 图片服务器搭建
  • Docker
    • 坑一:文件映射
    • 坑二:文件共享
    • 坑三:Docker无法启动
    • 坑四:404
    • 坑五:提交代码
  • 最后补充说明

导读

由于实验室并不完全是做的开源项目,也有一些需要签订保密协议的项目。所以,实验室的内网GitLab相当有必要了。

如果是一直在关注我的读者应该注意到了,之前也发过在Windows10系统中使用Docker搭建GitLab的文章:点击这里传送,但是Server版本的Windows有着更严格的文件系统、用户系统、远程协作等等内容,比起一般的配置来说真的要复杂很多。

于是,噩梦开始了。

需求文档说,要有域名。

开幕雷击

有多少人一看到这个小标题就蒙圈了?

先说好,哪怕你用的是Windows20H2专业工作站版,也是不能设置域名的。因为,工作站是工作站是不能当服务器用的啊

如果你稍微有一点点小公司工作经验,你应该知道有群晖NAS这玩意。但是,基本款就是 ¥ 2700 ¥2700 2700以上,虽然实验室可以报销,但是对于学生群体来说,第一眼看到这个数字还是会心理强烈抗拒。

最终,本着白嫖至上的原则,我还是选择了自己在内网建立DNS服务器,通过正向查找来绑定一个临时的域名。

既然这样那为什么还要使用域名而不是IP?那当然是因为域名可以是更容易记忆的,而IP就像朋友家的WIFI密码一样奇葩。

当然,这是开卷考试,所以我直接百度了。

第一次尝试

一开始我发现了Bind9,有很多人用这个搭建内网的DNS。但是,这一大堆的named.confnamed.rev啥的,这都是什么鬼啊,莫名其妙的IP、省略步骤的配置,让我这个小白相当难受。

更让我崩溃的是,明明最新的更新是 2021.3 2021.3 2021.3,教程中提到的界面却相当的古老,使用之后也总是失败。所以,放弃了。

第二次尝试

既然Bind9用不了,Linux Server总该可以吧?我虽然Windows不太行,Linux可是刚刚的啊!别小看我啊!

于是我选择了Centos8-Everything,把所有的东西全都给装上去!

为了保证不失败,我还使用YUMI多启动U盘制作器再写进了一个ubuntu-server。看起来万无一失了!进BIOS更改启动顺序!

You need to start kernel first.

好嘛,主板不支持Linux。欲哭无泪。

第三次尝试

所以,我还是换回了Windows Server,使用这里面的DNS配置。直到这个时候,我才意识到:

DNS需要一个静态IP,而学校的校园网只能使用动态IP,否则无法上网。并且,由于和学校签的协议,学校不允许私自牵网线。为了达到目的,也只能在IP每变动一次就人工处理一次了。

没有办法也是唯一的办法。

总之接下来的思路就是:使用Windows Server的服务管理器创建一个DNS,然后使用正向查找,让其他主机在访问内网DNS的时候发现对照表中这个域名,并自动转到对应的IP地址。这些大学计算机网络的内容我就不再多说了。下面开始详细说明。

DNS配置

Windows Server中,DNS是需要有一个的。而域的搭建就需要一个AD DS也就是Active Dierctory域服务器

对于刚刚安装好的Windows Server来说,需要添加一些功能。由于我已经装过了,无法复现,所以在这里给出我认为相当完备的教程:点击这里传送

虽然这篇文章是Windows Server 2012R,但是说实话,从 2012 R 2012R 2012R一直到 2019 2019 2019的所有版本全都是一样的,就连UI界面都神似。

另外,这篇教程并不需要完全照做,因为我们的目的只是搭建域而已,所以我们就一直看到第四项AD搭建完毕为止就好了。

一定要优先设置域!

不然的话,在其他服务器进程已经启动之后的话AD DS将无法再启动。如果你想简单点那就直接重装吧,但如果不想重装直接修复,那就只能使用命令行一点点把冲突的内容删除掉,等AD DS启动之后再装回去。我虽然找到了教程,但是现在已经找不到了,所以没能贴上来。遇到了的读者可以在评论区补充,但我还是希望各位不要遇到这个问题。

哪怕你是管理员也不准改的文件!

下面这张图片摘自【CSDN用户Ivan_fay】的文章《Windows server 2012 R2 双AD域搭建(AD+DHCP+DNS)》

文件路径

如果你曾经因为一些原因不得不重装,但是刚刚好这些缓存路径又刚刚好在独立于系统盘的磁盘上,你就想利用一下。

但是,曾经的这些文件是不会让你修改的!因为这些文件都是上一个系统的管理员才有的权限,你现在的管理员管不着。所以,如果继续沿用这些路径将会安装失败

绑定域名

有了内网DNS之后,一切就好说了。在配置好了DNS之后,所有的电脑就能够先在实验室里的这台Windows Server中查找IP和域名的对应关系,然后通过内网域名访问内网服务器中的所有内容。

那就来嘛。

首先我们点进去看看Windows Server里的DNS。从这里进去:

WindowsServer2019下使用Docker搭建内网GitLab_第1张图片

点击之后就会跳到下面这个界面:

WindowsServer2019下使用Docker搭建内网GitLab_第2张图片

点开之后便能看见下面这个界面:

WindowsServer2019下使用Docker搭建内网GitLab_第3张图片

接下来就开始操作:

WindowsServer2019下使用Docker搭建内网GitLab_第4张图片

弹出了新的界面:

WindowsServer2019下使用Docker搭建内网GitLab_第5张图片

填入名称和IP就好了。

在这里,我的名称设置为server,那么服务器就能够使用server.322lab.kust.cn进行访问。

IP地址就写服务器的IP,因为是域名解析,所以需要把访问服务器的域名和访问服务器IP对应起来。

于是就有了:

WindowsServer2019下使用Docker搭建内网GitLab_第6张图片

别看这里虽然写的是静态,实际上只是因为你输入的IP是静态的,校园网那边还是会定时动态分配。

到这里就快结束了。等等,为什么我要说快结束而不是就结束

测试访问

万众期待的测试环节开始了。生死有命,富贵在天。如果你是Windows操作系统,那就win+R呼出运行窗口,输入cmd回车,打开命令行;

同样的,如果你是Linux操作系统,使用Ctrl+Alt+T呼出终端;

然后就开始测试:

ping server.322lab.kust.cn

其中 10.42.1.87 10.42.1.87 10.42.1.87是服务器的IP地址。

然后,你就会发现:

Winodws下提示请求找不到主机Ubuntu下显示Temporary failure in name resolution

心态炸了?

配置DNS

虽然说服务器和所有想连上服务器的电脑都在校园网这个局域网下,但是DNS默认是直接奔着校园网DNS去的,而不是我们刚刚搭建的内网DNS服务器,所以我们不能在校园网的域名解析中找到我们想要的server.322lab.kust.cn

于是我们现在的目标就相当明确了:将本机的DNS指向实验室服务器。

Windows所有版本通用的方法

WindowsServer2019下使用Docker搭建内网GitLab_第7张图片

最后:

WindowsServer2019下使用Docker搭建内网GitLab_第8张图片

再次尝试:

ping server.322lab.kust.cn

得到了新的结果:

正在 Ping server.322lab.kust.cn [10.42.0.87] 具有 32 字节的数据:
来自 10.42.0.87 的回复: 字节=32 时间<1ms TTL=128
来自 10.42.0.87 的回复: 字节=32 时间<1ms TTL=128
来自 10.42.0.87 的回复: 字节=32 时间<1ms TTL=128
来自 10.42.0.87 的回复: 字节=32 时间<1ms TTL=128

10.42.0.87 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 0ms,平均 = 0ms

相信你到了这一步你应该会高兴地跳起来跑到厕所里打一套军体拳。

Ubuntu的方法

在网上看到了很多的教程,比如修改/etc/network/interfaces等等各种奇奇怪怪的配置文件,不是不能修改就是干脆就没这个文件。

这里给出一条众多教程中唯一适用Ubuntu20.10版本的配置方法。

首先安装resolvconf

sudo apt-get install resolvconf -y

安装成功后,会出现/etc/resolvconf文件夹,不出意外的话,你应该能够找到这样一个文件:/etc/resolvconf/resolv.conf.d/base

我们来修改这个文件:

nameserver 10.42.0.87
nameserver 222.197.198.33

按下:x或者:wq保存。至于使用/etc/init.d/resolvconf restart什么的,都是假的,没有用。真正有用的是:reboot命令,也就是重启。

最后,我们就成功了!

sakebow@mikufans:~$ ping server.322lab.kust.cn
PING server.322lab.kust.cn (10.42.0.87) 56(84) bytes of data.
64 bytes from 10.42.0.87 (10.42.0.87): icmp_seq=1 ttl=127 time=2.59 ms
64 bytes from 10.42.0.87 (10.42.0.87): icmp_seq=2 ttl=127 time=2.50 ms
64 bytes from 10.42.0.87 (10.42.0.87): icmp_seq=3 ttl=127 time=2.53 ms
64 bytes from 10.42.0.87 (10.42.0.87): icmp_seq=4 ttl=127 time=2.49 ms
64 bytes from 10.42.0.87 (10.42.0.87): icmp_seq=5 ttl=127 time=67.6 ms
64 bytes from 10.42.0.87 (10.42.0.87): icmp_seq=6 ttl=127 time=2.50 ms
64 bytes from 10.42.0.87 (10.42.0.87): icmp_seq=7 ttl=127 time=14.5 ms
^C
--- server.322lab.kust.cn ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6009ms
rtt min/avg/max/mdev = 2.492/13.526/67.589/22.453 ms

到这里,最基础的服务就全部搭建完成了。

图片服务器搭建

说到图片服务器,你们想到的应该就是nginx,如果再有些能够传输数据的接口的话应该就是fastdfs了吧?其实也没问题。但是,Windows Server其实是提供了服务的,也就是IIS。如果有需要的话,也可以使用IIS搭建一个ASP或者是WinForm网站给外面的人看看,虽然你可能看不上这些老掉牙的技术,但国企到现在还是很喜欢这种便宜、快速而且适用于Windows的平台。

由于nginx在配置分布式、动静结合和域名映射的时候相当有优势,所以这里显得有点派不上用场,就不说了。更何况,nginxWindows的支持其实不太友好,配置起来比较烦;而nginx有专门的/etc/nginx/conf.d文件夹进行拓展,相当方便。

所以,在Windows Server中最好还是使用IIS,更何况IIS能够使用更丰富的UI进行配置,也不算什么反人类应用。

当然,配置也很简单。还是一样的服务管理器,选择添加角色和功能,一直到服务器角色这一栏,勾选这些内容:

WindowsServer2019下使用Docker搭建内网GitLab_第9张图片

然后一路确认就好了。

等功能成功启动之后,会默认在C:\inetpub文件夹下创建资源文件夹:

WindowsServer2019下使用Docker搭建内网GitLab_第10张图片

为了设置路径,我们要找到IIS管理器,然后进行如下设置:

WindowsServer2019下使用Docker搭建内网GitLab_第11张图片

然后使用我们的域名和里面的测试文件进行测试:

WindowsServer2019下使用Docker搭建内网GitLab_第12张图片

于是就这样成功了。

往后需要添加什么图像、视频之类的静态资源可以直接放进去。当然,到目前并没有一个上传入口,所以只能远程复制粘贴,或者亲自到这台电脑上复制粘贴

如果以后还是需要使用dotNet以外的手段实施应用软件的话,那就得要使用nginx以实现更精细的要求了,比如动静结合、负载均衡等等。

Docker

终于,到了今天的主角了。由于之前已经说过如何在普通的Windows系统中使用Docker配置GitLab,这里也就不再赘述。重点讲解在搭建的时候遇到的坑。

不得不说,在这方面遇到的坑实在是太多了。现在,我将一一说明我所遇到的坑。

坑一:文件映射

Windows Server有着更为严格的权限系统,无论是以什么角色登录、登录到本机还是登录到刚刚创建的域,如果使用的是GitLab都完全没有办法进行文件共享

虽然GitLab官方给出了解决办法:

docker exec -it ${gitlab-container-id} update-permissions

但尴尬的是:你尽管用能开通文件共享算我输

于是我一点办法都没有,只能放弃了文件共享

如果你想看着稍微好过点,那就使用docker创建一两个虚拟文件夹:

docker volume create gitlab-data

然后在映射的时候就可以:

# docker-compose.yml文件中
volumes:
  - gitlab-data:/var/opt/gitlab
# shell命令硬刚
-v gitlab-data:/var/opt/gitlab

至于gitlab-data具体跑到了物理机器的哪里呢?大概只有上帝知道。你可能听过inspect命令查看docker创建的volume,但好像并不能尽如人意:

$ docker volume inspect gitlab-data
[
    {
        "CreatedAt": "2021-04-14T06:30:38Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/gitlab-data/_data",
        "Name": "gitlab-data",
        "Options": {},
        "Scope": "local"
    }
]

看起来并没什么卵用。

坑二:文件共享

如果你在创建容器的时候使用了文件映射,那么Windows Server便会在左下角弹出通知,让你选择是否允许容器创建文件映射。一般都是创建了之后立马点击确认,然后就可以愉快使用了。

但,并不是所有人都会按照说明书进行操作。

你可能在使用docker pull拉取镜像之前就直接docker-compose,然后就陷入了漫长的下载等待。于是,你玩了一把在线多人协作游戏。很快四十分钟过去了,然后你回过头来看早就已经下好的镜像,和一大堆错误输出,其中的核心就是:

Filesharing has been canceled

由于我当时遇到这个问题的时候服务器的Docker刚刚好直接卡死了,就只能重启了。

坑三:Docker无法启动

一开始我还以为是Docker崩了,可是等我重装系统之后我才发现:是源失效导致的Docker无法启动。

唯一指定安全可用的源:网易

也就是说,在registry-mirrors里面设置http://hub-mirror.c.163.com

中科大的源不知道为什么粘进去直接崩掉了,也可能是只有我有这个问题。如果你也遇到了这样的奇葩问题,可以考虑换一下源看能不能启动。

坑四:404

因为Windows Server是默认开启了防火墙的,所以对于其他设备并不能随意地通过端口进行HTTP或者HTTPS访问。

如果你希望简单粗暴一点,那就直接关掉防火墙。虽然听起来安全性很差,实际上有还不如没有。

如果你希望认真负责一点,那就在防火墙的入站规则中添加相应的端口。如果端口相当多的话,工作量也会相当大。

坑五:提交代码

由于平常在GitHub提交代码已经养成习惯了,所以就随手用上了SSH提交。

但是,不知道为什么,无论如何都没办法对上GitLab库,所以最后还是改成了HTTP提交。唯一的区别就是HTTP提交需要输入账号和密码,而SSH提交只需要设置一次本机生成的密钥就好了。

对于那些修改了hostname的同学们,你们可能更悲催。因为连着IP和域名一起被屏蔽成了hostname。比如我的容器叫gitlab,其中有个playground项目,在网页上显示的地址就是git@gitlab/playground.git。如果你不知道你在什么群组、在哪个IP或者域名,那你永远别想进去

最后补充说明

这几天的长时间运转之后,发现电脑性能也很影响服务器的效率。目前实验室里很陈旧的设备在不关机连续运行了一周之后出现了没有办法解决的闪退卡顿甚至卡死等现象。所以,如果各位需要创建服务器的话尽量使用更好的设备以满足更高的要求和更长时间的续航。

你可能感兴趣的:(docker,linux,gitlab,docker,docker-compose)