Django学习13-部署(nginx)

本文介绍如何使用Nginx和uWSGI部署Django Web应用,包括安装配置步骤、使用配置文件简化启动过程及解决常见问题。


使用uWSGI和nginx部署Django web应用是主流的用法,参考uWSGI官方的教程: https://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html?highlight=.ini#setting-up-django-and-your-web-server-with-uwsgi-and-nginx
涂老师的Django部署: https://code.ziqiangxuetang.com/django/django-nginx-deploy.html

完整的配置:

the web client <-> the web server <-> the socket <-> uwsgi <-> Django

uWSGI

WSGI(Web Server Gateway Interface)web服务器-网关接口,是一个Web服务器(如nginx)与web应用(如Django、Flask框架写的程序)通信的一种规范(通信协议)。
uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型。
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议,负责响应python 的web请求。

从客户端请求到web程序响应的过程:

在这里插入图片描述

使用uWSGI部署

安装uWSGI:

apt-get install build-essential python
apt-get install python-dev
pip3 install uwsgi --upgrade

安装后可以使用uWSGI启动项目:uwsgi --http :8001 --chdir /path/to/project --home=/path/to/env --module project.wsgi

  • http :8001 : 使用http协议,端口8001
  • module mysite.wsgi: load the specified wsgi module
  • home=/path/to/env:指定virtualenv 路径

若是出现无法加载插件的警告,就添加--plugin python3

ulysses@ulysses:~$ uwsgi --http :8001 --chdir /home/ulysses/PycharmProjects/django_ulysses --home=/home/ulysses/PycharmProjects/django_ulysses/venv --module django_ulysses.wsgi

这样项目就运行了:
在这里插入图片描述
在浏览器输入网址127.0.0.1:8001可以看到网页已经形成了。
在这里插入图片描述

使用配置文件

启动uWSGI用的这条命令太长了,使用.ini配置文件,直接将其放在项目目录下,输入内容
djangi_ulysses.ini

[uwsgi]
# 指定项目执行的端口号
# the socket (use the full path to be safe
# socket = /path/to/your/project/mysite.sock
http = 127.0.0.1:8080
plugin = python3
# Django项目根目录 (绝对路径)
chdir = /home/ulysses/PycharmProjects/django_ulysses

# Django wsgi.py文件的位置
wsgi-file = django_ulysses/wsgi.py

# 最大运行的进程数
processes = 4

# 允许主线程存在(true)
master = True


# 当服务器退出的时候自动清理环境,删除unix socket文件和pid文件
vacuum = True

# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit

# the virtualenv (full path)
home = /home/ulysses/PycharmProjects/django_ulysses/venv

启动时直接:uwsgi --ini ***.ini
关闭命令可以用结束进程的方法:sudo killall -9 uwsgi
开启后查看网页:
在这里插入图片描述
网页能成功打开,但图片没有加载。

Nignx

Nginx(engine-x) 是一个高性能的 Web 和反向代理服务器。 作为web服务器相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应。它还可以作为负载均衡服务器和邮件代理服务器使用。

nginx安装和配置

安装nginx:

ulysses@ulysses:~$ sudo apt install python-dev nginx

打开/etc/nginx/sites-available/default文件,删除所有内容后输入后输入:

server {
    # 访问时用的端口
    listen      80;
    # 服务器名 ,用本机地址
    server_name localhost;
    charset     utf-8;
    # 日志文件和错误日志
    access_log      /var/log/nginx/myweb_access.log;
    error_log       /var/log/nginx/myweb_error.log;
 
    client_max_body_size 75M;
 
    # Django media文件路径
    location /media  {
        alias /home/ulysses/PycharmProjects/django_ulysses/media;
    }
    # 静态文件路径 
    location /static {
	# 静态和媒体文件夹中的所有内容将在30天内由浏览器缓存
	expires 30d;
	# 启用目录流量, 默认为off,显示的文件时间为GMT时间。改为on后,显示的文件时间为文件的服务器时间
        alias /home/ulysses/PycharmProjects/django_ulysses/collected_static;
    }
    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass  unix:///home//ulysses/PycharmProjects/django_ulysses/django_ulysses.sock;
        include     /etc/nginx/uwsgi_params;
    }
}

修改之前的uwsgi配置文件,使用socket,并设置文件的权限和所有者(在Apache2部署时设置过文件权限和所有者)。

socket = /home/ulysses/PycharmProjects/django_ulysses/django_ulysses.sock
# http = 127.0.0.1:8080
# ...
# ... with appropriate permissions - may be needed
chmod-socket    = 666
chown-socket = ulysses:www-data

因为使用的是nginx的default.conf,直接重启nginx服务即可:
sudo service nginx reload或是sudo service nginx restart,使新定义的conf文件:sudo ln -s ~/path/to/your/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/激活网站。
运行uWSGI,重启nginx后,重新打开80端口(nginx监听的端口)
在这里插入图片描述

现在静态文件也已经可以加载,也能上传文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值