Window服务器部署Django:服务器准备
手里负责了一项Django项目,顺利开发完成原型系统后,导师指示要部署到服务器上,并且给了我一个OpenStack平台的Win10服务器,对于部署项目完全小白的我真是一脸懵,搜了很多博客以及互联网资料,但是杂乱无章、晦涩难懂,搞得我晕头转向。本来以为服务器准备就是拥有一台目标服务器和安装python,可是没想到系列工作一大堆,害,是我想的太简单。
摸索出几天终于有点头绪,所以决定记录下来,如果有类似情况希望有可以给大家一个参考。
项目环境参考:
Win10 64位
Django 3.0
Python 3.8
服务器环境准备及Python环境安装
服务器准备
这个是导师给我的OpenStack平台的win10服务器,当然如果自己部署的话可以购买阿里云服务器。
进入服务器后,要将你的项目放在服务器上,我就随意放在了桌面上。下面是我的Django项目目录。
ps:我使用PyCharm开发的时候用的是虚拟环境。
搭建Python环境
运行好服务器后,首先需要在服务器安装python环境,我的项目使用的python3.8版本,可以通过下方python官网下载指定版本即可。
https://www.python.org/downloads/
在安装Python过程中记得勾选 Add to Path, 直接将python加入到环境变量中去比较方便。
安装好后在cmd测试是否成功。
如果输入python,输出你下载的python版本就OK了。
在Django项目虚拟环境中配置项目依赖包
Pybishe-xxx 是我的项目目录,在项目目录下进入到对应的虚拟目录,activate命令进入虚拟环境
如上成功进入虚拟环境,通过pip list 查看当前环境依赖包。
以上是我的项目依赖包,如果你是第一次搭建服务器环境可能这里要缺少很多依赖包。根据你自己项目的情况,依次pip install即可。
如果不确定要pip哪些包,可以先pip以下基础的也是最重要的包(下载自己项目对应的包版本)。
Django、virtualenv、PyMySQL、sqlparse等
服务器MySQL安装
我使用的mysql版本是8.0.12
https://downloads.mysql.com/archives/installer/
在上方官网,选择对应的MySQL版本安装就好,安装教程参考如下:
https://blog.csdn.net/wangbeibei23/article/details/82056951
ps:
最好重置一下密码:
ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘新密码’;
不然直接连接数据库会报1045错误。
要保证此处的密码和settings.py密码一致才可连接数据库。
反正多试几遍就可以了,我改了很多次才成功。
数据库迁移
python mange.py makemigrations
python mange.py migrate
数据迁移
因为数据库中有大量的数据,所以也要进行数据迁移,在本地开发项目的目录中(注意这里不是服务器),进入虚拟环境输入以下命令:
python mange.py dumpdata > data.json
输入后你的项目目录会出现一个新的文件data.json
如上图最后一个文件。
将data.json移动到你的服务器项目目录下,并进入到服务器项目虚拟环境下执行以下命令:
python manage.py loaddata data.json
这里可能会出现报错 (1062, "Duplicate entry 之类的,反正我是遇到了。解决方法参考
https://blog.csdn.net/thindi/article/details/93471905
报1062错误的原因是mysql里django_content_type有值,现在进去mysql删除表数据
因为有外键关联,解决方法,先解除外键关系,删完再恢复
set foreign_key_checks=0;
truncate table django_content_type;
truncate table auth_permission;
set foreign_key_checks=1;
然后再执行python manage.py loaddata data.json出现如下命令即数据迁移成功。
Installed 477 object(s) from 1 fixture(s)
服务器本地测试运行Django项目
到这里基本服务器的工作就做好了
执行python manage.py runserver
项目能够成功运行。
但是以上也只是将项目部署到服务器本地并且运行,如果结束运行我们还是无法访问项目。所以下一步再探讨如何通过IIS 发布Django项目或者EGNIX。