Django部署上线 Ubuntu + Nginx + uwsgi + Django3.1 + Python3.8(修改后成功)

前言
因在部署Django项目的时候走了很多坑,因此写下在部署过程中遇到的坑点,仅供参考。

请注意,为了避免不必要的错误,请事先获取root的权限

sudo -s

项目前准备:Django 静态文件收集
将项目拷贝至服务器后,需要修改Django项目的配置信息。

Linux下进入项目的主目录(包含setting.py的文件夹)
关闭Debug模式,可访问的端口设置为所有

在setting文件中,将关于静态文件的相关设定修改为:
STATIC_ROOT = '/home/yanfriends_server/static'
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),)

其中, STATIC_ROOT 是 Django项目上线后去寻找静态文件的路径。剩余两个不在解释。
STATIC_ROOT的路径关系到Nginx配置中的静态文件路径位置

保存文件,并退回至根目录下(与 manage.py 文件同级),执行命令:
python manage.py collectstatic

至此,静态文件收集完成

环境及第三方库
本文的部署环境及用到的第三方库如下所示:(环境和版本的不同,可能同一步骤会有不同的结果)
环境:

Django 3.1
Python 3.8 (这里3.7也是可以的,在购买云服务器的时候默认配置了3.8,因此就没有将版本退回至3.7)
uwsgi 2.0.14
Ubantu 20.04

第三方库

DjangoUeditor
Pillow

在开始之前,请确保你的电脑安装了最基本的Python环境和Pip

安装Nginx
命令如下:

sudo add-apt-repository ppa:nginx/stable
apt-get update
apt-get install nginx

安装完成后,Nginx会自动启动,此时在控制在输入ifconfig 命令查询本机IP地址。在浏览器中输入IP地址即可查看是否安装成功。
能看到这种界面就说明安装成功了:


安装uWSGI
输入命令

pip install uwsgi==2.0.14

即可安装完成。

安装完成后,输入 uwsgi 查看是否有此命令
如果没有,请重新安装

uWsgi 安装失败
如果执行上一步没有报错,请跳过这一步
在购买云服务器的时候,直接输入上方命令时报错。原因如下:

pip未更新
没有添加依赖
因此,在控制台输入:

 python -m pip install --upgrade pip  (pip 更新)
 apt-get install libpython3.8-dev  (添加依赖 请根据Python的版本号对命令进行修改)
1
2
python的版本号通过在控制台输入Python查看

执行完毕后,再次输入pip install uwsgi==2.0.14 即可安装

环境安装
本人在部署的时候,项目需要在云服务器上配置对应的第三库,已经配置好的请跳过。

pip install Pillow 
pip install Django==3.1 
1
2
Django运行测试,在项目根目录下运行命令:

python manage.py runserver 0.0.0.0:1234
1
通过浏览器查看项目是否能够正常运行,并检查功能是否有缺陷

DjangoUeditor报错
如果在部署前可以正常运行,换到服务器上报错,信息如下(随便截的图)


 请找出报错文件,并 vim 进去 , 将其中的93行注释掉
1
vi /usr/local/lib/python3.8/dist-packages/django/forms/boundfield.py
1
具体请参考这篇博客

https://blog.csdn.net/qq_38320702/article/details/82685821

至此,部署上线需要的环境已经配置好了,接下来进入配置部分

Nginx配置
首先,让我们放回Linux系统的根目录

cd ../../../../../
1
进入defult文件后编辑

cd /etc/nginx/sites-available/
vi default
1
2
将改文件的内容全部清空,替换成:

server {
    listen 80;

    listen [::]:80;

    server_name 服务器地址;

    location / {
        include  uwsgi_params;
        uwsgi_pass  127.0.0.1:8000;  
    }

    location /static {   
               alias /home/yanfriends_server/static;
    }
    location /media {
                alias /home/ubuntu/website/media;
    }
    location /api {
               autoindex on;
    }
}

其中, static的路径请根据你的STATIC_ROOT的路径一致
media的路径为你项目中动态资源的路径

更改完成后,重启Nginx服务

service nginx restart
1
uWSGI配置
请进入你项目的路径即有一下文件的目录并建立uwsgi.ini文件

InI 文件配置信息如下:

[uwsgi]
chdir = /home/ubuntu/website
module = website.wsgi:application 
socket = 127.0.0.1:8000
master = true 

# 以上4个是核心配置项

#vhost = true          //多站模式
#no-site = true        //多站模式时不设置入口模块和文件
#workers = 2           //子进程数
#reload-mercy = 10
#vacuum = true         //退出、重启时清理文件
#max-requests = 1000
#limit-as = 512
#buffer-size = 30000
#pidfile = /var/run/uwsgi9090.pid    
daemonize = /home/ubuntu/website/website/run.log
disable-logging = true 


其中,
chdir为项目的根路径
module为项目的主app路径(也不知道怎么说对不对,进去后,一定要有wsgi.py文件)
daemonize 为uwsgi的运行日志文件,后期debug需要用到

请根据以上信息合理修改自己项目的文件路径

修改完毕后,在uwsig.ini文件目录下,运行:

uwsgi --ini uwsgi.ini 
1
至此项目的部署完毕 ,通过IP地址访问即可查看项目

Django部署上线media文件拒接访问(403)
针对于本问题的一个解决方法:
进入目录

cd …/…/…/…/…/
cd /etc/nginx
vi nginx.congif

进入如图所示的界面

选中 Nginx.conf 文件 , 将第一行的用户名改为Root即可


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值