终于搞定flask+win+apache+mod_wsgi+virtualenv的部署发布!!
博客专区 > Klaus88 的博客 > 博客详情
终于搞定flask+win+apache+mod_wsgi+virtualenv的部署发布!!
Klaus88 发表于3年前
终于搞定flask+win+apache+mod_wsgi+virtualenv的部署发布!!
  • 发表于 3年前
  • 阅读 381
  • 收藏 5
  • 点赞 0
  • 评论 13

【腾讯云】新注册用户域名抢购1元起>>>   

摘要: 搞定flask+win+apache+mod_wsgi+virtualenv的部署发布

1、安装python 2.7

2、安装apache或者xampp

3、下载mod_wsgi.so,放到apache下modules文件夹下,并修改httpd.conf以加载模块。

   http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi

LoadModule wsgi_module modules/mod_wsgi.so


4、安装pip,指南:
   https://pip.pypa.io/en/latest/installing.html#install-pip

5、安装virtualenv,cmd下
   pip install virtualenv

6、建立虚拟环境FlaskEnv2,cmd下
   virtualenv D:\PythonProjects\FlaskEnv2

7、进入FlaskEnv2目录,cmd下
   cd D:\PythonProjects\FlaskEnv2\Scripts

8、安装Flask和其他插件,cmd下
pip install flask
pip install flask-login
pip install flask-openid
pip install flask-mail
pip install flask-sqlalchemy
pip install sqlalchemy-migrate
pip install flask-whooshalchemy
pip install flask-wtf
pip install flask-babel
pip install guess_language
pip install flipflop
pip install coverage

9、修改apache的设置文件 C:\xampp\apache\conf\extra\httpd-vhosts.conf

<VirtualHost *:80>
        ServerName example.com
        WSGIScriptAlias / "D:/PythonProjects/apricot/apricot.wsgi"
        <Directory "D:/PythonProjects/apricot">
        <IfVersion < 2.3 >
        Order allow,deny
        Allow from all
        </IfVersion>
        <IfVersion >= 2.3>
        Require all granted
        </IfVersion>
        </Directory>
</VirtualHost>

注意!!路径里的斜杠“/”是这个方向的,不是“\”这个方向的!这里要搞死人了!
还有下面的权限设置,用这里的这段。查了很久!

10、修改hosts文件,加入解析来测试
127.0.0.1        example.com

11、创建一个wsgi文件来测试 D:\PythonProjects\apricot\apricot.wsgi
代码如下:

##########开始#######
activate_this = 'D:/PythonProjects/FlaskEnv2/Scripts/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
import site
import sys
# Remember original sys.path.
prev_sys_path = list(sys.path) 
# Add site-packages directory.
site.addsitedir('D:/PythonProjects/FlaskEnv2/Lib/site-packages')
# Reorder sys.path so new directories at the front.
new_sys_path = [] 
for item in list(sys.path): 
    if item not in prev_sys_path: 
        new_sys_path.append(item) 
        sys.path.remove(item) 
        sys.path[:0] = new_sys_path 
sys.path.insert(0, 'D:/PythonProjects/apricot')
from app import app as application
if __name__ == '__main__': #感觉写在这里好点
    app.run(debug=True)
##############结束#########

这段代码引入了独立环境到项目中,注意哦!
还是要注意那个斜杠“/”,走了不少弯路
然后就是那几个路径了,之前建立的独立环境等

12、建立一个测试的py文件 D:\PythonProjects\apricot\app.py
代码如下:

###########开始#######
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
    return "Hello, I'm Apricot!"
if __name__ == "__main__":
    app.run()
###########结束#######

13、打开Apache,然后开ie,打开http://example.com/,看到了吧
经测试,包括sqlite的本地读写,都一切正常^_^

14、有关静态文件的访问(图、js和css等),还没研究。


参考:
Windows Python虚拟环境配置(Distribute + pip + virtualenv + virtualenvwrapper-powershell)
http://my.phirobot.com/blog/2014-02-python_in_windows.html

引入独立环境的方法
http://blog.nutenstudio.com/flask-apache-virtualenv/

有关静态1
http://jyd.me/python/use-django-with-apache-mod_wsgi/

留一下
http://blog.xavierskip.com/2014-06-18-apache-wsgi/

留2
https://www.digitalocean.com/community/tutorials/how-to-deploy-a-flask-application-on-an-ubuntu-vps

django有关静态的设置
https://django-chinese-docs.readthedocs.org/en/latest/howto/deployment/wsgi/modwsgi.html

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 5
博文 14
码字总数 7457
评论 (13)
瓜瓜jx
wsgi一定要自己写么??
Klaus88

引用来自“瓜瓜jx”的评论

wsgi一定要自己写么??

直接复制我的,改一下就行了
瓜瓜jx

引用来自“Klaus88”的评论

引用来自“瓜瓜jx”的评论

wsgi一定要自己写么??

直接复制我的,改一下就行了
官网上说直接加from yourapplication import app as application就行啊
Klaus88

引用来自“瓜瓜jx”的评论

引用来自“Klaus88”的评论

引用来自“瓜瓜jx”的评论

wsgi一定要自己写么??

直接复制我的,改一下就行了
官网上说直接加from yourapplication import app as application就行啊

你没仔细看官网的说明,你说的那个只适用于简单的环境,换句话说就是开发时,不是部署不是用了工厂方法等的实际情况。其实由于flask算是比较底层的,所以你会觉得wsgi的写法和我们平时的flask程序也差不多。
王化鹏
我按照你的文档配置了下, 一访问apache就crash。
我的apache是基于xampp按照的2.4版本。
mod_wsgi.so 是基于4.4.2版本自己编译的。
其他和你的一样。
王化鹏
看来还是从 http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi 这里下的靠谱。 自己编译的不行。。。
Klaus88

引用来自“王化鹏”的评论

看来还是从 http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi 这里下的靠谱。 自己编译的不行。。。

自己编译也太牛逼了吧?我有1年没弄c++了。另外,我开发机上的Apache一启动会提示个什么错误,不过按了确定就没事了,服务器上没这个错误,奇怪了。
王化鹏

引用来自“Klaus88”的评论

引用来自“王化鹏”的评论

看来还是从 http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi 这里下的靠谱。 自己编译的不行。。。

自己编译也太牛逼了吧?我有1年没弄c++了。另外,我开发机上的Apache一启动会提示个什么错误,不过按了确定就没事了,服务器上没这个错误,奇怪了。
这种部署方式,我测了下,如果修改文件上传后,必须重启apache服务器才能生效?
Klaus88

引用来自“王化鹏”的评论

引用来自“Klaus88”的评论

引用来自“王化鹏”的评论

看来还是从 http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi 这里下的靠谱。 自己编译的不行。。。

自己编译也太牛逼了吧?我有1年没弄c++了。另外,我开发机上的Apache一启动会提示个什么错误,不过按了确定就没事了,服务器上没这个错误,奇怪了。
这种部署方式,我测了下,如果修改文件上传后,必须重启apache服务器才能生效?

重启apache和删pyc。我有次懒得删pyc,出现了神奇的bug,哈哈
王化鹏

引用来自“Klaus88”的评论

引用来自“王化鹏”的评论

引用来自“Klaus88”的评论

引用来自“王化鹏”的评论

看来还是从 http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi 这里下的靠谱。 自己编译的不行。。。

自己编译也太牛逼了吧?我有1年没弄c++了。另外,我开发机上的Apache一启动会提示个什么错误,不过按了确定就没事了,服务器上没这个错误,奇怪了。
这种部署方式,我测了下,如果修改文件上传后,必须重启apache服务器才能生效?

重启apache和删pyc。我有次懒得删pyc,出现了神奇的bug,哈哈
有啥最佳的部署方式吗? 我是想 能够先都编译成pyc文件然后打包一次性部署。更新也是重新替换包就可以了
Klaus88

引用来自“王化鹏”的评论

引用来自“Klaus88”的评论

引用来自“王化鹏”的评论

引用来自“Klaus88”的评论

引用来自“王化鹏”的评论

看来还是从 http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi 这里下的靠谱。 自己编译的不行。。。

自己编译也太牛逼了吧?我有1年没弄c++了。另外,我开发机上的Apache一启动会提示个什么错误,不过按了确定就没事了,服务器上没这个错误,奇怪了。
这种部署方式,我测了下,如果修改文件上传后,必须重启apache服务器才能生效?

重启apache和删pyc。我有次懒得删pyc,出现了神奇的bug,哈哈
有啥最佳的部署方式吗? 我是想 能够先都编译成pyc文件然后打包一次性部署。更新也是重新替换包就可以了

没有哦,部署也不是很频繁的操作啊,感觉现在就更好了
Klaus88

引用来自“Klaus88”的评论

引用来自“王化鹏”的评论

引用来自“Klaus88”的评论

引用来自“王化鹏”的评论

引用来自“Klaus88”的评论

引用来自“王化鹏”的评论

看来还是从 http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi 这里下的靠谱。 自己编译的不行。。。

自己编译也太牛逼了吧?我有1年没弄c++了。另外,我开发机上的Apache一启动会提示个什么错误,不过按了确定就没事了,服务器上没这个错误,奇怪了。
这种部署方式,我测了下,如果修改文件上传后,必须重启apache服务器才能生效?

重启apache和删pyc。我有次懒得删pyc,出现了神奇的bug,哈哈
有啥最佳的部署方式吗? 我是想 能够先都编译成pyc文件然后打包一次性部署。更新也是重新替换包就可以了

没有哦,部署也不是很频繁的操作啊,感觉现在就更好了

很好,错字
gatspy
谢谢啊。真是帮了大忙!
×
Klaus88
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: