前言
因在部署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即可