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