LearnosSource
所属分类:Telnet客户端/Shell
开发工具:GO
文件大小:3497KB
下载次数:0
上传日期:2022-01-13 02:06:38
上 传 者:
sh-1993
说明: <https: learnos.online> 项目开源,可在线创建使用linux系统以及各种编程 测试环境,可使用webssh ssh终端进行操作。核心功能核心基于docker,项目使用微服务架构。
文件列表:
Container (0, 2022-01-13)
Container\ContainerNode.go (3778, 2022-01-13)
Container\dockerControl (0, 2022-01-13)
Container\dockerControl\client.go (1553, 2022-01-13)
Container\dockerControl\container_info.go (4551, 2022-01-13)
Container\dockerUtil (0, 2022-01-13)
Container\dockerUtil\config.go (2284, 2022-01-13)
Container\dockerUtil\contariner.go.bak (1462, 2022-01-13)
Container\dockerUtil\control.go.bak (225, 2022-01-13)
Container\handler (0, 2022-01-13)
Container\handler\handler.go (723, 2022-01-13)
Container\nodeStatus (0, 2022-01-13)
Container\nodeStatus\nodeStatus.go (96, 2022-01-13)
Container\readQueue (0, 2022-01-13)
Container\readQueue\create.go (1415, 2022-01-13)
Container\readQueue\queue.go (4849, 2022-01-13)
Container\service (0, 2022-01-13)
Container\service\creater.go (880, 2022-01-13)
Container\test (0, 2022-01-13)
Container\test\client.go (1016, 2022-01-13)
Container\test\queue.go (131, 2022-01-13)
Container\websocket (0, 2022-01-13)
Container\websocket\termCore.go (5254, 2022-01-13)
Container\websocket\websocket.go (1708, 2022-01-13)
GateWay (0, 2022-01-13)
GateWay\GateWayNode.go (1643, 2022-01-13)
GateWay\handler (0, 2022-01-13)
GateWay\handler\handler.go (785, 2022-01-13)
GateWay\service (0, 2022-01-13)
GateWay\service\container.go (8422, 2022-01-13)
GateWay\service\user.go (6122, 2022-01-13)
GateWay\sqldata (0, 2022-01-13)
GateWay\sqldata\model (0, 2022-01-13)
GateWay\sqldata\model\history.go (273, 2022-01-13)
GateWay\sqldata\model\image.go (375, 2022-01-13)
GateWay\sqldata\model\model.go (196, 2022-01-13)
GateWay\sqldata\model\user.go (304, 2022-01-13)
... ...
# Learn开源项目简介
![](https://img.shields.io/github/license/t924417424/LearnosSource)
![](https://img.shields.io/github/stars/t924417424/LearnosSource)
![](https://img.shields.io/github/forks/t924417424/LearnosSource)
![](https://img.shields.io/github/issues/t924417424/LearnosSource)
[在线体验](https://learnos.online "在线体验")
[部署教程](https://www.bilibili.com/video/BV1MX4y1T72Q/ "部署教程")
### 更新记录
- 2020/1/31 修复GateWay选择器逻辑造成的无法正确选取Container节点的问题,增加 公/私网 部署模式配置
- 修复连接池导致的Mysql连接过多问题
---
- 请使用go1.14版本进行编译
- LearnOS项目是一个使用Go语言开发,微服务架构的开源项目
- 项目的核心功能为在线创建/使用各种环境,可用于学习/测试(Docker实现)
- 项目使用微服务架构开发,可水平扩展各个节点
- 请勿将本项目用于商业用途,否则所造成的一切损失请自行承担
![](./screenshot/table.png "数据库镜像表")
![](./screenshot/list.png "用户中心")
![](./screenshot/webssh.png "webssh")
![](./screenshot/ssh.png "ssh")
---
## 该项目主要功能使用以下框架开发
1. gin
2. gorm
3. etcd v3
4. go-micro
5. dockerSDK
---
## 各个节点功能的相关介绍
- ### [WebNode](./Web/WebNode.go "WebNode")
- 提供用户web面板
- 提供ssh终端登录服务
- 提供websocket数据转发
- 开放用户http接口与GateWayNode进行数据交互
- ### [GateWayNode](./GateWay/GateWayNode.go "GateWayNode")
- 与数据库进行交互
- 用户操作相关功能实现
- 登录、注册、发送验证码、中间件...
- 容器操作相关功能实现
- 发送容器创建、获取容器状态、删除等致消息队列中
- 转发websocket请求、对websocket进行鉴权等相关操作
- ### [ContainerNode](./Container/ContainerNode.go "ContainerNode")
- 容器相关功能
- 创建容器
- 容器资源限制
- 主动/被动删除容器
---
## 部署相关
- ### 各节点如何部署?
- #### etcd
- 因为减少依赖的想法,所以消息队列和缓存功能皆基于etcd实现
- go-micro实现服务注册/发现所用
- 部署各节点之前必须先安装启动etcdv3
- 下载部署etcd v3,并开启用户认证功能,如部署在不同服务器,请确保etcd外网可连接
- 开启用户认证
```shell
etcdctl user add root #添加root用户,会自动提示设置密码
etcdctl auth enable #开启用户认证功能
```
- 监听公网请求
- 新建etcd.yml,并将如下内容放入该文件
- 注意:开头不要有多余空格
```yml
name: default
data-dir: ./default.etcd/
wal-dir: ./member/wal/
listen-client-urls: http://0.0.0.0:2379
advertise-client-urls: http://0.0.0.0:2379
```
`etcd --config-file ./etcd.yml # 运行此命令,使用该配置文件启动etcd`
- #### 节点编译
- 首先确保你已安装go语言的编译环境
```shell
go build Web/WebNode.go
go build GateWay/GateWayNode.go
go build Container/ContainerNode.go
```
- #### 节点部署
- 将修改好的 `config.toml` 与编译后的各节点可执行文件放置于同一目录启动
- 各节点可部署至单机,亦可以部署至不同服务器
- 需要注意的是`Container`节点所在机器必须先安装`docker`环境
- `Web`文件夹以及此文件夹下的`static`和`view`文件夹需要和WebNode在同一目录
- 因 `kill -9 pid` 命令关闭程序无法被程序捕获,故会导致一些容器和注册信息残留
建议使用 `kill pid` 进行程序关闭
- 容器节点在自身可用内容小于100M的时候会停止读取创建队列消息[Container/readQueue/queue.go#L41](Container/readQueue/queue.go#L41 "queue.go")
## 镜像相关
- ### 如何添加镜像至用户可创建的镜像列表?
- 因时间原因,相关后台并未开发,所以需要对数据库进行操作添加
- 表:images
- `name:镜像名 #需要和docker镜像名保持一致`
- `cmd:docker start时需要执行的命令,一般为/bin/bash,目的在于进入可交互终端`
- `memory: 内存限制相关,0 -> 不限制,单位:bit`
- `net_work_io_limit: 流量限制相关,0 -> 不限制,单位:bit`
- `block_io_limit: blockIo限制相关,0 -> 不限制,单位:次,不建议限制`
- `logo: 列表显示的logo图片`
- 如何获取镜像文件名?
- https://hub.docker.com/
- ### 注意:因镜像文件大小不一,最好docker pull相关镜像到Container节点所在机器中之后再添加相关镜像文件,Container节点虽然支持创建时节点自动pull相关镜像,但会阻塞后续分配到该节点的创建请求!
---
- 配置文件模板
- [config.toml](./config.toml "config.toml")
```toml
[common]
jwtKey = "ss_jwt_token" #jwt签发加密秘钥
PublicNetWorkMode = false #是否开启公网模式 true|false 说明:false:只可以部署在局域网 true:只可以部署在公网
[webSocket] #此配置三个服务需要保护一致
[webSocket.gateWay] #gateway节点的websocket服务端口
wsPort = 8015
[webSocket.container] #container节点的websocket服务端口
wsPort = 8015
[etcd] #etcd版本:v3,此配置三个服务需保持一致,且需要开启用户认证
addr = ["192.168.0.106:2379"]
userName = "root"
passWord = "123456"
[web] #只用于web服务
runMode = "release" #debug test release - [Gin框架RunMode]
webAddr = "127.0.0.1:8011" #web端口,可反代到80
sshAddr = "127.0.0.1:8022" #ssh面板功能连接端口,可反代,但必须是tcp反代,不建议
[gateWay]
[gateWay.aliSms] #此配置只在gateWay中使用
accessId = "-"
accessKey = "-"
signName = "-" #短信签名
template = "-" #模板代码
[gateWay.mysql] #此配置只在gateWay中使用
addr = "127.0.0.1"
port = 3306
userName = "root"
passWord = "root"
dbName = "gateway_data"
```
---
- 联系邮箱:924417424@qq.com
- 如有问题可以向我反馈,也可以自行尝试修复
### 赞助商
- 感谢[JetBrains](https://jb.gg/OpenSource)对本项目的支持!
近期下载者:
相关文件:
收藏者: