1. 程式人生 > >python&django開發與生產環境部署總結

python&django開發與生產環境部署總結

 

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

二、建立工程與應用

專案目錄結構:

 

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[i];

                   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處理影象

 

六、實現saltstack webUI

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

預覽: