2017年的上半年对我来说是极其难忘的一年,整个乐橙运营部的平台运维全靠我一个人,而且同时公司又新上了一个阿里深圳区一个阿里公有云一个杭州公有云三套环境外加一套演示环境。所以一直念叨的运维后台始终拖拖拉拉没有兑现,现在公司社招来一个小弟给我打下手,使得我终于可以从麻烦的琐事中脱身,有时间去把这个小心愿完成,于是就有了这一系列文章,主要是给自己一个记录也是为了方便后来人。
首先,先说一下我的环境,本人使用阿里云centos7.0,django的版本是1.10.3,python是2.7,django目录就是/django。
首先在/django里#django-admin startproject DahuaCloud,建立一个叫DahuaCloud的project,然后#cd /django/DahuaCloud,#django-admin startapp Online,建立了一个叫Online的app。
建立完毕之后我们发现,在DahuaCloud下多了一个叫Online的文件夹,这个时候我们需要执行如下几个步骤:
1)进入到DahuaCloud下的同名文件夹,编辑settings.py文件,把ALLOWED_HOSTS = [],里面加上“*”,否则打不开网页;
2)还是在settings.py文件里,在INSTALLED_APPS这一栏下面追加‘Online’;
3)继续编辑settings.py文件,在DATABASES这一栏里面写上自己的数据库信息,比如我的信息就是这样:
可见我这个平台的所有资料都保存到了本机的mysql里面的dahuacloud这个database里了。
4)进入mysql,#CREATE DATABASE `dahuacloud` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 这样建立dahuacloud的database;
5)返回到/django/DahuaCloud,执行#python manage.py makemigrations和#python manage.py migrate;
6)执行#python manage.py createsuperuser,建立一个超级用户,这个用户是可以登录网页后台的;
7)执行#python manage.py runserver 0.0.0.0:8000,这样就可以在浏览器里输入这个服务器的“外网地址:8000”看到一个简易的后台界面,输入上面刚刚建立的用户名和密码就可以进去了。
至此整个准备工作完成,下面是今天的重点工作。
公司目前的整个云资源的情况如下,本人灵魂画师,请大家领会精神:
可以看出,公司在阿里云里面有四个业务方面的服务器集群,以及一组SLB和一组RDS。我们现在就要建立一个数据表来记录这些云资源的信息。
首先进入到Online这个文件夹里,编辑models.py,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# -*- coding: UTF-8 -*-
from
__future__
import
unicode_literals
from
django.db
import
models
class
alionlineECS(models.Model):
#所有阿里线上的服务器取名叫alionlineECS
#云服务器的用途选择,作为ecs_type的选项
type
=
(
(U
'HZ'
,
'乐橙杭州'
),
(U
'SZ'
,
'乐橙深圳'
),
(U
'OPEN'
,
'开放平台'
),
(U
'PAAS'
,
'公有云统一PAAS'
),
)
#verbose_name可以让admin后台显示自定义的中文名字,而非字段
ecs_name
=
models.CharField(verbose_name
=
'云服务器名称'
,max_length
=
120
)
#choices找到type元组,并调用相关内容
ecs_type
=
models.CharField(verbose_name
=
'云服务器类型'
,max_length
=
50
,choices
=
type
)
#IPAddressField这个可以精确检查是否输入的是一个IPv4或者IPv6地址
ecs_inip
=
models.GenericIPAddressField(verbose_name
=
'云服务器内网地址'
)
#blank为空,代表在form中可以允许不填
ecs_outip
=
models.CharField(verbose_name
=
'云服务器外网地址'
,max_length
=
20
,blank
=
True
)
ecs_ipwidth
=
models.CharField(verbose_name
=
'云服务器外网带宽'
,max_length
=
50
,default
=
'0M'
)
#default表示默认值
ecs_spec
=
models.CharField(verbose_name
=
'云服务器配置'
,max_length
=
50
,default
=
'2H2G'
)
ecs_remarks
=
models.CharField(verbose_name
=
'备注'
,max_length
=
255
,blank
=
True
)
ecs_signer
=
models.CharField(verbose_name
=
'登记人'
,max_length
=
50
,default
=
'陈男神'
)
#登记时间设置为自动记录,不会出现在选项中
ecs_signtime
=
models.DateField(auto_now_add
=
True
)
#返回相应的值
def
__unicode__(
self
):
return
self
.ecs_name
|
然后在同文件夹的admin.py编辑成如下样子:
1
2
3
4
5
6
7
8
9
10
11
12
|
# -*- coding: UTF-8 -*-
from
django.contrib
import
admin
from
.models
import
alionlineECS
#对应刚刚建立的那个alionlineECS
class
EcsAdmin(admin.ModelAdmin):
#这里就直接写EcsAdmin
list_display
=
(
'ecs_name'
,
'ecs_type'
,
'ecs_inip'
,
'ecs_outip'
,
'ecs_ipwidth'
,
'ecs_spec'
,
'ecs_remarks'
,
'ecs_signer'
)
#在编辑、新增页面上排除ecs_signer的选项
exclude
=
[
'ecs_signer'
]
#对保存函数进行更改,将登录用户设置为登记人
def
save_model(
self
,request,obj,form,change):
obj.ecs_signer
=
str
(request.user)
obj.save()
admin.site.register(alionlineECS,EcsAdmin)
|
保存退出之后,在/django/DahuaCloud里重新执行#python manage.py makemigrations和#python manage.py migrate,然后#python manage.py runserver 0.0.0.0:8000启动后台就会看到效果。
对于SLB和RDC都是同理,在model.py下接着编辑:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#建立负载均衡数据表
class
SLB(models.Model):
env
=
(
(u
'online'
,
'线上环境'
),
(u
'func'
,
'测试环境'
),
)
type
=
(
(
'in'
,
'私网'
),
(
'out'
,
'公网'
),
)
algorithm
=
(
(
'加权轮询'
,
'加权轮询'
),
(
'最小连接数'
,
'最小连接数'
),
(
'轮询'
,
'轮询'
),
)
protocol
=
(
(
'tcp'
,
'tcp'
),
(
'http'
,
'http'
),
(
'https'
,
'https'
),
)
slb_name
=
models.CharField(verbose_name
=
'负载均衡名称'
,max_length
=
100
)
slb_type
=
models.CharField(verbose_name
=
'网络类型'
,max_length
=
30
,choices
=
type
,default
=
'公网'
)
slb_algorithm
=
models.CharField(verbose_name
=
'转发规则'
,max_length
=
50
,choices
=
algorithm,default
=
'最小连接数'
)
slb_ip
=
models.GenericIPAddressField(verbose_name
=
'ip地址'
)
slb_protocol
=
models.CharField(verbose_name
=
'负载均衡协议'
,max_length
=
50
,choices
=
protocol)
slb_fport
=
models.CharField(verbose_name
=
'前端端口'
,max_length
=
10
)
slb_bport
=
models.CharField(verbose_name
=
'后段端口'
,max_length
=
10
)
slb_protocol1
=
models.CharField(verbose_name
=
'负载均衡协议'
,max_length
=
50
,choices
=
protocol,blank
=
True
)
slb_fport2
=
models.CharField(verbose_name
=
'前端端口'
,max_length
=
10
,blank
=
True
)
slb_bport2
=
models.CharField(verbose_name
=
'后段端口'
,max_length
=
10
,blank
=
True
)
slb_signer
=
models.CharField(verbose_name
=
'登记人'
,max_length
=
30
,default
=
'陈男神'
)
slb_signtime
=
models.DateField(auto_now_add
=
True
)
slb_remarks
=
models.CharField(verbose_name
=
'备注'
,max_length
=
255
,blank
=
True
)
def
__unicode__(
self
):
return
self
.slb_name
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#建立数据库信息表
class
RDS(models.Model):
#node = models.ForeignKey(Node, on_delete=models.PROTECT)
mysql
=
(
(
'mysql5.7'
,
'mysql5.7'
),
(
'mysql5.6'
,
'mysql5.6'
),
(
'mysql5.5'
,
'mysql5.5'
),
)
spec
=
(
(
'1H1G'
,
'1H1G'
),
(
'2H2G'
,
'2H2G'
),
(
'2H4G'
,
'2H4G'
),
(
'4H4G'
,
'4H4G'
),
(
'4H8G'
,
'4H8G'
),
(
'其他'
,
'其他'
)
)
type
=
(
(
'常规实例'
,
'常规实例'
),
(
'只读实例'
,
'只读实例'
),
)
rds_name
=
models.CharField(verbose_name
=
'数据库名称'
,max_length
=
100
)
rds_type
=
models.CharField(verbose_name
=
'数据库类型'
,max_length
=
100
,choices
=
type
,default
=
'常规实例'
)
rds_mysql
=
models.CharField(verbose_name
=
'mysql版本'
,max_length
=
50
,choices
=
mysql,default
=
'mysql5.6'
)
rds_spec
=
models.CharField(verbose_name
=
'数据库规格'
,max_length
=
50
,choices
=
spec,default
=
'1H1G'
)
rds_remark
=
models.CharField(verbose_name
=
'备注'
,max_length
=
255
,blank
=
True
)
rds_ip
=
models.CharField(verbose_name
=
'数据库地址'
,max_length
=
50
)
rds_status
=
models.CharField(verbose_name
=
'存储空间'
,max_length
=
10
,default
=
'20G'
)
rds_signer
=
models.CharField(verbose_name
=
'登记人'
,max_length
=
30
,default
=
'system'
)
rds_signtime
=
models.DateField(auto_now_add
=
True
)
def
__unicode__(
self
):
return
self
.rds_name
|
admin.py也要跟着在后面添加如下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
class
SLBAdmin(admin.ModelAdmin):
list_display
=
(
'slb_name'
,
'slb_type'
,
'slb_ip'
,
'slb_signer'
,
'slb_remarks'
)
#在编辑、新增页面上排除line_signer的选项
exclude
=
[
'slb_signer'
]
#对保存函数进行更改,将登录用户设置为登记人
def
save_model(
self
, request, obj, form, change):
obj.slb_signer
=
str
(request.user)
obj.save()
class
RDSAdmin(admin.ModelAdmin):
#在编辑、新增页面上排除device_signer的选项
list_display
=
(
'rds_name'
,
'rds_spec'
,
'rds_ip'
,
'rds_remark'
,
'rds_signer'
)
exclude
=
[
'rds_signer'
]
#对保存函数进行更改,将登录用户设置为登记人
def
save_model(
self
, request, obj, form, change):
obj.rds_signer
=
str
(request.user)
obj.save()
admin.site.register(SLB,SLBAdmin)
admin.site.register(RDS,RDSAdmin)
|
同步升级了数据库并且打开了前端页面,就会看到这样的效果:
这个时候我们就可以在网页上添加具体的信息了,比如说增加云服务器的信息:
增加信息之后,看到的效果就是:
至此整个简单增删改查的数据信息库就算完成了!
本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1946427