Django+Nginx+Uwsgi 在云服务器上的布署

本文详细介绍了如何在云服务器上部署Django项目,包括使用pip安装Django和uWSGI,创建并测试uWSGI配置文件,安装Nginx,编辑Nginx配置以代理uWSGI,以及启动和测试整个服务。重点在于配置uwsgi.ini和nginx.conf文件,确保静态文件和媒体文件的正确映射,并提供了解决常见问题的提示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值