[TOC]
前言
今天看到阿里云搞活动,2核心2G内存,40G硬盘一年才¥86,果断入手
于是就开始windows server裸机上部署flask应用
参考链接:
https://blog.csdn.net/firefox1/article/details/46438769
https://www.jianshu.com/p/6ae98e93d595
整合上述两个教程和安装时踩的坑,得到以下教程:
第0步:安装notepad++,bandizip等软件
裸机啥都没有,搞个notepad++编辑文本,bandizip解压:
notepad++:https://notepad-plus-plus.org/downloads/
bandizip:https://www.bandisoft.com/bandizip/
第1步:确定mod_wigi版本,并下载whl包
作为Apache和flask的中介,mod_wsgi的版本的确定十分重要,访问:https://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi,CTR+F,输入mod_wsgi查找到下图中的链接:
下载链接确定对应的版本,如:mod_wsgi-4.7.0+ap24vc14-cp35-cp35m-win_amd64,vc14说明和它匹配的Apache的编译器为VC14,cp35说明python版本是3.5,amd64说明windows版本是64位的。根据自己的情况,选择对应版本的whl包下载
(说明:第一个教程中直接下载了.so文件,但这种方法一方面需要科学上网,另一方面即使科学上网了,给出的链接也找不到需要的版本,而第二个教程里的信息已经过时了,他选择的mod_wsgi-4.6.5+ap24vc14-cp36-cp36m-win_amd64.whl文件在网站上找不到,我在Github上找到了一个备份:https://github.com/jiechengyang/Utils/blob/master/mod_wsgi-4.6.5%2Bap24vc14-cp36-cp36m-win_amd64.whl,有需要的可以下载,我选择的版本就是这个)
(PS:以后有找不到的包可以去Github上找一找,应该会有人备份)
第2步:下载Apache和python
根据第一步确定的版本,下载对应的Apache服务器和Python解释器
Apache:https://www.apachelounge.com/download
python:https://www.python.org/downloads/
(我下载的Apache的编译器版本是VC14,链接:https://www.apachelounge.com/download/VC14/,而python我选择的是3.6,但官网上找不到3.6的下载链接,我就直接百度找了一个)
第3步:安装Apache和python
解压Apache安装包,将解压出来的Apache24放到C盘根目录下,打开cmd,输入:
cd C:\Apache24\bin
httpd
打开浏览器,访问http://localhost,如果出现 It Works! 就说明Apache服务器已经运行起来了
安装python的时候要注意,低版本的python需要手动将python的安装目录添加到环境变量里,否则pip等操作无法正常工作
第4步:迁移flask项目
将flask项目复制到云服务器上,并使用pip命令安装所需依赖,安装完成后,运行并测试能否通过http://127.0.0.1:5000/进行访问
测试结束后,我们得到了一个能够正常工作的flask程序和一个能够正常工作的Apache服务器,接下来就是通过wsgi把flask部署到Apache上了
第5步:配置WSGI和Apche
配置WSGI
-
打开cmd,输入pip install,将第一步下载下载的whl文件拖到cmd里,回车进行安装
-
安装完成后,输入mod_wsgi-express module-config,将输出类似如下的三条配置信息:
LoadFile "c:/users/administrator/appdata/local/programs/python/python36/python36.dll"
LoadModule wsgi_module "c:/users/administrator/appdata/local/programs/python/python36/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd"
WSGIPythonHome "c:/users/administrator/appdata/local/programs/python/python36"
- 将输出的信息复制,粘贴到C:\Apache24\conf\httpd.conf文件的最上方:
- 重启Apache服务器,如果没有问题就说明配置成功
配置.wsgi文件
在flask项目的目录下,新建test.wsgi,根据自己的情况修改相关代码:
import sys
#flask项目的目录
sys.path.insert(0, r"C:\Users\Administrator\Desktop\GHS\myWeb")
#因为一般的flask项目的入口是app.py,因此这么写
#教程一中flask项目的入口是test.py,因此需要写成from test import app
from app import app
#这一个不能改
application = app
配置Apache
打开C:\Apache24\conf\httpd.conf,将以下内容粘贴进去,并修改:
#代码中的C:\Users\Administrator\Desktop\GHS\myWeb是flask项目的目录,根据自己的需要修改
<VirtualHost *:80 >
ServerAdmin example@company.com
DocumentRoot C:\Users\Administrator\Desktop\GHS\myWeb
<Directory "C:\Users\Administrator\Desktop\GHS\myWeb">
Order allow,deny
Allow from all
</Directory>
WSGIScriptAlias / C:\Users\Administrator\Desktop\GHS\myWeb\test.wsgi
</VirtualHost>
配置后如图:
httpd.confCTR+F,查找mod_access_compat,查找到后把它注释回来,使其生效:
(不配置的话会出现Invalid command 'Order', perhaps misspelled or defined by a module not included
in the server configuratio的报错)
第6步:测试
配置完成后,重启Apache,启动浏览器访问http://localhost,进行flask项目的测试
在测试过程中发现以下问题:
-
flask项目使用python启动时,工作目录为C:\Users\Administrator\Desktop\GHS\myWeb,即flask项目的目录,因此各个相对路径都正常,但配置到Apache上后,工作目录就变成了C:\Apache24\bin,相对路径失效
- 方法一:把相对路径都改成绝对路径
- 方法二:导入os,通过项目启动时调用os.chdir(r"C:\Users\Administrator\Desktop\GHS\myWeb"),将工作目录切换过来
- 使用python启动时:
with open("./static/cookie.json)
不会报错,但配置到Apache上后,就得这么写了:with open(r"./static/cookie.json)
,即所有的目录都得加上r
测试结束后,就可以愉快地GHS了!
网友评论