设为首页 收藏本站
查看: 5387|回复: 1

[经验分享] python&django开发与生产环境部署总结

[复制链接]

尚未签到

发表于 2015-11-26 13:02:58 | 显示全部楼层 |阅读模式
  Django webapp开发与生产环境部署
概要
  Ø  安装Python虚拟机;版本2.7.8
  Ø  安装开发包
  Ø  建立Django项目
  Ø  建立Djangowebapp
  Ø  数据库模型设计
  Ø  url规则设计
  Ø  编写视图函数
  Ø  前端:
  ²  Bootstarp网格化DOM
  ²  注入bootstarp样式
  ²  Jquery处理web事件
  Ø  集成gateone
  Ø  Saltstack webUI管理
  Ø  Nginx+uwsgi+django生产环境部署
  
  项目源代码:暂不公开
一、webapp功能介绍
  1
  Execl表格在线预览编辑
  2
  linux服务器状态监控,文件服务器上传下载
  3
  Saltstack服务器配置管理webUI
  4
  webSSH模拟运维堡垒机终端
  5
  Cobbler webUI
  6
  资产管理
  其它
  需明确需求、、、、
  
二、建立项目开发环境
  1.安装windows版本python解释器,版本2.7.8
  2.安装必要第三方库:
  Python的web开发框架:    Django (1.6.2)
  Mysql的python接口: MySQL-python (1.2.3)
  ssh的python接口模块:  paramiko (1.14.0)
  3.IDE:pycharm3.4.1
  
  
二、创建工程与应用
  项目目录结构:
  
DSC0000.jpg
  1.      将C:\Python27\Scripts添加到windows的path环境变量,打开cmd窗口:
  a.进入E盘,创建django_web项目:
  >E:
  >django-admin startproject  django_web
  
  b.创建名为gaga的webapp:
  >django-admin startapp  gaga
  
  c.settings.py设置
  
  
  d.建立webapp的数据库模型:
  #-*-coding: utf-8 -*-
  fromdjango.db import models
  #Create your models here.
  classUser(models.Model):
  username = models.CharField('用户名',max_length= 20)
  password = models.CharField('密码',max_length= 20)
  realname = models.CharField('真实姓名',max_length= 255)
  sex = models.CharField('性别',max_length= 10)
  email = models.EmailField('电子邮箱',blank= True)
  def __unicode__(self):
  return self.username
  classFileserver(models.Model):
  disk_useage = models.CharField('磁盘使用率',max_length= 10)
  smb_status = models.CharField('Samba状态',max_length= 50)
  raid_status = models.CharField('Raid状态',max_length= 50)
  def __unicode__(self):
  return self.disk_useage
  def toJSON(self):
  fields = []
  for field in self._meta.fields:
  fields.append(field.name)
  d = {}
  for attr in fields:
  d[attr] = getattr(self, attr)
  import json
  return json.dumps(d)
  classXuqiu(models.Model):
  textarea = models.TextField('需求')
  who = models.CharField('用户名',max_length=20)
  classname_password(models.Model):
  IP = models.CharField('IP地址',max_length= 20)
  username = models.CharField('账户名',max_length= 20)
  password =models.CharField('密码',max_length = 20)
  
  d.执行DDL
  进入E:\django_web目录执行:
  manage.pysyncdb
  
  e. 建立URL规则
  
  f.创建视图函数
  
三、前端页面及逻辑
  加载jquery.min.js、bootsarp.min.js、bootstarp.min.css前端js与样式框架代码,通过修改dom元素的class值(bootstarp框架定义的class),完成页面样式及事件处理机制
  前端使用jquery+bootstarp+highchart.js图表插件,图表数据实现ajax异步调用,无需刷新页面,定时请求,实时展现服务器数据指标
  Jquery.ajax+hightcharts.js实现实时数据图表核心js代码:
  
  varget_data=function(){
  var options;
  options={
  title: {
  text: '文件服务器监控数据',
  x: -20 //center
  },
  subtitle: {
  text: '泰信科技',
  x: -20
  },
  xAxis: {
  categories: ['Jan', 'Feb', 'Mar','Apr', 'May', 'Jun','Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
  },
  yAxis: {
  title: {
  text: '百分比(%)',
  
  },min: 0,
  plotLines: [{
  value: 0,
  width: 1,
  color: '#808080'
  }]
  },
  tooltip: {
  valueSuffix: '%'
  },
  legend: {
  layout: 'vertical',
  align: 'right',
  verticalAlign: 'middle',
  borderWidth: 0
  },
  series: [{
  name: '磁盘使用率',
  //data: [7.0, 6.9, 9.5, 14.5, 18.2,21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6] 测试数据
  }, {
  name: '内存使用率',
  //data: [-0.2, 0.8, 5.7, 11.3,17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5] 测试数据
  }, {
  name: 'CPU使用率',
  //data: [-0.9, 0.6, 3.5, 8.4, 13.5,17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0] 测试数据
  }, {
  name: '带宽使用率',
  //data: [3.9, 4.2, 5.7, 8.5, 11.9,15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8] 测试数据
  }]
  };
  $.ajax({
  url: "json/",
  dataType: "json",
  type:"post",
  success: function(data) {
  //init series arays
  disk_arr = [];
  cpu_arr = [];
  mem_arr = [];
  //net_arr = [];
  
  for (i in data) {
  //build
  var t =0;
  var r = data;
  disk_arr.push([Number(r.fields.smb_status)]);
  cpu_arr.push([Number(r.fields.disk_useage)]);
  mem_arr.push([Number(r.fields.raid_status)]);
  //net_arr.push([r.fields.test]);
  
  }
  //save series
  options.series[0].data =disk_arr;
  options.series[1].data =cpu_arr;
  options.series[2].data =mem_arr;
  //options.series[3].data = net_arr;
  var chart =$('#container-test').highcharts(options);
  },
  cache: false
  });
  };
  
  
四、Django模板系统
  需理解jinjia2模板系统语法
  
  
五、集成gateone与PIL
  GateOne是一款基于HTML5的websocket的开源终端模拟器/SSH客户端,同时内置强大的插件功能。它自带的插件使其成为一款令人惊艳的SSH客户端,但是,它可以用于运行任何终端应用。用户可以将GateOne嵌入其他应用程序从而提供各类终端访问界面,它也支持各类基于Web的管理界面。
  PIL(python imageinglibrary),python图像处理的库
  实现webSSH处理图像
DSC0001.jpg

六、实现saltstack webUI
  Saltstack简介:
  Saltstack是继 Puppet、Chef 之后新出现的配置管理及远程执行工具,目前,SaltStack 正得到越来越多的瞩目。与 Puppet 相比,SaltStack 没有那么笨重,较为轻量;不像 Puppet 有一套自己的 DSL用来写配置,SaltStack 使用YAML作为配置文件格式,写起来既简单又容易,同时也便于动态生成;此外,SaltStack 在远程执行命令时的速度非常快,也包含丰富的模块
七、nginx+uwsgi+django分布式部署
  部署生产环境前需修改setting.py文件:
  添加STATIC_ROOT  #静态文件目录绝对路径
  STATIC_URL=’/static/’ #静态文件url  
  生产环境架构采用nginx+uwsgi+django,nginx与uwsgi的安装省略
  部署方式:
  1.  uwsgi的ini类型配置文件:
  #coding=utf8
  #uwsgi.ini file
  [uwsgi]
  #Django-related settings
  # thebase directory (full path)
  chdir           = /home/django_web/  #项目目录
  #Django's wsgi file
  module          = django_web.wsgi:application
  #process-related settings
  # master
  master          = true
  # maximumnumber of worker processes
  processes       = 10
  # thesocket (use the full path to be safe
  #socket          = 127.0.0.1:8001
  http             = 192.168.0.174:88  #uwsgi已http协议提供服务,也可以定义为socket
  # ...with appropriate permissions - may be needed
  chmod-socket    = 666
  # clearenvironment on exit
  vacuum          = true
  process         = 4
  threads         = 2
  #log
  daemonize      =/var/log/uwsgi/uwsgi.log
  2.      检查django项目的wsgi.py是否符合wsgi协议接口定义规范
  3.      nginx配置(待补充)
  4.      启动服务:uwsgi –ini uwsgi.ini
  5.      关闭服务:killall -9 uwsgi
  
  预览:
DSC0002.jpg

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-143901-1-1.html 上篇帖子: Salt-API安装配置及使用 下篇帖子: 使用Salt管理用户
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表