1 Star 0 Fork 2

coke / tianyi

forked from 夜微凉 / tianyi 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

天一运维平台架构说明

项目背景

​ 我们处在互联网信息时代,应当倍感荣幸, 各种开源技术层出不穷,学习资源非常丰富,同时,也感到迷茫,大数据,云计算,人工智能,究竟应该选择哪个领域去专研?哪项技术最有发展前途?这是非常艰难的选择。

​ 不如,我们换个角度,现在有个项目摆在眼前--《天一运维平台》。项目需要用到各种技术,前端,后端,数据库,需要用到什么技术,就去学什么技术,项目驱动学习,学以致用,理论和实践相结合,才是最快的学习方法。

一个人最大的幸运,莫过于站在了浪潮之巅,这样他可以顺势而为,在大时代里成就一番事业。 --吴军

需求分析

​ 企业运维发展趋势从一开始的人工运维,发展到自动化运维(Devops),再到最近兴起的智能运维(AIOps)。先进的运维方式都离不开运维平台的支撑,运维平台好处诸多,人员管理,资产管理,脚本管理,资源监控,日志查询,数据分析等等。甚至可以集成代码仓库,容器仓库,将网站服务自动部署到UAT环境和生产环境,也就是CICD持续集成与部署。

​ 由于项目刚刚起步,可以先把框架搭好,添加最基础的功能,先跑起来,然后再不断迭代,一点一点添加新功能。每次只设计和实现这个产品的一部分, 逐步逐步完成的方法叫迭代开发, 每次设计和实现一个阶段叫做一个迭代。

功能说明

​ 目前先做以下3个功能:

人员管理

​ 人员管理是指,对使用运维平台的人员进行统一权限管理,包括管理员,项目经理,开发人员,运维人员,测试人员等。

主机管理

​ 主机管理包括公司内部所有服务器的资产编号,品牌型号,主机名,操作系统,内存,CPU,用户名,密码,磁盘空间,IP地址,主要用途等等。

脚本管理

​ 服务器脚本包括shell, python脚本,需要记录脚本名,作者,联系方式,脚本用途,脚本参数等。并且在这个基础上,可以批量指定服务器来执行脚本,包括定时执行,重复执行,并且可以查询到每次的执行人和执行结果。

数据建模

​ 建模工具使用Mysql Workbench

表结构设计

每个用户有自己的用户详情,一对一关系。

每个用户可以写多个脚本,一对多关系。

每个用户可以使用多台主机,每台主机可以被多个用户使用,多对多关系。

表关联关系

relation

建表SQL

-- MySQL Script generated by MySQL Workbench
-- 2020年11月13日 星期五 14时01分12秒
-- Model: New Model    Version: 1.0
-- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
-- -----------------------------------------------------
-- Schema tianyi
-- -----------------------------------------------------

-- -----------------------------------------------------
-- Schema tianyi
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `tianyi` DEFAULT CHARACTER SET utf8mb4 ;
USE `tianyi` ;

-- -----------------------------------------------------
-- Table `tianyi`.`USER`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tianyi`.`USER` (
  `work_id` INT(11) NOT NULL COMMENT '工号',
  `name` VARCHAR(32) NULL DEFAULT NULL COMMENT '用户名',
  `password` VARCHAR(32) NULL DEFAULT NULL COMMENT '密码',
  `telphone` VARCHAR(32) NULL DEFAULT NULL COMMENT '手机号',
  PRIMARY KEY (`work_id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COMMENT = '用户表';


-- -----------------------------------------------------
-- Table `tianyi`.`DETAIL`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tianyi`.`DETAIL` (
  `work_id` INT(11) NOT NULL COMMENT '员工号',
  `sex` INT(11) NOT NULL COMMENT '性别',
  `age` INT(11) NULL DEFAULT NULL COMMENT '年龄',
  `position` VARCHAR(32) NULL DEFAULT NULL COMMENT '职位',
  `created_time` DATETIME NULL DEFAULT NULL COMMENT '创建日期',
  PRIMARY KEY (`work_id`),
  CONSTRAINT `fk_DETAIL_1`
    FOREIGN KEY (`work_id`)
    REFERENCES `tianyi`.`USER` (`work_id`)
    ON DELETE CASCADE
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COMMENT = '用户详情表';


-- -----------------------------------------------------
-- Table `tianyi`.`SCRIPT`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tianyi`.`SCRIPT` (
  `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `s_name` VARCHAR(32) NOT NULL COMMENT '脚本名',
  `description` VARCHAR(32) NULL DEFAULT NULL COMMENT '脚本说明',
  `content` TEXT NULL DEFAULT NULL COMMENT '脚本内容',
  `created_time` DATETIME NULL DEFAULT NULL COMMENT '创建时间',
  `work_id` INT(11) NULL DEFAULT NULL COMMENT '创建人',
  PRIMARY KEY (`id`),
  INDEX `fk_SCRIPT_1_idx` (`work_id` ASC) ,
  CONSTRAINT `fk_SCRIPT_1`
    FOREIGN KEY (`work_id`)
    REFERENCES `tianyi`.`USER` (`work_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COMMENT = '脚本表';


-- -----------------------------------------------------
-- Table `tianyi`.`SERVER`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tianyi`.`SERVER` (
  `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `hostname` VARCHAR(32) NOT NULL COMMENT '主机名',
  `os` VARCHAR(32) NOT NULL DEFAULT 'Centos7' COMMENT '操作系统',
  `memory` VARCHAR(32) NOT NULL COMMENT '内存',
  `cpu` VARCHAR(32) NOT NULL COMMENT 'CPU',
  `ip` VARCHAR(32) NOT NULL COMMENT 'IP地址',
  `operator` VARCHAR(32) NULL DEFAULT NULL COMMENT '用户名',
  `password` VARCHAR(32) NULL DEFAULT NULL COMMENT '密码',
  `vmspace` VARCHAR(32) NULL DEFAULT NULL COMMENT '存储空间',
  `function` VARCHAR(128) NULL DEFAULT NULL COMMENT '主要用途',
  PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COMMENT = '主机表';


-- -----------------------------------------------------
-- Table `tianyi`.`USER_SERVER`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tianyi`.`USER_SERVER` (
  `id` INT(11) NOT NULL COMMENT 'ID',
  `work_id` INT(11) NOT NULL COMMENT 'WORK_ID',
  `server_id` INT(11) NOT NULL COMMENT 'SERVER_ID',
  PRIMARY KEY (`id`),
  INDEX `fk_USER_SERVER_1_idx` (`work_id` ASC) ,
  INDEX `fk_USER_SERVER_2_idx` (`server_id` ASC) ,
  CONSTRAINT `fk_USER_SERVER_1`
    FOREIGN KEY (`work_id`)
    REFERENCES `tianyi`.`USER` (`work_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_USER_SERVER_2`
    FOREIGN KEY (`server_id`)
    REFERENCES `tianyi`.`SERVER` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COMMENT = '用户主机关系表';


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

逆向生成Django模型

#如果表已存在,可以逆向生成Django模型
python manage.py inspectdb >models.py
#反之,如果先写Django模型,再迁移数据,也是可行的
#python manage.py makemigrations
#python manage.py migrate
#models.py
# This is an auto-generated Django model module.
# You'll have to do the following manually to clean this up:
#   * Rearrange models' order
#   * Make sure each model has one field with primary_key=True
#   * Make sure each ForeignKey has `on_delete` set to the desired behavior.
#   * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
# Feel free to rename the models, but don't rename db_table values or field names.
from django.db import models


class Detail(models.Model):
    work = models.ForeignKey('User', models.DO_NOTHING, primary_key=True)
    sex = models.IntegerField()
    age = models.IntegerField(blank=True, null=True)
    position = models.CharField(max_length=32, blank=True, null=True)
    created_time = models.DateTimeField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'DETAIL'


class Script(models.Model):
    s_name = models.CharField(max_length=32)
    description = models.CharField(max_length=32, blank=True, null=True)
    content = models.TextField(blank=True, null=True)
    created_time = models.DateTimeField(blank=True, null=True)
    work = models.ForeignKey('User', models.DO_NOTHING, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'SCRIPT'


class Server(models.Model):
    hostname = models.CharField(max_length=32)
    os = models.CharField(max_length=32)
    memory = models.CharField(max_length=32)
    cpu = models.CharField(max_length=32)
    ip = models.CharField(max_length=32)
    operator = models.CharField(max_length=32, blank=True, null=True)
    password = models.CharField(max_length=32, blank=True, null=True)
    vmspace = models.CharField(max_length=32, blank=True, null=True)
    function = models.CharField(max_length=128, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'SERVER'


class User(models.Model):
    work_id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=32, blank=True, null=True)
    password = models.CharField(max_length=32, blank=True, null=True)
    telphone = models.CharField(max_length=32, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'USER'


class UserServer(models.Model):
    id = models.IntegerField(primary_key=True)
    work = models.ForeignKey(User, models.DO_NOTHING)
    server = models.ForeignKey(Server, models.DO_NOTHING)

    class Meta:
        managed = False
        db_table = 'USER_SERVER'

测试数据SQL

前端设计

后端框架

开发过程

服务部署

网站维护

平台赞助

空文件

简介

天一运维平台 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/colala/tianyi.git
git@gitee.com:colala/tianyi.git
colala
tianyi
tianyi
master

搜索帮助