熟悉python的flask框架的朋友都知道,flask默认的端口是5000。你也可以自己定义其他的可用的端口。
但在生产环境给用户使用的时候,如果输入个网址还需要在域名后面输入个端口号,怎么看都觉得不够高大上,让我感觉很想解决这个问题,遍寻各种资料并自己尝试后,终于实现了。
本文适用于win server服务器的部署,如果你是用win10等部署的,部分内容有些许不同,看着办就好了。
欢迎找我交流。
现在把相关的步骤教给大家:
一、系统环境
windows server 2019
python 3.6.6(虚拟环境)(别的版本应该也行)
flask(后面安装)
wfastcgi(后面安装)
二、安装IIS和CGI
win server系统是默认安装好IIS的,如果你是win10等则需要安装一下IIS。
打开服务器管理器,选择添加角色和功能。
前面的默认往前进,可以找到这个目录部分。好像发现CGI默认是安装好了的。
如果没有安装,往下步骤安装就好了。
三、安装URL重写组件
(我的服务器过去安装有,所以无需安装,也不能百分百确认到底要不要这一步,后面我没有用到它)
以下是摘录别人的下载安装说明:
IIS 需要安装 URL 重写组件,这个可以通过Microsoft Web Platform Installer来安装。下载Microsoft Web Platform Installer后运行,搜索url
,分别安装。
四、创建python虚拟环境
(这一步不是必须的,如果你为了让你的flask运行的python环境比较纯净,则可以使用虚拟环境,本文不讲细节,以后我会单独写一篇总结文章来写这个细节)
由于是win环境,则在系统预先安装好的python基础上安装虚拟环境的包:
pip install virtualenv
pip install virtualenvwrapper-win
然后在系统环境变量配置好虚拟环境的存放目录:
然后用管理员模式运行cmd,运行命令创建虚拟环境:
mkvirtual flask_test
创建一个名字为flask_test的虚拟环境空间,使用系统安装的默认python版本3.6.6。
此时会自动进入虚拟空间,你也可以在平常输入如下命令进入:
workon flask_test
此时安装的pip包啊什么的都只是在这个虚拟环境中安装了。
这里我们不细讲。
五、安装flask和wfastcgi
接下来安装flask和wfastcgi。
分别运行命令安装即可:
pip install flask
pip install wfastcgi
其实本质用的是wfastcgi这个功能包来实现。
安装完之后,可以通过cmd来到你使用来解析的python的scripts目录下,运行如下命令:
wfastcgi-enable
此时会返回相关内容:
其中需要特别注意一下你那里返回的框出来的双引号的内容,这个在后面的配置中会用到,不同电脑的人不同。
你可以把引号中间的内容保存到文本文件,这个cmd窗口就可以先关闭了。后面网站正式运行之后,你不需要像平常启动flask网站那样启动,也不用打开cmd窗口或进入虚拟环境启用。
如果你运行这个命令,看到什么ERROR这样的字符报错,可以先运行一下wfastcgi-disable
这个命令先禁用,再运行上述命令启用。
六、配置你的服务器解析
由于我们的最终目的是实现外网的用户仅输入域名,不需要添加端口号就可以实现网站的访问,所以需要进行解析DNS的规则配置。
到你的DNS供应商配置一条A记录,比如我配置的主机记录是flask,即全称域名为:http://flask.xueshanlinghu.com。而指向的IP地址是自己的外网IP地址即可。
七、准备好你的flask站点源码
因为在测试嘛,所以就写一个最简单的flask站点好了。
找一个文件夹,作为网站的运行目录,并在里面创建一个python文件,名字为hello.py。
源码如下:
# coding:utf-8 from flask import Flask app = Flask(__name__) @app.route("/") def index(): return "hello flask python" if __name__ == "__main__": app.run(debug=True)
这样,启动网站首页之后,就会看到内容“hello flask python”。
八、编写web.config文件
由于是IIS服务器,所以需要编写一个服务器的配置文件,按照我前面的内容,配置参考如下(你需要根据自己的情况改成自己的):
其中scriptProcessor需要改成你刚才启用wfastcgi的时候返回的内容。
WSGI_LOG这个的目录,一定要创建好!!!后面配置的日志路径如果没有配置则会报错的,比如我返回的就是500错误。
WSGI_HANDLER这个的值目前我还不是很确定应该怎么填写,尝试过修改为hello2.app好像也能用。所以这块需要再研究下。
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <handlers> <!-- scriptProcessor 的值来自命令行工具 wfastcgi-enable --> <add name="FlaskFastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="d:\programs\virtualpython\flask_test\scripts\python.exe|d:\programs\virtualpython\flask_test\lib\site-packages\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" /> </handlers> <security> <!-- URL 重写中的特殊字符,比如加号+等等 --> <requestFiltering allowDoubleEscaping="true"></requestFiltering> </security> </system.webServer> <appSettings> <!-- Required settings --> <!-- 在这里指定Falsk app在模块中的具体位置 --> <add key="WSGI_HANDLER" value="hello.app" /> <add key="PYTHONPATH" value="~/" /> <!-- Optional settings --> <!-- 需要先创建日志目录,否则报错 --> <add key="WSGI_LOG" value="D:\logs\oboeqa_web.log" /> <add key="WSGI_RESTART_FILE_REGEX" value="" /> </appSettings> </configuration>
写好之后保存为web.config文件,放在网站根目录下。
九、IIS添加网站
经过了前面的各种准备工作,终于到添加网站这一步啦!
接下来还是打开“服务器管理器”,在右上角选择“工具”菜单栏,选择“Internet Information Services (IIS)管理器”进入IIS的管理器。
左侧找到网站,右键,选择添加网站。
然后在弹出的窗口中填写好如下所示的内容:
网站名称是网站显示给你看的名字,你可以改成别的。
物理路径,选择刚才我们存放flask网站的那个目录。
端口啥的默认就有,不用管,我们就是想要80端口,所以不用改。
主机名应该是填写的访问的域名,所以我就填写了。
填写完成后,点击确定,启动网站。
此时,在外网输入网址:http://flask.xueshanlinghu.com
发现已经能够不输入端口号访问啦!大功告成!
当然,这仅仅是测试用的,发完本文,这个网址可是无法访问的。大家不用测试嘿嘿。请用自己的服务器来测试吧!
希望能帮到大家!
如果有什么别的想法,欢迎评论或找我交流。
评论