基于 GitLab、Docker-Compose 和 Harbor 的 CI/CD 实现

在红岩网校工作站运维安全部工作已有一年之久,在维护各种服务的同时,也了解到了各种先进的技术架构。而这一年来使我印象尤其深刻的是网校先进的 Kubernetes 集群架构和 CI/CD 流程。
于是在这个暑假,我决定将自己的基础架构推上 CI/CD 流程。关于 CI,大约一年前我已经基于 Docker 部署了 GitLab,并使用 Docker in Docker 实现了 GitLab Runner。部署过程当时由于时间因素并未写入博客,可以类比 以 Docker in Docker 的方式部署 JupyterHub 进行配置。

实现效果:
CI/CD Pipeline 继续阅读 »

SANTAK TGBOX-850 在 Linux 下的 UPS 部署踩坑记

为了保障数据安全,UPS 必不可少。两年前 50 不包邮捡到的 SANTAK MT500 Pro 从上一台服务器服役至今已经老化,正好我也希望不再使用基于 Java 的比较封闭的 Winpower 作为监测软件,而是希望使用更加开放的方案。因此我购入了一台 SANTAK TGBOX-850。

简述

UPS 规格为 850VA,510W。而我服务器的处理器为单路 E5-2678 v3,加上里面的数块硬盘,实测日常功率为 100W 上下,满载功率为 250W 作用。除此之外,UPS 还需要保障 PoEAC 路由器和 AP 的供电,因此日常负载约为 150W。对于它而言是十分轻松的。 继续阅读 »

以 Docker in Docker 的方式部署 JupyterHub

期末临近,出于对处理大学物理实验数据的需求,我决定部署一个计算环境。众所周知 iPython 同时具备良好的计算能力和交互能力,而基于 iPython 的 JupyterHub 自然是一个优秀的选择。

然而,JupyterHub 为每一个用户创建 server 时需要依赖 Docker。而官方提供的将 JupyterHub 运行于 Docker 的解决方案仅支持将宿主环境的 /var/run/docker.sock 透传进容器,这既不安全也不友好。 继续阅读 »

巧用反弹 shell 将两个异地的 TTY 同步

我们常常会遇到需要远程帮别人协助修复服务器等场景,这种时候经常会有一些信息需要对方输入,比如敏感的 API Key 或者密码等。
如果只是简单地连接对方的 SSH 服务器,则很不方便让对方进行操作,需要要求对方通过聊天工具发送这些敏感信息,这既不安全也不方便。
而且,这种方式对方也看不到我们在干什么,添加公钥的操作也比较敏感。
最好的方法,就是能够建立一个虚拟终端,对双方同步,双方都可以对这个终端进行操作。这样所有的操作对双方都非常透明。尤其是当我们在进行终端操作的教学时,优点尤其突出,因为对方可以看到整个操作过程。

思路

我们可以巧妙运用反弹 shell 的方法,再通过 screen 命令 spawn 出一个完整的 pty。然后让位于异地的两个 TTY 都作为这个 pty 的输入输出端,这样两个 TTY 就同步了。 继续阅读 »

使用 Phicomm N1 作为路由器

最近咕力十足,新高三狗也确实比以前忙了很多,都咕了两篇 blog 了,不过刚刚搞的这个绝对不能咕!
之前买了个 Phicomm N1,但是因为家里有服务器所以一直吃灰,近期之前的家里小米路由器 3 越来越不撑了,也不能充分利用那边的校园网资源。于是我萌生了拿 Phicomm N1 作为路由器的打算。
说干就干,于是我拿着刷了 Debian 9 stretch 的 Phicomm N1 过去了。
设备: 入户线 (静态公网 IP,无 DHCP),刷有 Debian 9 stretch 的 N1,小米路由器 3,一根网线。这里设 N1 连接的小米路由器上的 LAN 口为 LAN 1。

配置 VLAN

切入正题,首先 Phicomm N1 只有一个以太网口,虽然也许我们可以插 USB 网卡,但是不知道为什么我的多个型号的 USB 网卡都不能工作,看起来是内核驱动出了问题,而内核又一直是我的知识盲区。那么这个口就需要同时承担 LAN 和 WAN 的功能。这里我们就需要引入 VLAN。对于 VLAN 的定义不再赘述,它的功能就是在一个 interface 上划分出不同的虚拟 LAN,起到分割广播域 (广播域的定义不再赘述) 的作用。
小米路由器刷了 NATCAP 移植的 OpenWRT,因此支持 VLAN 交换。
我们的思路是,通过使用不同的 VLAN tag,使得小米路由器的 LAN 口、Wi-Fi 和 N1 处于一个广播域中,使得小米路由器的 WAN 口和 N1 处于一个广播域中,这样 N1 上的虚拟 WAN 口就可以和运营商路由器处于一个广播域中,从而互相访问。 继续阅读 »