QQ群:

GitHub:https://github.com/yjlch1016/dapi

Nginx+uWSGI

前置条件:
以下所有操作均在root账号下面进行
如果不是root用户
请注意权限问题
因为是自己搭的服务器
所以无所谓安全问题
如果是公司的服务器
请不要使用root账号

一、安装uWSGI服务器:

当我们在本地运行Django时
一般是python manage.py runserver
但是在服务器上面是结合uWSGI

pip install uwsgi
安装uWSGI
uWSGI是Python的Web服务器
类似于Java的Tomcat

find / -name uwsgi
找到uwsgi的执行位置

ln -s /usr/local/python/bin/uwsgi /usr/bin/uwsgi
创建软连接

pip install uwsgitop
安装uWSGI性能监控库
类似于top命令

find / -name uwsgitop
找到uwsgitop的执行位置

ln -s /usr/local/python/bin/uwsgitop /usr/bin/uwsgitop
创建软连接

uwsgi.ini文件:

[uwsgi]
socket = 127.0.0.1:3031
# Socket套接字 chdir = /django/dapi
# 工程的绝对路径
wsgi-file = dapi/wsgi.py
# wsgi.py的相对路径 master = true
# 启用主进程
processes = 4
# 4个线程,每个进程有2个线程
threads = 2
# 2个进程
# uWSGI默认单个进程和单个线程 uid = root
gid = root
# 启动uwsgi的用户名和用户组 buffer-size = 65535
# 内部缓存区大小为64k,默认4k
max-​​​​requests = 65535
# 每个进程的最大请求数 stats = 127.0.0.1:9191
# stats子系统将uWSGI的内部统计信息导出为JSON
memory-report = true
# 开启内存使用情况报告 pidfile = %(chdir)/uwsgi.pid​​​​​​
# pid vacuum = true
# 当服务停止的时候,自动清理Unix Socket和pid文件 #logto = %(chdir)/uwsgi.log
daemonize = %(chdir)/uwsgi.log
# 使进程在后台运行,并将日志打到指定的日志文件

二、上传代码:

因为本次是演示
所以直接把代码上传到服务器上面了
在实际的生活中
请按照规范流程git push到仓库
不然要被打shi

mkdir /django
在根目录下面创建django目录
把dapi工程代码上传到此目录下面

如果之前运行过并且上传过文件
把/dapi/media/jmeter目录删掉
以免占磁盘空间
如果没有
则不用管

chmod -R 777 /django
赋予此目录及其所有的子目录最高读写权限

cd /django/dapi
进入dapi工程根目录

pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2
安装适配Django2.0以后版本的xadmin

pip install -r requirements.txt
安装工程所需的依赖

修改dapi/settings.py配置文件

把DEBUG = True改为
DEBUG = False

把ALLOWED_HOSTS = []改为
ALLOWED_HOSTS = ["*"]
或者指定的IP列表
ALLOWED_HOSTS = ["IP1", "IP2", "IP3"]

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'dapi',
        'HOST': '192.168.1.111',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': 'Abcdef@123456',
    }
}
# MySQL数据库

CELERY_BROKER_URL = 'redis://:Abcdef@123456@192.168.1.111:6379/0'
# redis://:password@hostname:port/db_number
CELERY_BROKER_TRANSPORT = 'redis'
# 使用redis作为中间件

三、迁移MySQL数据库:

新建dapi库

PyMySQL年久失修,
对Django2.0以后的版本支持不是很好
有2个小BUG
vim /usr/local/python/lib/python3.6/site-packages/django/db/backends/mysql/base.py
把第35~36行注释掉
vim /usr/local/python/lib/python3.6/site-packages/django/db/backends/mysql/operations.py
把第145~146行注释掉

请注意:
迁移之前要把/dapi/interface/migrations目录下面除了__init__.py以外的所有文件都删掉
如果之前没有运行过
则不用管

python manage.py makemigrations
激活模型

报错:

django.db.utils.ProgrammingError: (1146, "Table 'dapi.product_info' doesn't exist")

分析了一下原因:
mysql服务已经启动了
IP、端口、账号与密码都是对的呀
现在是直接连接本机的mysql
不存在root远程访问的问题
况且在安装mysql时已经打开了root账号的远程访问权限

继续往上找:
(找跟dapi工程相关的报错信息,而不是找Python源码相关的报错信息)
File "/django/dapi/dapi/urls.py", line 136, in <module>
    url('^pyecharts/', include('interface.urls')),
    
File "/django/dapi/interface/urls.py", line 3, in <module>
    from interface import pyecharts
File "/django/dapi/interface/pyecharts.py", line 45, in <module>
    product_count = ProductInfo.objects.all().count()

当我们在激活模型时
程序已经开始执行了
但是在urls.py文件下未能找到所需的表
于是便会出现报错

vim /django/dapi/dapi/urls.py
把第136行注释掉
等迁移完成后再恢复

(报错是因为pyecharts的原因,之后会考虑是否把pyecharts抛弃掉)

python manage.py makemigrations
重新激活模型

这次成功了

python manage.py migrate
迁移

python manage.py createsuperuser
创建超级管理员账号

因为静态文件我已经放在工程的static目录下面了

所以不用再python manage.py collectstatic收集静态资源文件了

四、配置Nginx:

vim /usr/local/nginx/conf/nginx.conf
修改nginx配置文件

location / {
                 include uwsgi_params;
                 uwsgi_pass 127.0.0.1:3031;
         }
 
         location /static {
                 alias /django/dapi/static/;
                 index  index.html index.htm;
         }
 
         location /media  {
                 alias /django/dapi/media/;
         }

systemctl restart nginx
重启nginx服务

uwsgi uwsgi.ini
启动uwsgi服务

ls -a
查看dapi工程目录下面的所有文件

tail -f uwsgi.log
查看日志

五、Web页面:

访问http://192.168.1.111/

后台http://192.168.1.111/admin/

tail -f uwsgi.log
查看日志

uwsgitop :9191
监控uwsgi性能

这个界面按Q退出

六、uwsgi命令:

uwsgi --ini uwsgi文件
# 启动

uwsgi --stop pid文件
# 停止

uwsgi --reload pid文件
# 重启

dapi 基于Django的轻量级测试平台七 怎样部署到生产环境的更多相关文章

  1. dapi 基于Django的轻量级测试平台八 Docker部署

    QQ群: GitHub:https://github.com/yjlch1016/dapi 采用Docker+Supervisor+Nginx+uWSGI+Django 一.Dockerfile文件: ...

  2. dapi 基于Django的轻量级测试平台一 设计思想

    GitHub:https://github.com/yjlch1016/dapi 一.项目命名: dapi:即Django+API测试的缩写 二.设计思想: 模拟性能测试工具JMeter的思路, 实现 ...

  3. dapi 基于Django的轻量级测试平台二 前端页面

    QQ群: GitHub:https://github.com/yjlch1016/dapi 一.登录页login.html: 二.首页home.html: 三.产品线列表页product.html: ...

  4. dapi 基于Django的轻量级测试平台六 怎样使用压测功能

    QQ群: GitHub:https://github.com/yjlch1016/dapi JMeter非GUI模式下: jmeter -n -t jmx脚本 -l jtl文件 -e -o 测试报告目 ...

  5. dapi 基于Django的轻量级测试平台五 测试报告

    QQ群: GitHub:https://github.com/yjlch1016/dapi 一.柱状图 二.饼状图

  6. dapi 基于Django的轻量级测试平台四 任务设置

    QQ群: GitHub:https://github.com/yjlch1016/dapi 一.间隔时间: 二.定时时间: 三.任务设置: 四.任务结果:

  7. dapi 基于Django的轻量级测试平台三 接口关联

    QQ群: GitHub:https://github.com/yjlch1016/dapi 一.接口关联思路: 在接口测试中, 很多场景下, 上一个接口的出参要作为下一个接口的入参, 即上一个接口的响 ...

  8. dmock 基于Django的轻量级Mock平台

    GitHub:https://github.com/yjlch1016/dmock # dmock 基于Django的轻量级Mock平台 dmock即Django+Mock的缩写 一.思路: mock ...

  9. [2018-03-06] 基于Django的轻量级CMS Mezzanine搭建笔记

    一丶什么是Mezzanine? 它是基于django的内容管理平台(),组成简单,可扩展性和定制性强,特别是个小型的个人博客系统.它也提供了类似wordpress的管理页面.博客发布.图片展示等功能, ...

随机推荐

  1. MySQL实战45讲学习笔记:第十三讲

    一.引子 经常会有同学来问我,我的数据库占用空间太大,我把一个最大的表删掉了一半的数据,怎么表文件的大小还是没变? 那么今天,我就和你聊聊数据库表的空间回收,看看如何解决这个问题. 这里,我们还是针对 ...

  2. IDEA中SonarLint的安装与使用

    一.SonarLint插件的安装 1.1在线安装 (1)在IDEA菜单栏选择File->Settings,左边栏选择Plugins (2)在线安装选择Browse repositories,搜索 ...

  3. 如何让position fixed不再基于浏览器窗口定位

    position:fixed默认是相对浏览器定位的. 就是将某个元素固定在浏览器的某个确定的位置,不随滚动条的移动而变化: MDN对position: fixed有一个注释: 当元素祖先的 trans ...

  4. HTML连载29-div和span标签

    一.div标签 1.作用:一般用于配合CSS完成网页的基本布局 2.例子: <style> .head{ width: 980px; height: 100px; background: ...

  5. HashMap 源码分析 基于jdk1.8分析

    HashMap 源码分析  基于jdk1.8分析 1:数据结构: transient Node<K,V>[] table;  //这里维护了一个 Node的数组结构: 下面看看Node的数 ...

  6. 使用 Valgrind 检测 C++ 内存泄漏

    Valgrind 的介绍 Valgrind 可以用来检测程序是否有非法使用内存的问题,例如访问未初始化的内存.访问数组时越界.忘记释放动态内存等问题.在 Linux 可以使用下面的命令安装 Valgr ...

  7. 单片机成长之路(51基础篇) - 023 N76e003 系统时钟切换到外部时钟

    N76e003切换到外部时钟的资料很少(因为N76e003的片子是不支持无源晶振的,有源晶振的成本又很高,所以网上很少有对N76e003的介绍).有图有真相: 代码如下: main.c #includ ...

  8. Spring+Mybatis动态切换数据源

    功能需求是公司要做一个大的运营平台: 1.运营平台有自身的数据库,维护用户.角色.菜单.部分以及权限等基本功能. 2.运营平台还需要提供其他不同服务(服务A,服务B)的后台运营,服务A.服务B的数据库 ...

  9. 2019-11-29-dotnet-通过-WMI-获取指定进程的输入命令行

    原文:2019-11-29-dotnet-通过-WMI-获取指定进程的输入命令行 title author date CreateTime categories dotnet 通过 WMI 获取指定进 ...

  10. .NET设计模式-观察者模式

    Observer(观察者模式) 定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新. 说白了就是事件. using System; namespa ...