zoukankan      html  css  js  c++  java
  • dapi 基于Django的轻量级测试平台七 怎样部署到生产环境

    QQ群:529063263

    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文件
    # 重启

  • 相关阅读:
    入门菜鸟
    FZU 1202
    XMU 1246
    Codeforces 294E Shaass the Great 树形dp
    Codeforces 773D Perishable Roads 最短路 (看题解)
    Codeforces 814E An unavoidable detour for home dp
    Codeforces 567E President and Roads 最短路 + tarjan求桥
    Codeforces 567F Mausoleum dp
    Codeforces 908G New Year and Original Order 数位dp
    Codeforces 813D Two Melodies dp
  • 原文地址:https://www.cnblogs.com/yjlch1016/p/11782553.html
Copyright © 2011-2022 走看看