基于树莓派搭建轻量化的私有DveOps系统

前言:

关键字:Raspberry Pi、FileBrowser、Gitea、Jenkins、Nginx、Registry、SSHWifty、V2Ray;

已经很久没写文章了,主要是工作实在是太忙了,回到家就只想睡了;另一方面是懒,搭建并写这些东西实在是太花时间了!!!其实这一个新年,博主很早就休假了,于是博主计划是写点什么的,不过这假期,博主实在是放飞了自我,足足打了一个假期的游戏……当然,期间其实并不是什么也没做的;假期间拿到了一间已倒闭的创业公司[政策原因]的棋牌源码,本想搭起来给朋友私人玩玩的。花了几天时间看部署文档,没搭起来,有几方面原因:一、部署文档实在是写得太烂了,TXT文本还乱,据说是开发兼职运维/架构写的文档;二、代码是两年前的,很多软件源、依赖什么的,都过时了,要搭建起来,要查很多资料;三、这其实是主要的原因,朋友说,微信上有免费的……;于是吧,这花了几天时间;

当然,其实游戏服务器能不能搭建起来对读者来说没什么影响,因为游戏服务器即使搭建起来了,我也不会特别写一篇博文的。实际上呢,自从树莓派8G版出来后,博主一直是想升级一下自己的私有服务器的;为了能尽量利用树莓派8G的性能,博主希望在上面跑更多的服务,于是吧,DevOps系统,应该是最好的选择了。之后,就是DveOps系统的搭配了,博主是试过GitLab、Harbor这类系统的,后来发现,这些东西实在是太重量级了,运行了一堆服务,私人使用,不实际还浪费资源[其实也只是多一点电而已]……于是,博主在找一些轻量化的代替。找是找到了很久了,单独部署还好,但要把它们整合在一起,实在是麻烦啊,各有各的部署要求;搭建时确定了一种部署方案,结果却发现和后面的服务的部署要求产生了冲突,于是,又再一次的修改整合方……

废话博主是很喜欢说的,现在说完了,这个DevOps系统有什么?见上面的关键字。这套系统,博主提供的模板,是以局域网内使用的为示例的,当然,这是可以用于公网的!!!博主怎么可能会花时间搭建一套只能在局域网内使用的系统。之所以以局域网为示例,这也是无奈啊,要公网使用,还需要很多其它知识或修改,还需要一些配套硬件[例如花生壳的内网穿透,还要买它的HTTPS服务],总而言之,就是变数太多了,很难写成模板。不过话说回来,其实本来是可以很简单的,如果不是运营商封80、443端口,所以,你懂的……这说吧,如果不是80、443,如果不是花生壳只有一个固定的域名,两者中只要有其中之一不被限制,这个模板可以更好更简单,读者也可以很方便的暴露至公网使用了。无奈,环境就是如此,接受吧……读者是可以修改博主提供的压缩包中的配置,配合花生壳及其HTTPS服务,实现公网访问的[主要为修改NGINX配置]~当然,如果你不是像博主这种强迫症,非要使用80和443,你完全可以使用路由器的端口映射功能+动态域名功能实现公网访问~~

最后,博主其实还想加入VSFTPD和RSYNC容器的,不过又要写DOCKERFILE啊,没时间了,就这样吧~

更新!!!

2021年03月03日,已更新至V2.01版本,下载地址见百度网盘连接!!!

另注:本篇博文是按V1.00版本写的,所以……你很大机会会对不上V2.01的内容;

V2.01相对V1.00增加了以下内容:

1、增加了"vsftpd_home"容器;

2、增加了"rsyncd_home"容器;

3、优化了目录结构,现在镜像构建文件与挂载至容器内使用的文件不会是同一份文件;

4、修正了"docker-compose.yaml"中的"TZ"变量定义的错误写法;

5、修正或增加了有关NGINX的配置文件,现在的文件中提供了公网使用的一些写法示例;

6、修正了DOCKER容器与系统时间不统一的问题;

7、优化了说明文件,增加了目录结构说明文件;

[2022.05.01]失效说明

V2版本中的关于JENKINS的插件下载加速已失效!!!请自行更新代码!!!

一、硬件与软件环境

本教程在以下环境下搭建测试通过!

注1:本套轻量化的DevOps系统依赖于DOCKER与DOCKER-COMPOSE,请自行搭建对应环境或见本博客的其它博文中部署方法;

注2:一定要阅读所提供的压缩包中的"readme"!!!"readme"中的初始化命令是以"root"用户执行的,如果你是默认的"pi"用户,请在命令前加"sudo";

注3:提供的部署压缩包是树莓派专用的,即CPU是ARM架构。X86架构使用需要替换掉当中一些二进制文件[例如:gitea文件],可能需要修改DOCKERFILE,可能需要更换DOCKER镜像;

注4:直接复制博文中的代码请注意不可见字符问题,见其它博文中的说明[红色字体];

下载地址:百度网盘[ https://pan.baidu.com/s/1__x8Z5EVjkjR95eUdA3pWQ  ] | 提取码:wuxu

  • 硬       件 :Raspberry Pi 4B -- 8GB版 

  • 操作系统 :Raspbian Buster Lite

  •         :docker + docker-compose

  • 测试日期:2021年02月22日

二、系统目录结构解释

从百度网盘下载树莓派专用的轻量化系统的压缩包,解压后,读者将得到以下的目录结构;另外再次补充提醒,记得阅读当中的"readme",解决问题的方法很多时候会在此文件提到:

三、部署与访问

以下假设你的树莓派已安装了"docker"与"docker-compose";示例:1、从百度网盘下载"homeserver.zip"压缩包并解压;2、用你的方法,将"homeserver"目录上传至树莓派的"/opt/"目录下[实际上可以是任意目录],执行以下命令;

在所有容器正常启动后["UP"状态],即表明DevOps系统部署成功!!!之后,就是使用模板中已经定义好虚假域名"home.domain.local"访问各容器的WEB服务了,以下以WINDOS操作系统为示例。以下假定你所部署的树莓派的IP地址为:192.168.10.10!

在完成"hosts"文件的域名解释定义后,即可通过"home.domain.local"访问树莓派上各容器所对应的WEB服务。DevOps系统的NGINX配置中,默认为所有的HTTP请求均重定向为HTTPS请求,由于所使用的HTTPS证书为自建证书,所以浏览器会提示证书不受信任,解决方法有两个:1、将证书添加至信任;2、无视提示直接访问;

压缩包中所提供的自建证书为泛域名证书,即"*.domain.local",读者完全可以修改NGINX的配置文件,改成你所喜欢的域名,例如"devops.domain.local",但记得作好对应"hosts"文件的域名解释;另外,自建的泛域名证书的有效期为100年,有生之年应该不会过期[博主希望能见到过期的那一天]……

WINDOWS的"hosts"文件的域名解释已经在前一步完成了,现在,我们可以在WINDOWN的浏览器中,使用域名"home.domain.local"访问我们的服务了,以下为NGINX中对各服务的访问地址定义:

以上为本套DevOps系统的基本访问方法,而这也仅仅是基本的访问,实际上,要使这些服务真正的生效,或要正常的使用,还可能需要一些额外的配置,相信博主,博主是测试过的,的确可用,但有些功能的使用,还需要你在WEB配置界面或客户端上做一些额外的配置才能正常使用;

四、服务配置

在可以对各WEB服务进行基本访问后,读者就可以进行自定义的配置了,多参考一些网上的配置教程;另外,请多读"readme"文件,各服务的一些使用方法或配置方法的要点,博主均记录在"readme"文件中。此部分内容博主不知道有没有时间更新了,如遇到问题,也可留言,虽然博主不知道什么时候才会看到,不过一定会回复,但可能是一两个月,因为真的没时间看这个博客……另外博客并不是这个云主机的主要用途……

以下为待更新[极可能不更新,博主觉"readme"中的内容其实已经足够了],另外,每个服务的配置,其实都可以写一篇博文了,而博主可以在这篇博文中说明的,也仅仅只是一些要点……

FileBrowser配置/使用/更新:

Gitea配置/使用/更新:

Jenkins配置/使用/更新:

SSHWifty配置/使用/更新:

Registry配置/使用/更新:

V2RAY配置/使用/更新:

五、公网访问

本套DevOps系统,只需要稍作修改便可用于公网访问,当然,前提是知道怎么修改[废话]!修改的要点是NGINX的配置与"docker-compose.yaml",原因是与域名有关,当然,NGINX的公私钥也是需要考虑的范围;

本套DevOps系统设计时,是以单域名/固定域名[例如:home.domain.local],并配合"域名+子路径"的方式以区分各个WEB服务的,这么设计的原因是:用于配合动态域名解释功能,以保证服务能在公网访问,这是博主做了各种测试最后确定的可行方案。对于拥有固定公网IP,并已经备案了80、443服务的个人或公司,实际有比直接使用本套系统更好的配置方案,比方说,使用"gitea.domaim.local"的域名去访问Gitea服务,使用"file.domain.local"去访问FileBrowser服务;如此设置能更简单融合各种服务并便于管理;

将本套DevOps系统应用于公网,大概有以下两个思路:

一、不使用80、443端口:这是最简单的方法,只需要在路由器上配置"端口映射"+配置"动态域名解释"即可;唯一而且明显的缺点是,在公网访问各个WEB服务,均要特别的手动指定端口号;

二、使用80、443端口:这情况下,路由器上的"端口映射"与"动态域名解释"功能已经没有任何意义了,你需要购买一些额外的硬件,例如花生棒之类的内网穿透硬件,同时还需要购买其对应的HTTPS服务,还要依据实际情况修改NGINX的配置与"docker-compose.yaml",这显然就比上一种方法复杂多了。好处很明显,访问各WEB服务不再需要特别的指定端口了,在公网看上去,就和访问任何普通的网站一样。另外补充一个此方法的重要缺点,就是内网穿透硬件都有流量与带宽限制,例如博主的花生棒,每月的访问流量被限制在2GB,带宽被限制在1M,这意味着,即使你有FileBrowser,但你想传什么大文件???

花生棒???

这里说一下这个东西,我们如果购买花生棒,那就是要使用他的内网穿透功能了,那么明白它的能实现80、443访问的原理,那将有助于你调整NGINX的配置;以下为数据流向,看了下面,你就知道为什么花生棒这个东西有流量与带宽限制了;

80端口:WEB浏览器[HTTP协议] --> 花生棒服务器[HTTP协议] --> 花生棒[HTTP协议] --> DevOps系统

443端口:WEB浏览器[HTTPS协议] --> 花生棒服务器[将HTTPS协议转换为HTTP协议] --> 花生棒[HTTP协议] --> DevOps系统

对于花生棒协议的转换,这只是博客从测试结果中总结的猜测,并不一定是实际情况;关于公网访问,就写这么多了~~~

六、GITHUB项目

以下部分使用到的GitHub项目,读者可自行至项目中获取使用方法:

结、后记

在写这个系统的目录结构时,发现了一点问题,博客主在设计这套系统时,目录的功能用途设计有点问题,具体为名称"server_conf"这一个目录,原来的设想是把配置类文件与构建必要文件统一放进此目录中的,实际也是这样做的;但是,在写目录结构文档时,发现这一做法引起了混乱,具体表现为,当系统部署完成后,要对容器进行具体配置时,配置文件的位置不统一[这同时影响了"docker-compose.yaml"中的设定],配置文件文件有时在"server_conf"中,有时却不在;另外,在"Dockerfile"构建镜像时,有时又会用到对应的配置文件,这导致了各种混乱,也使"server_conf"目录的作用表现混乱;更好的做法应该是把"server_conf"分为两个目录[例如"svr_conf"与"build"],分别入容器运行状态的配置文件与镜像构建时所有使用的文件,这样设计的话,当在系统运行状态时,可以非常方便的在统一的"srv_conf"中寻找对应的配置文件。

但无论如何,博主不想再重写了,主要是不想再重写这一篇博文;也许博主会再发一套V2版本的压缩包实现上述说明,但重写博文,就算了……《完》

基于树莓派搭建轻量化的私有DveOps系统:等您坐沙发呢!

发表评论

表情
还能输入210个字