Django + nginx + uwsgi 在云服务器上的布署
1.安装django
pip3 install django
创建app请参考文档
https://docs.djangoproject.com/zh-hans/3.1/intro/tutorial01/
2.安装uwsgi
pip3 install uwsgi
- 测试uwsgi
- 创建文件test.py(vim test.py) 在项目同目录下创建
#test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
- 执行命令 uwsgi --http :8000 --wsgi-file test.py
- 访问网页 http://x.x.x.x:8000 (填入云服务器的ip地址)
- 若出现Hello World则uwsgi安装成功
- 配置uwsgi.ini来启动uwsgi,与manage.py同一目录即可
[uwsgi]
#服务端口
http = :8000
#指定与Nginx通信的方式,不影响uwsgi本身运行。如果配置了需要到nginx中进行相关配置-才能通过nginx访问Django
socket = 127.0.0.1:8077
# 启动一个master进程,来管理其余的子进程
master = True
processes = 4
threads = 2
#python虚拟环境目录绝对路径。如果有的话,home是虚拟环境根目录,PYTHNONHOME是虚拟环境下的bin目录(放置了Python执行文件)
#home = /env
#PYTHONHOME = /env/bin
#django项目目录,与manager.py同级
chdir = /root/app/
#主应用中的wsgi,下面这种配法是在Django根目录下运行uwsgi有效,主APP名为有settings.py的那个目录名。如果是其他目录运行,下面建议写成绝对路径。
wsgi-file = /root/app/app/wsgi.py
#服务停止时自动移除unix Socket和pid文件
vacuum = true
#设置每个工作进程处理请求的上限,达到上限时,将回收(重启)进程,可以预防内存泄漏
max-requests=5000
#设置后台运行保存日志。只要配置了daemonize就会让uwsgi后台运行,同时将日志输出到指定目录
daemonize= /root/app/uwsgierror.log
#保存主进程的pid,用来控制uwsgi服务
pidfile= uwsgi.pid
#uwsgi --stop/reload xxx.pid 停止/重启uwsgi命令
#静态文件映射
#static-map = /static=Django下static目录的绝对路径
~
~
3.安装nginx
sudo apt-get install nginx
- 查看nginx版本
-v 显示 nginx 的版本:nginx -v
-V 显示 nginx 的版本,编译器版本和配置参数:nginx -V - 启动Nginx
/etc/init.d/nginx start #启动
/etc/init.d/nginx stop #关闭
/etc/init.d/nginx restart #重启
启动nginx后,在浏览器中访问自己的主机IP:http://x.x.x.x 或 http://x.x.x.x:80 即可看到安装成功界面 - 配置nginx
我们假设你将会把Nginx程序日志放到你的目录 /var/log/nginx 下,请确保该目录存在。
我们假设你的Django的static目录是 /home/ubuntu/mysite/static
media目录是 /home/ubuntu/mysite/media
请确保这些目录存在。
我们假设你的IP是 x.x.x.x (在调试时你可以设置成你的机器IP)
我们假设你的域名端口是 80(在调试时你可以设置一些特殊端口如 8070)
基于上面的假设,我们为 /etc/nginx/nginx.conf 添加以下配置:
vim /etc/nginx/nginx.conf
在http{…}中的最后一行添加:
server {
listen 8000;
server_name x.x.x.x;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
include /etc/nginx/uwsgi_params;
uwsgi_pass 127.0.0.1:8077; #需要与uwsgi.ini socket一致
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /static/ {
alias /home/ubuntu/mysite/static/;
index index.html index.htm;
}
location /media/ {
alias /home/ubuntu/mysite/media/;
}
location /templates/ {
alias /home/ubuntu/mysite/templates/;
}
}
4.测试
- 重启Nginx服务器,以使Nginx的配置生效。
nginx -s reload
(root权限执行)
重启后检查Nginx日志是否有异常。
vim /var/log/nginx/error.log
查看 error.log 文件内容是否有异常信息 - 注意,若nginx -reload 命令启动失败,则可能误删除了pid文件(进程),则运行 nginx -c /etc/nginx/nginx.conf,然后运行 nginx -reload即可
- 启动uWSGI服务器
cd /home/ubuntu/mysite
uwsgi uwsgi.ini
启动uwsgi
(启动后会生成uwsgi.pid,可以通过pid启动uwsgi)
检查日志 uwsgi.log 是否有异常发现。
uwsgierror.log 日志文件生成在项目目录下,所以进入项目目录执行vim uwsgierror.log
查看 - 访问服务
访问 http://x.x.x.x:8000 - 关闭服务
sudo killall -9 uwsgi