zoukankan      html  css  js  c++  java
  • Django项目部署

    一、安装sqlite
    [root@web01 ]# yum -y install sqlite sqlite-devel
    [root@web01 ]# wget --no-check-certificate https://www.sqlite.org/2017/sqlite-autoconf-3170000.tar.gz --no-check-certificate
    [root@web01 sqlite]# ./configure --prefix=/usr/local/sqlite3 --disable-static --enable-fts5 --enable-json1 CFLAGS="-g -O2 -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS4=1 -DSQLITE_ENABLE_RTREE=1"
    [root@web01 sqlite]# make && make install

    二、重新编译安装python3.6
    [root@web01 ]# cd Python-3.6.0    #python3.6默认编译安装的路径为/usr/local/bin
    [root@web01 Python-3.6.0]# LD_RUN_PATH=/usr/local/sqlite3/lib ./configure LDFLAGS="-L/usr/local/sqlite3/lib" CPPFLAGS="-I /usr/local/sqlite3/include"
    [root@web01 Python-3.6.0]# LD_RUN_PATH=/usr/local/sqlite3/lib make
    [root@web01 Python-3.6.0]# LD_RUN_PATH=/usr/local/sqlite3/lib make install
    [root@web01 ]# python3
    >>> import sqlite3            #验证sqlite是否正确安装

    三、安装配置uwsgi
    (env) [root@web01 ~]# pip install uwsgi     #进入虚拟环境安装uwsgi模块
    [root@web01 ~]# pip3 install uwsgi    #也可直接安装到python3目录
    使用上面的安装方法启动uwsgi的方式需要改为
    [root@web01 ~]# /usr/local/bin/uwsgi --ini uwsgi.ini
    uwsgi使用参数方式运行django项目,测试uwsgi模块是否能正常工作
    [root@web01 ]#  /root/python3-env/env/bin/uwsgi --http 10.47.39.8:8080 --chdir /root/project --home=/root/python3-env/env/ --module project.wsgi
    说明:--home:指定python3虚拟环境路径,如果不使用虚拟环境运行可以去掉。--chdir:指的是django项目文件实际路径,project.wsgi:指的是project中的wsgi.py文件
    uwsgi使用配置文件方式运行django项目
    [root@web01 ~]# /root/python3-env/env/bin/uwsgi --ini uwsgi.ini    #把uwsgi模块安装到python3虚拟环境的启动方式
    [root@web01 ~]# vim uwsgi.ini      #创建uwsgi.ini文件

    # myweb_uwsgi.ini file
    [uwsgi]
    #配置uwsgi以nginx用户运行
    uid         = nginx
    # Django-related settings
    #如果你想临时使用http访问uwsgi服务。那么需要把之前的uwsgi服务停止,并使用下面命令来启动
    #uwsgi --http :8000 --wsgi-file application.py
    #如果是使用uwsgi.ini配置文件,那么修改里面内容把socket=:8000替换成http=:8000。 
    #然后再次启动uwsgi --ini /patch/to/uwsgi.ini
    #注意:以上两种方式启动不能混用,例如使用uwsgi --http :8000 --ini /path/to/uwsgi.ini会造成端口已经被占用的错误
    #http = 10.47.39.8:8080
    socket          = /root/project/uwsgi.sock
    #配置socket的连接IP和端口
    socket          = 127.0.0.1:7000
    # the base directory (full path)(指定项目文件的绝对路径)
    chdir           = /root/project
    
    # 指定django项目中静态文件的路径(一般不配置可使用nginx处理静态文件效率更高)
    static-map      = /static/=/root/project/statics
    
    # Django s wsgi file
    module          = project.wsgi
    #或指定wsgi.py文件在项目中的路径
    #wsgi-file      = project/wsgi.py 
    #home:指定python3虚拟环境的绝对路径(使用虚拟环境运行时则开启该项)
    home            = /root/python3-env/env/
    max-requests    = 5000
    #让uWSGI在后台运行并将日志打到 /var/log/uwsgi/uwsgi.log文件中
    daemonize       = /var/log/uwsgi/uwsgi.log
    #使uWSGI在后台运行,并且将日志消息发送给监听192.168.0.100:4000这个地址的udp服务器
    #daemonize      = 192.168.0.100:4000
    #buffer-size:设置用于uwsgi包解析的内部缓存区大小(默认是4k),如果要接受一个拥有很多请求头的大请求,你可以增加这个值到64k
    buffer-size     = 32768
    
    # process-related settings
    # master(启动主进程)
    master          = true
    
    # 指定进程和线程数
    processes       = 2
    threads         = 2
    #指定pid文件路径
    pidfile         = /opt/proj/script/uwsgi.pid
    # ... with appropriate permissions - may be needed
    #默认权限为666,设置socket文件的权限为664
    # chmod-socket  = 664
    #设置socket文件运行用户和属组(用户:组)
    #chown-socket   = nginx:nginx
    # vacuum:自动移除unix Socket和pid文件当服务停止的时候
    vacuum          = true

     uwsgi.ini文件参考配置

    # myweb_uwsgi.ini file
    [uwsgi]
    
    # Django-related settings
    uid    = nginx
    socket  = 127.0.0.1:7000
    #socket = /root/project/script/uwsgi.sock
    #http            = 10.47.39.8:8080
    # the base directory (full path)
    chdir           = /root/project
    
    # Django s wsgi file
    #module         = project.wsgi
    wsgi-file       = project/wsgi.py
    home            = /root/python3-env/env/
    max-requests    = 5000
    daemonize       = /var/log/uwsgi/project.log
    pidfile         = /root/project/script/uwsgi.pid
    # 指定静态文件
    #static-map      = /static/=/root/project/car/statics
    #buffer-size     = 65536
    # process-related settings
    # master
    master          = true
    
    # maximum number of worker processes
    processes       = 2
    threads         = 4
    chown-socket    = nginx:nginx
    #chmod-socket = 666
    # ... with appropriate permissions - may be needed
    # chmod-socket    = 664
    # clear environment on exit
    vacuum          = true
    View Code

    四、nginx配置

    server {
    listen 80;     # 要监听的端口
    server_name localhost; # 配置域名
    access_log /var/log/nginx/access.log main;  # Nginx日志配置
    charset utf-8;  # Nginx编码
    gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream; # 支持压缩的类型
    
    error_page 404 /404.html; # 错误页面
    error_page 500 502 503 504 /50x.html; # 错误页面
    
    # 指定uwsgi路径
    # 这个location和咱们Django的url(r'^admin/', admin.site.urls)作用是一样的
    location / {
    include uwsgi_params;   # 导入一个Nginx模块它是用来和uWSGI进行通讯的
    uwsgi_connect_timeout 30;  # 设置连接uWSGI超时时间
    uwsgi_pass unix:/root/project/script/uwsgi.sock;  # 指定uwsgi的sock文件所有动态请求就会直接丢给他
    #uwsgi_pass 127.0.0.1:7000;  #指定sock地址和端口(指定sock文件和sock地址加端口这两种方式二选一)
    }
    
    # 指定静态文件路径,使用sock文件连接可使用以下配置方式(需要使用root用户运行nginx)
    location /static/ {
    alias /opt/proj/teacher/static/;
    index index.html index.htm;
    }
    #当配置为使用sock地址和端口连接uwsgi时使用下面的配置方式,需要把静态文件copy到nginx的html目录(使用非root用户配置方式)
    #[root@web01 nginx]# ls html/
    #50x.html  index.html  static
    location /static/ {
    root html;
    index index.html index.htm;
    }

     注:
          nginx以非root用户运行时uwsgi_pass选项不能使用sock文件的方式连接,否则会报以下错误
          connect() to unix:/root/scienbizip/script/uwsgi.sock failed (13: Permission denied)

     参考链接:

        https://www.cnblogs.com/chenice/p/6921727.html
        http://www.cnblogs.com/zhouej/archive/2012/03/25/2379646.html #uwsgi参数详解

  • 相关阅读:
    由AbstractQueuedSynchronizer和ReentrantLock来看模版方法模式
    Java并发编程-CAS
    Java并发编程-volatile
    Java并发编程-synchronized
    学习几个协议
    邻接矩阵存储简单路径(1070)
    输出利用先序遍历创建的二叉树的层次遍历序列(0980)
    中缀表达式转换为后缀表达式(1042)
    特定字符序列的判断(1028)
    舞伴问题(1027)
  • 原文地址:https://www.cnblogs.com/xwupiaomiao/p/9685779.html
Copyright © 2011-2022 走看看