个人学习笔记,参考文章如下:
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、导出依赖

  本地打开项目,执行以下命令导出项目依赖包。

1
pip freeze > requirements.txt

2、打包上传

  关闭 pycharm,把项目 mysite 做成压缩包,使用宝塔面板上传到网站目录/www/wwwroot/django.sunguoqi.com

3、解压

  宝塔面板可以直接解压文件,不必在命令行中操作。

三、环境安装

1、安装虚拟环境

  使用 Xshell 远程主机,进入网站目录,执行以下命令安装虚拟环境。

1
pip3 install virtualenv

2、创建虚拟环境

  进入项目目录

  执行以下命令创建虚拟环境。venv 为虚拟环境的名称,可自定义

1
virtualenv venv

3、激活虚拟环境

1
cd venv
1
source bin/activate

4、安装依赖包

1
cd ..
1
pip3 install -r requirements.txt

报错

ERROR: Failed building wheel for mysqlclient

解决方案

  分别执行下以下命令

1
sudo apt-get install python3 python-dev python3-dev
1
sudo apt-get install build-essential libssl-dev libffi-dev
1
sudo apt-get install libxml2-dev libxslt1-dev zlib1g-dev

  重新安装数据库引擎

1
pip3 install mysqlclient

成功

  在执行下包安装命令

1
pip3 install -r requirements.txt

  因为安装数据库引擎的时候程序终止了,下面的包还没有装。

成功

四、配置项目数据库

1、修改项目数据库配置信息

2、迁移数据库

1
python3 manage.py migrate

成功

五、启动项目

1、修改项目设置

mysite/setting.py

1
ALLOWED_HOSTS = ['*']

2、创建后台管理超级用户

  因为未导入开发时的数据库数据,所以我们现在没有后台账户数据,执行以下命令创建超级用户。

1
python manage.py createsuperuser

3、启动项目

  开放你的主机 8000 端口,执行以下命令。

1
python3 manage.py runserver 0.0.0.0:8000

  项目可以正常启动!

六、Screen 进程托管

  当 SSH 会话关闭时,Web 服务也一起被关闭了,导致网站无法连接。我们需要让进程 24 小时不间断的工作,这里我是用 screen 实现的。

1、安装 screen

1
apt-get install screen

2、创建一个 screen

1
screen -S django_study

3、启动项目

1
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 里面的相关配置改成这个样子。

1
2
3
4
5
6
7
8
9
10
import os

# 关闭调试模式
DEBUG = False

# 允许的服务器
ALLOWED_HOSTS = ['*']

# 静态文件收集目录
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

2、收集静态文件

  执行以下命令,对项目中的静态文件进行收集,收集后存放的位置就是我们上面设置的静态文件收集目录。

1
python3 manage.py collectstatic

3、配置 Nginx

  在站点配置文件中加入以下内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|woff|woff2)$
{
expires 30d;
}

location ~ .*\.(js|css)?$
{
expires 12h;
}

location ~ /\.
{
deny all;
}

4、启动项目

  ok 了!