user_img

tomato92

目录


    Linux下Nginx+uwsgi部署Django项目

    服务器激活Django项目

    1.启动Django项目

    进入项目目录

    -python manage.py runserver 0.0.0.0:8000

    这样的话就可以在服务器的8000端口访问到Django项目(注意开放服务器端口,防火墙或者阿里云安全组设置开开放端口),但是速度不是很快需要配合uwsgi使用。

    2.uwsgi启动

    1.安装uwsgi
    pip install uwsgi
    2.在文件下创建uwsgi配置文件 - uwsgi.ini

    文件中配置uwsgi服务

    [uwsgi]
    project=blog
    #base = /project/blog
    socket=172.19.54.124:8080
    chdir = /project/blog
    module = blog.wsgi:application
    processes = 2
    threads = 2
    master = Ture
    pidfile = uwsgi.pid
    buffer-size = 65535
    pythonpath = /program/miniconda3/envs/py3.8/lib/python3.8/site-packages
    static-map = /static=/project/blog/blog/static

    ip注意事项

    如果是阿里云或者腾讯云等云服务器。

    第三行参数ip设置是不能设置127.0.0.1的,127.0.0.1应该替换成云服务器的内网ip。

    不建议设置成0.0.0.0,可能会有风险。

    http 或 socket参数

    第三行参数的可以是socket,也可以是http

    如果只是使用uwsgi+django服务,可以先设置成http,这时候可以直接访问。

    如果是使用uwsgi+django+nginx,这时候就要设置成socket,保持socket与Nginx中的uwsgi_pass参数设置一致.

    Django静态文件设置问题
    解决方案1

    STATIC_ROOT这个参数,在runserver情况下是无用的,因为Django自己知道位置在哪。

    在集成了django.contrib.staticfiles后,./manage.py多了一个子命令。

    ./manage.py collectstatic

    这个子命令,会把所有STATICFILES_DIRS目录下的文件,都复制到STATIC_ROOT中。 在这里,也就是/srv/django/static目录下。

    uWSGI也是支持静态文件的,可以通过执行时添加参数:

    uwsgi --static-map /static=/srv/django/static

    或者,在配置文件中添加:

    static-map = /static=/srv/django/static

    =前面的/staticuWSGI的URL前缀,而后面的/srv/django/static则是静态文件的路径。 这个路径,通常使用绝对路径,但也支持相对路径。

    所以,生产环境部署时,解决方案一共分两步:

    1. 使用collectstatic子命令,收集、复制相关静态文件。

    2. 启动uWSGI,其中包含static-map配置、或--static-map参数。

    解决方案2

    1.访问需要设置允许的ip;

    # DEBUG = True
    DEBUG = False
    # *允许所有
    ALLOWED_HOSTS = ['127.0.0.1']

    2.静态文件丢失由于DEBUG = False后,静态文件夹的路由丢失了,需要配路由; settings.py:

    STATIC_URL = '/static/'
    STATIC_ROOT = 'static'

    #这个是设置静态文件夹目录的路径
    # STATICFILES_DIRS = (
    #     os.path.join(BASE_DIR, 'static'),
    # )
    # STATICFILES_DIRS=[os.path.join(BASE_DIR,’static’)] 这句是需要注释的

    STATIC_ROOT=os.path.join(BASE_DIR,’static’) #用于处理静态文件

    MEDIA_ROOT=os.path.join(BASE_DIR,’media’) # 用于处理上传的文件

    主urls.py:

    from django.views import static ##新增
    from django.conf import settings ##新增
    from django.conf.urls import url ##新增
    from django.conf.static import serve


    urlpatterns = [
    ## 静态文件夹路由
      url(r'^static/(?P<path>.*)$', serve,
        {'document_root': settings.STATIC_ROOT}, name='static'),
    ]

    然后在执行静态文件收集

    python manage.py collectstatic # 收集全部静态文件到STATIC_URL定义的路径内

     

    启动uwsgi
    uwsgi --ini uwsgi.ini

    就可以在8080端口访问到Django项目

     

    Nginx+uwsgi+Django启动项目

    1.安装Nginx
    apt-get install nginx
    2.修改配置文件

    /etc/nginx/nginx.conf目录下

    user root;
    worker_processes auto;
    pid /run/nginx.pid;
    include /etc/nginx/modules-enabled/*.conf;

    events {
    worker_connections 768;
    # multi_accept on;
    }

    http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    types_hash_max_size 2048;
    # server_tokens off;
    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # SSL Settings
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    server {
      listen     8000;
      server_name   blog;
       
      charset utf-8;
       
      location / {
          include     uwsgi_params;
          uwsgi_pass 172.19.54.124:8080;  
          uwsgi_param UWSGI_SCRIPT blog.wsgi;
          uwsgi_param UWSGI_CHDIR /project/blog;  
      }

      location /media {
      alias /project/blog/blog/media;
    }

      location /static {
          alias /project/blog/blog/static;
      }
      }

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
    }


    #mail {
    # # See sample authentication script at:
    # # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
    #
    # # auth_http localhost/auth.php;
    # # pop3_capabilities "TOP" "USER";
    # # imap_capabilities "IMAP4rev1" "UIDPLUS";
    #
    # server {
    # listen     localhost:110;
    # protocol   pop3;
    # proxy     on;
    # }
    #
    # server {
    # listen     localhost:143;
    # protocol   imap;
    # proxy     on;
    # }
    #}

    #注意事项

    user一定要为root

    需要配置静态文件目录

    启动Nginx
    nginx

     

     

     

     

     




    请先登录后回复

    评论区空空如也...快来评论吧

    没叶子了?