部署Django在Windows server 2008r2 采用apache+mod

    xiaoxiao2021-03-25  95

    部署Django在Windows server 2008r2

    Run Django with Apache + mod_wsgi on Windows server 2008r2

    最近学习了Django,语法学的差不多了.最后想搭建一个服务器以访问网站. 网上看了很多方案,但是有很多方案都不适合在windows在部署,或者就是Python版本太老

    nginx + uwsgi (其中uwsgi不兼容windos) IIS + PyISAPIe(Python2.7) 太老.IIS + FASTCGI (IIS过于难配置)

    其中stackoverflow说的很好.唯一也是最有效的方式就是 apache+mod_wsgi

    Best way (IMHO) is using apache+mod_wsgi. Both uWSGI and Gunicorn are not windows-friendly (albeit uWSGI has cygwin support, so you can eventually try it [if you are brave enough])

    感兴趣的可以去看 链接

    坑点描述

    如果选择Python2.7+64位,是无法直接使用mod_wsgi的,需要自己用VS编译,太痛苦也没必要,还不如换成Python2.7+32位。

    特别注意Python的版本(2.7、3.4、3.5等)及是32位还是64位的。以及Apache是2.2还是2.4版本。常规的搭配是:Python2.7/32+apache2.*,Python3.4/64+apache2.4。不推荐Python2.7 64版。

    无法使用uwsgi。因为其使用了uname函数,而它无法在Windows运行。因此要想用 Windows + Nginx +Python的方式不太靠谱。

    Django官方在1.6之后,不再推荐使用fcgi模式,推荐使用 wsgi。在1.10之后放弃支持 fcgi。

    如果要使用pip需要编译安装一些Python包,需要安装微软提供的Python开发包软件,一个针对Python的Virtual C++套件。

    如果是直接用别人编译好的Mod_wsgi.so文件,需要注意版本。VC9、VC10是不同的。

    最后,还是建议不要在Windows里部署,实在太麻烦了,坑很多。BSD或Linux下会方便很多。

    最后采用的环境如下

    Pyhton3.5 下载链接

    Apache 2.4.25 x64 下载链接

    Django 1.10.6 (使用pip安装Django,略过)

    mod_wsgi 下载链接

    过程

    1.安装Python

    这一步最是简单,pyhon在官网直接有下载.

    (针对服务器,我选择直接使用Windows x86-64 web-based installer)

    如果选择3.4版本,只提供源码包.我也因此不选用python3.4,麻烦!!!

    另外Django推荐在windows上使用虚拟环境 链接方法 安装 virtualenv and virtualenvwrapper pip install virtualenvwrapper-win 注:说是两个,一条命令就解决了为你的项目创建虚拟环境: mkvirtualenv myproject 注:myproject 为自定义的环境名 ,此命令之后就已经进入如果之后退出了命令行.cmd命令重新进入命令行 cd C:\Users\Administrator\Envs 注:该目录下可看见’myproject’workon myproject 注:重新

    2.Django (采用虚拟环境,之后Apache配置的也是Python虚拟环境)

    虚拟环境中,使用pip安装Django,我安装的版本是1.10.6

    pip installs Django

    开始一个你的Django项目,

    部署在生产环境,在setting.py文件别忘记关闭DEBUG模式 还有ALLOWED_HOSTS其中‘*’表示不指定特定的host,就是全部的意思啦 DEBUG = False ALLOWED_HOSTS = ['*']

    3.mod_wsgi下载

    首先引用其他博主的描述,源码编译实在太麻烦了

    直接使用别人上传的编译后的whl包

    官网给出的mod_wsgi安装方法比较麻烦,而且很容易出错(Tips:我没有编译成功T_T) 不过,在网上已经有人上传了编译后的whl包,可以在 http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi中找到

    注意我这里Apache采用VC14编译,这里也选用VC14的版本,然后根据系统选择:32/64

    下载地址 http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi

    命令行中,cd 到下载的目录,使用pip编译/安装 pip install mod_wsgi-4.4.23+ap24vc14-cp35-cp35m-win_amd64.whl

    pip命令完成之后进入我们的python虚拟环境(为什么是虚拟环境中找?上面有提到)

    可以看见 mod_wsgi.so,这个文件在Apache服务器中需要用到

    17年4月17日更新 .so文件的方式已经不成功 之后运行 mod_wsgi-express module-config 输出如下

    注意这两句话,之后会用到

    LoadFile "c:/users/administrator/appdata/local/programs/python/python35/python35.dll" LoadModule wsgi_module "c:/users/administrator/envs/mode_env/lib/site-packages/mod_wsgi/server/mod_wsgi.cp35-win_amd64.pyd"

    注:此时更新的环境名为mode_env


    4.Apache服务器

    下载链接 ,这里我选用x64是因为系统是x64

    这里献上Apache的命令用法 http://www.nanerbang.com/article/50/

    选用的Apache是VC14编译的.对应上文,mod-wsgi也必须是VC14编译)

    将之前的mod_wsgi.so文件拷贝到Apache24的modules目录下 例如我的目录是 :D:\LHServer\httpd-2.4.25-x64-vc14-r1\Apache24\modules,可以看见该目录下有很多.so结尾的文件.就没错了进入Apache的bin目录 D:\LHServer\httpd-2.4.25-x64-vc14-r1\Apache24\bin进入Apache/conf目录,修改httpd.conf文件 步骤很多 修改:引号中”“的为Apache的地址 Define SRVROOT "D:\LHServer\httpd-2.4.25-x64-vc14-r1\Apache24"设置监听的端口和地址.我这里的端口是9022 Listen 0.0.0.0:9022阿什顿设置服务器地址 我公司的服务器地址为120开头,端口为9022 ServerName 120.x6.7x.8x:9022在最后添加以下字段,这里可参考官方文档How to use Django with Apache and mod_wsgi #4月17日更新 #删去:LoadModule wsgi_module modules/mod_wsgi.so #删去:WSGIPythonHome C:/Users/Administrator/Envs/apache_env# #导入之前mod_wsgi.so文件 LoadModule wsgi_module "c:/users/administrator/envs/mode_env/lib/site-packages/mod_wsgi/server/mod_wsgi.cp35-win_amd64.pyd" #新的WSGIPythonHome地址 WSGIPythonHome "c:/users/administrator/envs/mode_env" #Django项目中wsgi.py的路径 WSGIScriptAlias / D:/LHServer/MyServer/MyServer/wsgi.py #Django项目的路径 WSGIPythonPath D:/LHServer/MyServer #配置wsgi.py的访问权限 <Directory D:/LHServer/MyServer/MyServer> <Files wsgi.py> Require all granted </Files> </Directory>

    最后. 将Apache添加为系统服务,

    httpd -k install

    启动Apache

    - `httpd -k start`

    访问失败的问题

    在局域网中访问:

    需要在防火墙打开9022的端口

    外网访问:

    在防火墙打开9022的端口在路由器中添加端口映射

    至此,Django with Apache + mod_wsgi on Windows server 2008r2教程基本完毕

    转载请注明原文地址: https://ju.6miu.com/read-14469.html

    最新回复(0)