同步操作将从 夜微凉/tianyi 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
我们处在互联网信息时代,应当倍感荣幸, 各种开源技术层出不穷,学习资源非常丰富,同时,也感到迷茫,大数据,云计算,人工智能,究竟应该选择哪个领域去专研?哪项技术最有发展前途?这是非常艰难的选择。
不如,我们换个角度,现在有个项目摆在眼前--《天一运维平台》。项目需要用到各种技术,前端,后端,数据库,需要用到什么技术,就去学什么技术,项目驱动学习,学以致用,理论和实践相结合,才是最快的学习方法。
一个人最大的幸运,莫过于站在了浪潮之巅,这样他可以顺势而为,在大时代里成就一番事业。 --吴军
企业运维发展趋势从一开始的人工运维,发展到自动化运维(Devops),再到最近兴起的智能运维(AIOps)。先进的运维方式都离不开运维平台的支撑,运维平台好处诸多,人员管理,资产管理,脚本管理,资源监控,日志查询,数据分析等等。甚至可以集成代码仓库,容器仓库,将网站服务自动部署到UAT环境和生产环境,也就是CICD持续集成与部署。
由于项目刚刚起步,可以先把框架搭好,添加最基础的功能,先跑起来,然后再不断迭代,一点一点添加新功能。每次只设计和实现这个产品的一部分, 逐步逐步完成的方法叫迭代开发, 每次设计和实现一个阶段叫做一个迭代。
目前先做以下3个功能:
人员管理是指,对使用运维平台的人员进行统一权限管理,包括管理员,项目经理,开发人员,运维人员,测试人员等。
主机管理包括公司内部所有服务器的资产编号,品牌型号,主机名,操作系统,内存,CPU,用户名,密码,磁盘空间,IP地址,主要用途等等。
服务器脚本包括shell, python脚本,需要记录脚本名,作者,联系方式,脚本用途,脚本参数等。并且在这个基础上,可以批量指定服务器来执行脚本,包括定时执行,重复执行,并且可以查询到每次的执行人和执行结果。
建模工具使用Mysql Workbench
每个用户有自己的用户详情,一对一关系。
每个用户可以写多个脚本,一对多关系。
每个用户可以使用多台主机,每台主机可以被多个用户使用,多对多关系。
-- 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模型
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'
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。