阿里云部署win2008 server+Django2.2.1+mysql8.0.15+wfastcgi3.0.0+IIS7项目上线流程
阿里云部署win2008 server+Django2.2.1+mysql8.0.15+wfastcgi3.0.0+IIS7项目上线流程
介绍
这是你已经在本地写好Django文件并且在本地跑起来为开始的教程,只要你本地测试好,这个流程直接带你部署到WIN2008阿里云服务器完毕,其中很多流程中出现的错误都有解答
环境
windows server2008 64位
python3.7
mysql8.0.15
pip19.1.1
Django2.2.1
pymysql0.9.3
mysql-connector2.2.9
wfastcgi3.0.0
1.安装python, mysql ,pip ,Django ,pymysql ,mysql-connector环境
把上面的环境挨个安装下把,这步没什么难度
可以用pip list命令测试一下
pip list
2.测试mysql数据库连接,创建database 并赋予权限,在阿里云中打开服务器所有端口,本地连接服务器数据库测试
首先数据库里面创建一个你django项目需要存放数据库数据的database,然后给授权远程权限
如果没用数据库,那也要打开端口
先进安全组这里,然后选择上面的大区,换成和你自己实例服务器一个大区,这时候就会有一个安全组,点击后面的配置规则
点击添加安全组规则,然后按下图设置开放端口
上面步骤完成后可以用本地一些可视化数据库工具连接一下数据库测试一下
3.项目导入服务器
将Django项目复制到服务器中的C:\inetpub\wwwroot文件夹下,这里注意一点:确保python和项目的安装路径中没有中文,没有空格。将Django中setting文件数据库配置设置更改为创建的database host为内网私有IP
上面NAME为你创建的database的名字
4.在数据库中生成数据表
在CMD中执行下面命令(教程中所有cmd最好都记得都用管理员打开)
生成迁移文件
执行 python manage.py makemigrations 在migrations目录下生成一个迁移文件,此时数据库中还没有生成数据表
执行迁移
执行 python manage.py migrate 相当于执行MySQL语句创建了数据表
测试数据操作
进入到python shell
执行 python manage.py shell
引入包
from myApp.models import /*Grades, Students*/ 此为你的模型名
from django.utils import timezone
from datetime import *
相信会Django都会这几步
5.在上一步生成迁移文件时会报错
找到对应的报错文件Python36-32\Lib\site-packages\django\db\backends\mysql\base.py
将文件中的如下代码注释
改成
if version < (1, 3, 3):
raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)
后面继续报错
找到错误代码(line146):query = query.encode(errors='replace')
解决方法:把decode改为encode即可。
执行上面两部,4就可以执行完毕
6.Django完善,测试
在创建的对应数据库中写入对应Django的mode数据,CMD窗口cd到项目下manage.py文件夹,python manage.py runserver跑起Django测试,若成功项目就部署完毕,进入II7部署步骤(最坑的一步)
7.安装IIS
自行百度搜索,windows server2008安装Internet 信息服务,进行安装,添加角色,安装iis,这点每个WIN版本都不一样,记住是搜索windows server2008这个版本,很多教程都是没注意到这个,2008的Internet 信息服务要自己安装
8.安装wfastcgi
.pip install wfastcgi 然后输入wfastcgi-enable 得到
Microsoft Windows [版本 6.1.7601]
版权所有 © 2009 Microsoft Corporation。保留所有权利。
C:\windows\system32>wfastcgi-enable
已经在配置提交路径“MACHINE/WEBROOT/APPHOST”向“MACHINE/WEBROOT/APPHOST”的“sy
stem.webServer/fastCgi”节应用了配置更改
“D:\toolplace\python3.6.1\python.exe|D:\toolplace\python3.6.1\lib\site-packages
wfastcgi.py” can now be used as a FastCGI script processor
C:\windows\system32>
这里说明安装成功了 记住冒号中的一串字符串,复制下来待会有用
D:\toolplace\python3.6.1\python.exe|D:\toolplace\python3.6.1\lib\site-packages
wfastcgi.py
9.这时候可以通过外网地址测试iis7是否ping通,测试
按我上面流程应该会成功,
打开 Internet 信息服务(IIS)管理器 添加网站
物理路径为manage.py文件目录 ,端口配置,IP地址分配一下比较好
进入该网站处理程序映射,选则添加模块映射,
请求路径*
模块fastcgimodule
路径选择上一步保存的字符串(很重要。不能有空格)
名称起一个
请求限制默认不勾上,不要动
10.web.config配置
这里比较坑,在manage.py目录下所有教程都会直接新建一个web.config文件,但实测操作上面一步会直接生成一个,所以我们文本打开该文件直接编辑
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="DjangoClass"
path="*"
verb="*"
modules="FastCgiModule"
scriptProcessor="C:\Users\Administrator\AppData\Local\Programs\Python\Python37\python.exe|C:\inetpub\wwwroot\classsystem-01\project\wfastcgi.py"
resourceType="Unspecified" />
</handlers>
</system.webServer>
<appSettings>
<!-- Required settings -->
<add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" />
<add key="PYTHONPATH" value="C:\inetpub\wwwroot\classsystem-01\project" />
<add key="DJANGO_SETTINGS_MODULE" value="project.settings" />
<!-- Optional settings -->
<add key="WSGI_LOG" value="C:\inetpub\wwwroot\classsystem-01\project\wsgi.log" />
<add key="WSGI_RESTART_FILE_REGEX" value=".*((\.py)|(\.config))$" />
</appSettings>
</configuration>
handlers会直接生成,没生成复制一下,name改为上一步创建的名称 scriptProcessor改为8里面的记下的路径
appSettings需要复制 PYTHONPATH改为项目目录manage.py路径 DJANGO_SETTINGS_MODULE中project.settings改为你settings存放的文件名
WSGI_LOG为不是必选,位置最好也为manage.py文件路径 C:\inetpub\wwwroot\classsystem-01\project\wsgi.log,其他不动,保存文件
更改后在路径下自己创建一个wsgi.log空文件,之后修改IIS_iusrs对该文件的权限,直接改为完全控制 web.config也更改掉
11.测试网站
在 Internet 信息服务(IIS)管理器中重启网站,然后直接外网连接测试,有问题后再服务器浏览器测试,iis7.0 发生未知 FastCGI错误,错误代码 0x8007010b 的解决办法
修改该网站所对应的应用程序池
进程模型->标识 修改为:LocalSystem
方法为 在起始页下面一个选项的进程池中修改,而不是进入该网页设置
12.再次测试网站,
除了静态文件没加载,其他应该正常,否则检查上面步骤
13.加载静态文件
在Django中settings.py配置:
STATIC_URL = '/static_root/'
STATICFILES_DIRS=[
os.path.join(BASE_DIR, 'static')
]
STATIC_ROOT ='static_root'
#注意这个STATIC_ROOT是路径,不是列表,STATIC_URL是网页获取样式的地址,路径是STATIC_ROOT,不是STATICFILES_DIRS 一开始被坑死
在manage.py文件目录下创建一个STATIC_ROOT对应名称的空文件夹
执行python manage.py collectstatic
就会自动把所有静态文件全部复制到STATIC_ROOT(即static_root)中
如果开启了admin或者(xadmin),这一步是很必要的,不然部署到生产环境的时候会找不到样式文件
以下如果上面成功,不要操作下面的方法
——————————————————————————————————
以下为本来就有static目录,然后自己添加web.config文件的方法
但这这样有问题,比如admin页面样式丢失,推荐上面的方法,上面可以直接自动生成web.config文件
这样配置完,网站就可以访问了,但是都无css,即静态文件访问不了。
解决方法:在static目录下放置一个文件web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<remove name="Python_FastCGI" />
</handlers>
</system.webServer>
</configuration>
name=“Python_FastCGI” 要与前面配置FastCGI名字相同
——————————————————————————————————
13.再次测试网页
这样应该网站就部署成功了!