Nginx+uwgsi socket部署
使用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协议,端口8001module mysite.wsgi
: load the specified wsgi modulehome=/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监听的端口)
现在静态文件也已经可以加载,也能上传文件。