cillian-paltform开发分享

最近这两天自己的这个运维开发平台项目前后端的大致的框架算是完成了,接下来6月就是开源自己的第一个公开测试版本,并完成细节部分。有读者朋友在问是否开源,肯定是会开源的。只是惶恐自己的代码水平不够,所以前后端用的基本是开源前辈成熟的代码。这过程自己也是一个学习的过程,将学习所得分享给大家。期间也有读者私信讲对于华为前端组件库OpenTiny和以及开箱即用的后台管理系统框架Vben-Admin感兴趣,我也正在学习中,非常欢迎互相交流,因为很多问题是越辩越明,而且我觉得自己沟通交流方面还是很欠缺,但我知道这是成为技术大牛所需能力之一。很多理论学习,自己懂了但分享给别人让别人也懂是一件有挑战的事情。

今天就是简单分享一下前端的大致模块以及后端代码目录部分,工作之余开发时间比较少(投入不够),所以实质性的功能模块开发还是比较少(开发能力欠缺),现在就是类似搭积木,搭了个大致框架。千里之行始于足下,总之是迈开了腿,还是坚信自己后期能像模像样的开发一个项目,向那些优秀的开源前辈们学习。

前端主要分四个模块:

传统模块:资产管理、监控、日志、网络、WebShell、批量自动化执行

云原生模块:主要就是k8s集群api接口的调用,目前就是完成简单增删改查,后期慢慢增加功能(类似一键部署demo)

文档模块:这个就是相当于一个常用的文档导航页,因为自己觉得平时工作中还是会频繁查看一些文档网址,综合在一起还是比较方便

AI模块:自己的想法就是,利用chatgpt提升开发效率,然后将平时的运维开发工作转向智能化,目前知识储备还不够,还在努力学习中,欢迎交流。

后端部分:

目前主要功能完成三个部分:

1、权限验证

2、基础信息持久化

3、k8s集群信息调用

这里只是结合前面介绍的通用目录进行开发,目前还在开发中,六月我再慢慢分享给大家。

然后在这个开发过程中,意识到基础知识的掌握是很重要的,我也一直提醒自己要不断夯实基础知识,不要太过着急,否则地基不牢楼不稳。

比如开发一个web应用通常会用到的网络协议:

1. HTTP 协议:超文本传输协议,用于浏览器和 web 服务器之间传输 HTML 网页内容。浏览器使用 HTTP 请求网页,服务器返回 HTTP 响应。

2. TCP 协议:传输控制协议,提供连接导向的可靠字节流服务。HTTP 协议需要基于 TCP 协议在网络中传输。

3. IP 协议:网络互联协议,用于在网络中传输 TCP 和 HTTP 等上层协议的数据报文。

4. DNS 协议:域名系统协议,用于域名和 IP 地址之间的解析。浏览器需要先通过 DNS 解析出网站域名对应的 IP,然后通过 IP 访问网站。

5. WebSocket 协议:用于浏览器和 web 服务器之间进行全双工通信,实现网页实时更新。

6. SSL/TLS 协议:用于浏览器和 web 服务器之间的加密通信,保证传输过程的安全性。

7. IMAP/POP3 协议:用于客户端和邮件服务器之间接收和发送邮件。如果 web 应用有邮件服务会用到这些协议。

除此之外,web 应用还可能用到以下其他协议:

- FTP 协议:文件传输协议,用于文件上传和下载。

- MQTT 协议:消息队列遥控传输协议,用于物联网应用中的消息通信。

- SSH 协议:用于远程登录和安全文件传输。

- LDAP 协议:用于从目录服务器检索信息。

- SNMP 协议:简单网络管理协议,用于网络设备的管理和监控。

一些常见的网络协议及其客户端/服务器端实现有:

- SSH: OpenSSH

- HTTP:浏览器/nginx

- WebSocket:js WebSocket/socket.io

- TCP/IP:操作系统内置

- DNS:浏览器/BIND

- SMTP:邮件客户端/邮件服务器

比如我这个项目在开发webshell过程中就会用到SSH+WebSocket协议:

1. 使用 SSH 协议实现用户远程登录服务器和命令执行的功能。

2. 使用 WebSocket 协议建立 ws 连接,将 SSH 中的 stdout 和 stderr 日志实时输出到客户端,并显示在终端。

3. 通过 WebSocket 连接,服务器也可以主动推送消息给客户端,如其他用户的登录信息等。

4. 通过 WebSocket 可以实现多个客户端连接到同一个 webshell 实例,以实现多用户协作。

web_shell后端目录如下:

代码语言:javascript
复制
├── backend # Go 后端
│ ├── api 
│ │ ├── exec.go # 命令执行接口
│ │ ├── login.go # 登录接口 
│ │ └── ws.go # WebSocket 接口
│ ├── config # 配置文件 
│ ├── database # 数据库相关
│ ├── executor # 命令执行器
│ ├── main.go # 入口文件
│ └── models # 数据模型
├── frontend # Vue3 前端 
│ ├── public
│ ├── src 
│ ├── api # API 请求
│ ├── assets
│ ├── components 
│ ├── router
│ ├── views
│ ├── App.vue
│ └── main.js
│ ├── .env
│ ├── package.json
│ └── vue.config.js
└── Dockerfile # Docker 镜像构建文件
代码语言:javascript
复制
package main
import (
 "github.com/gin-gonic/gin"
 "github.com/gorilla/websocket"
 "gorm.io/gorm"
)
var db *gorm.DB
type User struct {
 gorm.Model
 Username string `json:"username"`
 Password string `json:"password"`
}
func login(c *gin.Context) {
 // 验证用户名和密码,返回 token
}
func execute(c *gin.Context) {
 // 验证 token
 // 使用 os/exec 执行命令
 // 开启 goroutine 通过 WebSocket 发送输出
} 
func wsHandler(ws *websocket.Conn) {
 // 开启 goroutine 接收 ws 消息
 // 执行对应操作
}
func main() {
 r := gin.Default()
 r.POST("/login", login)
 r.POST("/execute", execute)
 ws := websocket.Upgrader{
 ReadBufferSize: 1024,
 WriteBufferSize: 1024,
 }
 r.GET("/ws", func(c *gin.Context) {
 wsConn, err := ws.Upgrade(c.Writer, c.Request, nil)
 if err != nil {
 log.Println(err)
 }
 go wsHandler(wsConn)
 })
 r.Run()
}

只是一个粗略的示例,具体细节还需要自己根据需求开发。

以上是今天的一点分享,再说说其他的,这两天在考虑我该如何写好自己的技术文章。我观察了其他技术大佬的文章,都有很多共同的特点,比如文章逻辑严谨,内容通俗易懂、有适当的举例、并且有自己的思考。而我很多时候是想到哪写到哪,难道这是我写文章的风格?其中我觉得比较重要的就是有自己的思考,因为目前类似chatgpt人工智能工具的诞生,一些格式化的东西你再写文章出来是没有什么营养价值的。从长远来看,初级简单重复能格式化的工作会被人工智能取代已是事实。但是从专业角度来看,如果你有自己的思考,并且技术研究足够深入,那么就算未来想被取代也是比较困难的,语言模型是有套路的,但是不一定是准确无误的。所以我觉得我后期文章的风格就是带有自己的思考,有自己的观点无论对错,从读者反馈中改善提高自己。就像控制论中提到的,锁定目标,不断进行反馈调节,缩短与目标的距离。

好了,今天的分享就到这了,祝读者朋友学习生活顺利!