Django + uwsgi + nginx on Centos7
安装 python3.9
查看:教程
看完上面的教程后,创建一个虚拟环境,在虚拟环境中安装 django, uwsgi
django 设置
首先,将 django 项目放到 linux 服务器上。设置 django 项目的配置文件:/root/blog_site/blog/settings.py
(这是本文项目配置文件的地址, blog_site
是项目文件夹)
修改 settings.py
中的如下三个参数:
DEBUG = False # 关闭调试模式
ALLOWED_HOSTS = ['*'] # 允许其他主机连接
STATIC_ROOT = BASE_DIR / 'static' # 添加这个变量,用来收集所有的静态资源
执行:
python manage.py collectstatic
将项目中所有用到的静态文件,统统收集到
STATIC_ROOT
定义的文件夹中,这样,nginx 就可以直接访问这个目录,来访问静态资源。
Nginx 配置
nginx 安装和基础了解,查看:教程
简单配置:
/usr/local/nginx/conf/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream django { # 定义一组服务器池
server 0.0.0.0:8082; # 使用这个地址和 uwsgi 通信
}
server {
listen 80;
server_name ip_address; # 这里填写你自己服务器的 ip 地址
charset utf-8;
gzip on;
gzip_disable "msie6";
gzip_proxied any;
gzip_min_length 1k;
gzip_comp_level 4;
access_log logs/host.access.log;
location /media {
alias /root/mysite/media; # 指向 django 的 media 目录(绝对路径)
}
location /static {
alias /root/blog_site/static; # 指向 django 的 STSTIC_ROOT 目录(绝对路径)
}
location / {
uwsgi_pass django; # 设置 uWSGI 的地址
include /usr/local/nginx/conf/uwsgi_params; # 包含进来的 uwsgi 配置
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
重新加载 ngnix 设置:
# 先进入你 nginx 安装目录的 sbin 下
./nginx -s reload
uwsgi 配置
在 python 虚拟环境下安装 uwsgi
包
创建 /root/blog_site/uwsgi.ini
: (注意这个配置文件,放到了 django 项目的根目录)
[uwsgi]
# 项目的绝对路径,定位到项目的第一层
chdir = /root/blog_site
# 指明 django 项目的 wsgi.py 文件路径
module = blog.wsgi
# 指明你的 python 虚拟环境的目录
home = /root/Envs/venv
# 指明通过uwsgi,启动多少个进程
processes = 5
# 如果你已经配置了nginx(启动了nginx服务,配置了uwsgi_pass),请用这个socket连接
# socket 的值,一定要和 nginx 配置的地址一模一样!
socket = 0.0.0.0:8082 # 使用这个,将下面的http注释掉
# 如果你没用nginx,想通过uwsgi直接启动web服务,指明http协议
#http = 0.0.0.0:9999
# 在退出uwsgi环境后,清空环境变量
vacuum = true
执行命令:
cd /root/blog_site
uwsgi --ini uwsgi.ini # 运行 uwsgi
完成,此时在浏览器访问:linux服务器的ip
,应该就能访问你的 django 网站了。
这也是我参考了很多教程后写出来的,但也只能算是一个 demo,不能面向复杂的实际场景,尤其是 nginx 的配置。