本文主要记录了vs生成的flask项目的发布流程。
网站发布flask项目到iis的教程很多,但是通常的项目发布和vs上生成的flask项目结构不太一样。
(为了什么别的IDE生成的项目都没有runserver,搞得我一脸懵逼)
鬼知道我为了自己做个小网站经历了些什么。T—T
这里我主要是参考了vs的官方文档(果然还是官方大大的东西好使),有问题的可以在这里找找
https://docs.microsoft.com/zh-cn/visualstudio/python/configure-web-apps-for-iis-windows?view=vs-2019
废话不多说开始正文内容
1.网站本地发布
- 在vs项目中解决方案资源管理器中右键项目名即有发布选项
- 依次选择 发布-启动-文件夹(创建在什么位置可以自由选择,这里只是存放网站文件的目录)-创建配置文件
- 点击发布,生成本地网站文件
2.服务器IIS配置(我用的winserver2012)
- 可以在服务管理器-添加角色和功能处安装IIS
- 为了发布python网站CGI功能必须安装,该选择在web服务器-应用程序开发(为了靠谱起见,程序开发里的功能最好都装了)-CGI
- 依次点击下一步直至安装成功
3.wfastcgi的安装
- 直接用pip安装wfastcgi库(pip install wfastcgi)(本地需要python环境配置,这里不多赘述)
- 找到本地的python目录/Scripts/ ,运行wfastcgi-enable.exe
这里红圈圈出来的 c:\python37\python.exe|c:\python37\lib\site-packages\wfastcgi.py 需要记下来后面会用到
注: 1.c:\python37\python.exe 为服务器的python运行程序位置,依个人安装位置决定
2.c:\python37\lib\site-packages\wfastcgi.py 为python目录下的lib\site-packages\wfastcgi.py 这里我们可以把这个wfastcgi.py拷贝到网站目录下(具体原因后面再做解释)
3.如果生成出现了问题可以运行wfastcgi-disable.exe解除加载,再重新生成一次。
4.网站配置文件web.config的编写
在网站根目录下创建文件web.config(与runserver.py同一级目录)
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="PythonHandler" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\Users\Administrator\AppData\Local\Programs\Python\Python38\python.exe|c:\web\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
</handlers>
</system.webServer>
<appSettings>
<add key="PYTHONPATH" value="c:\web" />
<!-- The handler here is specific to Bottle; see the next section. -->
<add key="WSGI_HANDLER" value="tool.app" />
</appSettings>
</configuration>
注:1.这里PythonHandler中的scriptProcessor属性即为上文提到的通过 wfastcgi-enable程序获得的文件路径值。
2.PYTHONPATH值为网站的目录
3.WSGI_HANDLER的值需要提一下,为'项目名称.app' 图中的tool即时我这个flask项目的名字
4.官方文档中还有<httpPlatform>的属性,但实际中添加该内容会导致网站无法运行,具体原因不知。
5.IIS配置网站
1.iis中添加网站(这个简单部分不多赘述)
2.接下来在对应网站目录下选择‘处理程序映射’(如果web.config配置错误,这里可能会无法打开)
3.右键添加模块映射
注:1.可执行文件内容是之前wfastcgi-enable获取到的路径,详见第三节。
2.名称自定义即可。
3.请求限制中去除映射内容的勾选。
4.设置网站文件夹的目录权限(怕麻烦可以直接给everyone设置所有权限)
6.完成
访问网站http://localhost/ 即可打开自己发布的网站
7.总结
(感觉visio studio对python网站的支持度不是很高),发布经历了许多挫折。但最终还是成功了,万幸万幸。
vs好像还可以远程部署到iis服务器上,以后如果有研究,会再写一篇文章分享一下经验。
注:2个额外的情况。
我在网站部署时出现了HTTP500 /iis7.0 发生未知 FastCGI错误,错误代码 0x8007010b 的解决办法
可以参考https://www.cnblogs.com/qq254980080/p/10177893.html 这位大佬的解决方案。
网站运行发生 Error occurred while reading WSGI handler: Traceback (most recent call last)
可以参考https://blog.csdn.net/COLDRAIN_END/article/details/100172040这位大佬的解决方案。
ps:flask只需要添加‘PYTHONPATH’ ‘WSGI_HANDLER’ 这2个变量即可。