前言
本人化学博士出身,近些年有感于计算机技术的高速发展,于是重操旧业写起了代码,现在主要致力于工业界的数字化、智能化转型研究和基础设施的建设。平时搞搞数据库开发,做些数据分析、机器学习、深度学习方面的工作。
平时兴趣爱好做点爬虫、web开发之类的,前几天接了单位一个活,整一个小型的网站系统,考虑到用户量大概就1000多,平时点击量也不会很大。果断采用flask+MySQL开发完毕了,然后搞了个阿里云服务器,尝试了下Linux和Windows两个系统的部署。Linux挺顺利的,基本一路跑完,Windows着实遇到了不少坑,那就详细的记录下来吧,给大家一个参考。
建议:能用Linux就不要用Windows,如果实在要用Windows部署,希望能帮上你们一些。
选择
由于要在Windows系统上搞,所以Gunicorn不能用了,这里我们选择Apache+mod_wsgi进行部署。为了部署成功,Apache和mod_wsgi的版本一定要选对!
Apache:
我们进到下载页面:Apache VC14 binaries and modules download
我是64位的系统,所以选择上面这个下载,一定要根据自己电脑的系统版本去下载。
mod_wsgi:
进到下载页面:https://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi
一定要按照自己预装的Python版本和系统进行选择,我的Python是3.7的。
这两块下载完,第一步就搞定了,Apache直接解压到喜欢的文件夹就可以了,mod_wsgi需要再安装一下,调出cmd,pip install <文件绝对路径>,比如我的就是这样
pip install C:\Users\HQ\Desktop\mod_wsgi-4.9.0-cp37-cp37m-win_amd64.whl
安装完之后,输入mod_wsgi-express module-config,这时候会命令行会弹出三行话,先不要把命令行关掉,这三行话我们后面要用到。
至此Apache和mod_wsgi就算安装好了。
配置
我们现在来配置Apache。
找到我们的Apache24文件夹,进入到conf目录中,打开httpd.conf文件。
ServerRoot "c:/Apache24"这一行,修改成自己Apache的安装地址
这里可以自主选择端口号,我选择的是8080,注意不要与现有的端口号重复。下面加上一行ServerName localhost:8080,这里的端口号需要和前面设置的一致。
再往下翻
看到它们的时候,先把第一行LoadModule access_compat_module modules/mod_access_compat.so 前面的注释给去掉(这个是老办法,最新的办法可以查看flask文档,两个都可以的),然后,把刚才咱们命令行里自动生成的三行文字给复制过来。
再往下翻,
<Directory />
AllowOverride none
Require all denied
</Directory>
改成
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
</Directory>
然后拉到最后,复制上这么一段:
<VirtualHost *:8080 >
ServerAdmin example@xx.com
DocumentRoot path
<Directory "path">
Order allow,deny
Allow from all
</Directory>
WSGIScriptAlias / path\test.wsgi
</VirtualHost>
这里所有的path改成你的flask项目的文件夹目录,其他的不做改动。
然后保存一下。
这时候有个重要的一步,否则后面服务器启动后会无限报“Nomodule named encodings”的错误,我们回到这张图。
将WSGIPythonHome 后面的那个引号里的路径复制一下,建立一个名叫“pythonhome”的系统变量。
添加完之后,可以避开一个大坑。这一步不添加的话,后面服务器正常运行后,只要访问项目就会报“Fatal Python error: initfsencoding: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'”的错误。
现在回到我们的flask项目文件,在里面建立一个叫做test.wsgi的文件。
这个文件里面写上代码:
import sys sys.path.insert(0, "path") from gh_app import app application = app
这里的path写上你自己的flask项目的目录,gh_app是我的app名字,需要改成你自己的。
你也可以这么写:
import sys
sys.path.insert(0, "path")
from gh_app import app as application
这里application这个词是绝对不能改的。
现在,所有的配置都做完啦,我们来启动服务。
启动
用管理员模式启动Windows PowerShell,然后cd到Apache的bin目录下面
输入 ./httpd -k install 安装Apache,安装完毕不报错后,继续输入
./httpd -k start
这时候我们的flask项目就已经部署启动完成了。
现在我们可以在浏览器里点击项目的URL,就可以正常访问到项目了。停止服务器就输入./httpd -k stop,重启服务器输入./httpd -k restart。
如果发现项目还是不能访问,进到Apache下面的logs文件夹里,点开error文件查看报错日志,百度一下报错的问题,基本都能解决的。
如果你的项目中有“输入密码”选项,并用到了数据库保存密码,可能会报“RuntimeError: cryptography is required for sha256_password or caching_sha2_password”这个错误,这时候直接云服务器或者本地pip install cryptography 安装这个模块就可以了。
结束
基本上就这些啦,有条件还是建议Linux部署,Windows部署的小坑太多了,而且部署的方式太单一了。
原文链接:https://blog.csdn.net/somebodylikeme/article/details/123002625