• Nginx+ uWSGI +django进行部署


    一:uWSGI的安装

    sudo pip install uwsgi


    如果安装报错:

    conda install -c conda-forge uwsgi 
    conda install -c conda-forge libiconv


    测试 test.py:

    uwsgi --http :8020 --chdir /mnt/d/hegh/projects/0806/data_plot(项目路径) -w data_plot.wsgi


    一个重要的任何就是监控。知道发生了什么在生产环境中是极其重要的。stats 子系统允许你 用 JSON 输出 uWSGI 的内部数据:

    uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191


    启动测试, 可以正常访问就安装没有问题
    在项目的根目录下建立以自己项目命名的配置文件data_plot.ini:

    [uwsgi]
    project = data_plot
    base = /mnt/d/hegh/projects/0806/
    socket = 127.0.0.1:8030 # 指定项目执行的端口号,用nginx的时候就要配socket
    chdir = %(base)/%(project) # 指定项目的目录
    wsgi-file=%(base)/%(project)/%(project)/wsgi.py # 项目上wsgi.py所在的位置,与settings目录相同
    master = true # master :允许主线程存在(true)
    processes = 5 # 开启的进程数量
    threads=2
    pidfile=data_plot.pid
    daemonize=data_plot.log # 日志,uwsgi无法启动时来这查看错误日志

    这将会产生 4 个进程(每个进程 2 个线程),一个主进程(当你的进程死掉时会重新 spawn 一个新的)以及 HTTP 路由器
    老版(1.4 以下)的 Django(没有wsgi.py 文件) 发行版需要设置 evn, module 和 pythonpath (.. 使得我们可以访问 myproject.settings 模块)

    uwsgi --ini data_plot.ini # 启动uwsgi, 一定要在django实际使用的conda环境下,否则会报错
    
      uwsgi --stop data_plot.pid # 停止uwsgi
    
      uwsgi --reload data_plot.pid # 重启uwsgi

    或者 建立一个自启脚本

    sudo vi /etc/init/uwsgi.conf

    内容如下 setuid的值改为你的项目名:

    description "uWSGI application server in Emperor mode"
    start on runlevel [2345]
    stop on runlevel [!2345]
    setuid data_plot
    setgid www-data
    
    exec exec /mnt/d/hegh/miniconda3/envs/data_plot/bin/uwsgi --emperor /mnt/d/hegh/projects/0806/data_plot


    二: 方向代理: Nginx的安装和配置
    1:安装: sudo apt-get install nginx

    2: 创建配置文件: sudo vim /etc/nginx/sites-available/data_plot

    server{
    listen 8030;
    server_name localhost;
    access_log /mnt/d/hegh/projects/0806/data_plot/nginx.access.log;
    error_log /mnt/d/hegh/projects/0806/data_plot/nginx.error.log;
    
    location /static/ {
    root /mnt/d/hegh/projects/0806/data_plot; 或者:alias /mnt/d/hegh/projects/0806/data_plot/static;
    }
    location /favico.ico {
    root mnt/d/hegh/projects/0806/data_plot/static/img/favico.ico;
    }
    location / {
    include /etc/nginx/uwsgi_params;
    uwsgi_pass 127.0.0.1:8030;
    }
    } 
    

      

    然后链接文件:

    sudo ln -s /etc/nginx/sites-available/data_plot /etc/nginx/sites-enabled/


    检查是否有错误:

    sudo service nginx configtest


    出现错误,那就是配置文件写错了,自己检查一下,没有就直接启动!

    sudo service nginx restart


    最后输入,启动uwsgi :

    uwsgi /mnt/d/hegh/projects/0806/data_plot/data_plot.ini -d /mnt/d/hegh/projects/0806/data_plot/data_plot.log

    Django项目setting.py设置:
    DEBUG = False
    一般在开发环境中: 即settings.py中的DEBUG = True 时 , Django 会自动帮助我们处理静态文件,所以不用操心静态文件404的问题,但是在部署时,出于安全考虑,我们必须关闭DEBUG!保证自己网站的信息不泄露。只是当DEBUG关闭后,Djang就不会帮我们处理静态文件了,所以会出现样式丢失,静态文件404问题

    STATIC_URL = '/static/'
    # STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
    STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    )


    1.MEDIA_ROOT:媒体文件,所有上传的文件。示例:图像,文件
    2.STATIC_ROOT 在开发过程中无用,只需要部署。
    在开发中,STATIC_ROOT什么都不做。你甚至不需要设置它。Django在每个应用程序目录(myProject/appName/static)中查找静态文件,并自动提供。
    当你的项目部署时,事情有所不同。很可能你将使用Django提供动态内容,Nginx将提供静态文件。为什么?因为Nginx的效率非常高,并且会减少Django的工作量。
    这时候STATIC_ROOT才有用,因为Nginx不知道你的django项目,不知道在哪里找到静态文件。
    所以你设置STATIC_ROOT = '/some/folder/', 并告诉Nginx寻找静态文件/some/folder/。然后运行manage.py collectstatic,Django将会从所有应用程序复制静态文件/some/folder/。
    3.STATICFILES_DIRS : 静态文件的额外目录
    STATICFILES_DIRS用于包含要查找的其他目录。例如,默认情况下,Django无法识别/myProject/static/。所以你可以把它设置一下。

  • 相关阅读:
    mybatis3这个问题我晕为什么对于配置信息的节点放的位置也会报错
    QTP的那些事增删改查中的增加操作的测试用例及其脚本设计思路
    QTP的那些事importsheet注意的一些事情
    mybatis3中的结果集
    QTP的那些事终极项目脚本设计思路及其测试查询功能的一些实际项目体会
    mybatis+spring整合的几个好的例子
    QTP的那些事操作excel数据需要注意的事
    hibernate4的使用第一步环境搭建
    项目中关于IFRAME引发的问题【出现率很高】
    oracle直接sql语句后台递归查询返回一个树
  • 原文地址:https://www.cnblogs.com/heguihui/p/13934121.html
Copyright © 2020-2023  润新知