【django+drf+nginx+uwsgi+http项目部署】

2 篇文章 0 订阅
2 篇文章 0 订阅

django+drf+nginx+uwsgi+http项目部署

以下操作都在centos 7.X服务器中操作

  1. 在/var/www/目录下创建项目文件夹,例如创建house_statistic_query_dev如下
[root@lidong www]# pwd
/var/www
[root@lidong www]# ls
house_statistic_query_dev
  1. 将前端项目,后端代码项目放到house_statistic_query_dev里,并创建配置文件夹(dev_config)
[root@lidong house_statistic_query_dev]# pwd
/var/www/house_statistic_query_dev
[root@lidong house_statistic_query_dev]# ll
total 4
drwxr-xr-x.  4 root root  105 Nov 19 09:03 dev_config 
drwxr-xr-x. 14 root root  282 Nov 17 03:27 house_statistic_query_backend 
drwxr-xr-x. 10 root root 4096 Nov 19 07:09 house_statistic_query_front
  1. 在dev_config文件夹下创建uwsgi文件夹,venv虚拟环境
[root@lidong dev_config]# pwd
/var/www/house_statistic_query_dev/dev_config
[root@lidong dev_config]# ll
total 12
drwxr-xr-x. 2 root root   70 Nov 23 02:04 uwsgi  # make uwsgi
drwxr-xr-x. 6 root root   92 Nov 17 03:26 venv   #执行python -m venv venv完成创建
  1. 激活虚拟环境
[root@lidong ~]# source /var/www/house_statistic_query_dev/dev_config/venv/bin/activate
(venv) [root@lidong ~]#
  1. 进入项目目录,检测该Django项目目录是否能够正确启动
(venv) [root@lidong house_statistic_query_backend]# python3 manage.py runserver 172.16.10.239:8833
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
November 29, 2021 - 15:31:28
Django version 3.0.7, using settings 'settings.dev'
Starting development server at http://172.16.10.239:8833/
Quit the server with CONTROL-C.
  • 如果DEBUG = True,浏览器访问你应看到:
    在这里插入图片描述

  • 如果DEBUG = False,浏览器访问你应看到:
    在这里插入图片描述

  1. 在uwsgi文件夹下创建uwsgi.ini文件
[uwsgi]
# 如果我们想直接将uwsgi用作服务,直接暴露在公网那么就使用http;
# 如果有单独的服务器,由服务器将请求转发给uwsgi处理,并且使用http协议,那么此时使用http-socket
# http的端口,http 一般是作为独立部署的选项; http-socket 在前端webserver不支持uwsgi时使用,
# nginx的端口,前端webserver支持uwsgi, 则直接使用socket即可(tcp or unix)
http= :8081
#socket=:8082
http-keepalive=1
# 项目所在的目录
chdir=/var/www/house_statistic_query_dev/house_statistic_query_backend
# wsgi所在的位置(django项目的wsgi.py文件)
module=house_statistic_query_backend.wsgi:application
# 替换uwsgi.py文件下的os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'house_bi.settings')
env = DJANGO_SETTINGS_MODULE=settings.dev
# 设置静态文件
static-map = /ui=/var/www/house_statistic_query_dev/house_statistic_query_backend/static
# 启动主进程
master=true
# 进程个数
workers=3
# 在每个worker而不是master中加载应用
lazy-apps=true
# 每个进程最大请求个数
max-requests=2000
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 自动移除unix Socket 和 Pid 文件 当服务停止的时候
vacuum=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 序列化接受的内容,如果可能的话
thunder-lock = true

buffer-size = 65536
# 进程个数
processes=4

threads=2

chmod-socket=664

pidfile=/var/www/house_statistic_query_dev/dev_config/uwsgi/uwsgi.pid
#日志所在位置
logto=/var/www/house_statistic_query_dev/dev_config/uwsgi/uwsgi.log

注意:对于http请求,此时可以设置static-map对应的静态文件路径,如果不设置,会导致浏览器无法访问静态文件,当然对于静态文件,交给nginx处理效率比较高,所以一般情况下会使用nginx来处理,因为对于admin后台来说,因为使用群体不大,采用static-map映射即可
/ui:表示Django setting.py文件静态文件名称(与settings.py对应即可)
在这里插入图片描述

STATIC_URL = '/ui'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_ROOT = os.path.join(BASE_DIR, 'upload').replace('\\', '/')
MEDIA_URL = '/upload/'

  1. 使用uwsgi启动django服务器。
(venv) [root@lidong uwsgi]# uwsgi -d --ini  uwsgi.ini 
[uWSGI] getting INI configuration from uwsgi.ini
(venv) [root@lidong uwsgi]# ll
total 400
-rw-r--r--. 1 root root   1710 Dec  1 06:31 uwsgi.ini
-rw-r-----. 1 root root   5119 Nov 29 07:49 uwsgi.log
-rw-rw-rw-. 1 root root      5 Nov 29 07:50 uwsgi.pid
  1. 查看是否启动成功
    在这里插入图片描述

  2. 下载nginx,并配置nginx.conf文件如下,并启动nginx

主要添加:proxy_pass http://172.16.10.239:8081;

user  root;
worker_processes  2;
error_log  /software/nginx/logs/error.log warn;
#pid        /software/nginx/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /software/nginx/logs/access.log  main;
    sendfile            on;
    keepalive_timeout   1800;


    server {
      listen 80;
      server_name 172.16.10.239;  # 服务器 ip 或是域名
      charset     utf-8;  # 字符集
      gzip  on;
      gzip_min_length 1k;
      gzip_buffers 4 16k;
      gzip_comp_level 3;
      gzip_types text/plain text/css application/xml application/javascript application/x-javascript text/javascript;

      location /  {
        root  /var/www/house_statistic_query_dev/house_statistic_query_front/dist;
        add_header Cache-Control no-cache;
        add_header Access-Control-Allow-Oriain '*';
        index html index.html;
        try_files $uri $uri/ /index.html;

      }

     # 由于在Django的setting.py文件中指定了以/ui开头路径访问静态资源
      location /ui{
        alias  /var/www/house_statistic_query_dev/house_statistic_query_backend/static;
        index index.html index.htm;
      }


      location /api/ {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $http_host;
            client_body_buffer_size 10M;
            client_max_body_size 10G;
            proxy_buffers 65536 4k;
            proxy_read_timeout 216000;
            proxy_connect_timeout 216000;
            proxy_send_timeout 216000;
            send_timeout 216000;
            proxy_next_upstream error timeout http_404;
            proxy_pass http://172.16.10.239:8081;
      }

      location /admin {
        proxy_pass http://172.16.10.239:8081;
    }
   }

}


  1. 检查是否配置成功,此时静态文件可以正常加载。
    在这里插入图片描述

  2. 检查是否与后端连接成功,检查登陆功能。
    在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux系统上部署Django + nginx + uWSGI的步骤如下: 1. 安装必要的软件 在Linux系统上安装必要的软件包,包括Python、pip、nginxuWSGI等。 2. 创建Django项目 使用Django创建一个新项目或使用现有的Django项目。 3. 配置uWSGIDjango项目的根目录下创建一个uwsgi.ini文件,用于配置uWSGI。示例配置如下: ``` [uwsgi] # 指定运行模式为WSGI http = :8000 # 指定Django应用的wsgi模块 wsgi-file = myproject.wsgi # 指定进程数 processes = 4 # 指定线程数 threads = 2 # 指定静态文件路径 static-map = /static=/path/to/static # 指定日志路径 logto = /path/to/logfile ``` 其中,http参数指定了监听的端口号,wsgi-file参数指定了Django应用的wsgi模块,processes参数指定了进程数,threads参数指定了线程数,static-map参数指定了静态文件的路径,logto参数指定了日志文件的路径。 4. 配置nginxnginx的配置文件中添加以下内容: ``` server { listen 80; server_name example.com; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { uwsgi_pass 127.0.0.1:8000; include uwsgi_params; } location /static { alias /path/to/static; } } ``` 其中,server_name指定了域名,access_log和error_log指定了日志文件的路径,uwsgi_pass指定了uWSGI的地址和端口号,include指定了uWSGI的参数。 5. 启动uWSGI服务 使用以下命令启动uWSGI服务: ``` uwsgi --ini uwsgi.ini ``` 6. 启动nginx服务 使用以下命令启动nginx服务: ``` sudo service nginx start ``` 这样就完成了Django + nginx + uWSGI的部署。可以通过访问该网站的域名来验证是否部署成功。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值