个人学习笔记,参考文章如下: https://blog.csdn.net/tr_136163798/article/details/120901363 https://www.dusaiphoto.com/article/71/ https://docs.djangoproject.com/zh-hans/3.2/howto/static-files/ https://docs.djangoproject.com/zh-hans/3.2/howto/static-files/deployment/
按照 Django 官方文档的指引,我们已经做好了一个投票应用。我们是在本地开发的,项目最终上线是要部署到服务器上的,本篇笔记记录了我个人部署的整个过程,仅供参考。
站点创建成功!
配置成功
本地打开项目,执行以下命令导出项目依赖包。
pip freeze > requirements.txt
关闭 pycharm,把项目 mysite 做成压缩包,使用宝塔面板上传到网站目录/www/wwwroot/django.sunguoqi.com
宝塔面板可以直接解压文件,不必在命令行中操作。
使用 Xshell 远程主机,进入网站目录,执行以下命令安装虚拟环境。
pip3 install virtualenv
进入项目目录
执行以下命令创建虚拟环境。venv 为虚拟环境的名称,可自定义
virtualenv venv
cd venv
source bin/activate
cd ..
pip3 install -r requirements.txt
报错
ERROR: Failed building wheel for mysqlclient
解决方案
分别执行下以下命令
sudo apt-get install python3 python-dev python3-dev
sudo apt-get install build-essential libssl-dev libffi-dev
sudo apt-get install libxml2-dev libxslt1-dev zlib1g-dev
重新安装数据库引擎
pip3 install mysqlclient
成功
在执行下包安装命令
pip3 install -r requirements.txt
因为安装数据库引擎的时候程序终止了,下面的包还没有装。
成功
python3 manage.py migrate
成功
mysite/setting.py
ALLOWED_HOSTS = ['*']
因为未导入开发时的数据库数据,所以我们现在没有后台账户数据,执行以下命令创建超级用户。
python manage.py createsuperuser
开放你的主机 8000 端口,执行以下命令。
python3 manage.py runserver 0.0.0.0:8000
项目可以正常启动!
当 SSH 会话关闭时,Web 服务也一起被关闭了,导致网站无法连接。我们需要让进程 24 小时不间断的工作,这里我是用 screen 实现的。
apt-get install screen
screen -S django_study
python3 manage.py runserver 0.0.0.0:8000
我们目前还只能用IP:Port
的方式来访问 web,当最终项目上线一般都是用域名去访问的。我们项目的域名对应是django.sunguoqi.com
利用 Nginx 的反向代理就可以将域名和端口建立关系了。
在宝塔面板上配置
访问django.sunguoqi.com/polls/
,没有可用的投票,因为我们后台没添加数据。
访问django.sunguoqi.com/admin/
,
访问django.sunguoqi.com/polls/
进行投票。
本质上我们目前项目使用的还是 Django 自带的 web 服务器,只是用 Nginx 做了一个反向代理。
当我们正式部署项目的时候,我们需要关闭调试,当我们不做任何更改便启动项目,便会出现如下报错。
在项目开发阶段,DEBUG=True 的时候,Django 会用自带的的 web 服务来处理静态文件,但他的性能不是很好。所以在项目部署阶段,DEBUG=False 的时候,Django 便不在管理静态文件了,Django 想让我们把静态文件交给 Nginx(或者其他 web 服务器)来处理。
这个时候就需要我们处理下静态文件。
首先我们将 setting.py 里面的相关配置改成这个样子。
import os
# 关闭调试模式
DEBUG = False
# 允许的服务器
ALLOWED_HOSTS = ['*']
# 静态文件收集目录
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
执行以下命令,对项目中的静态文件进行收集,收集后存放的位置就是我们上面设置的静态文件收集目录。
python3 manage.py collectstatic
在站点配置文件中加入以下内容。
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|woff|woff2)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
location ~ /\.
{
deny all;
}
ok 了!