Windews 7 + Apache + wsgi
基本思路是,wsgi和django依赖python,安装wsgi就是将wsgi安装为python的本地包插件,安装完成时会显示python和wsgi的位置信息,将这些信息以及django项目位置信息写入解压好的apache的配置文件中,运行apache的httpd文件即可按照配置文件去启动wsgi、开启django网站入口。
apache本身不需要“安装”到注册表,
安装并测试Apache
安装
实际上是下载Apache公司的一个httpd程序。Apache官网不提供安装程序,只提供源代码,安装包可去合作伙伴的网站下载:
二者都可以,但需要根据对应的VS或VC版本来选择Apache版本,提前检查一下电脑上有没有VC或VS组件,有哪个版本。
配置
压缩包下载完成后,解压到你期望的程序目录(D盘目录是此程序默认认为的)。不需要安装过程,解压完成这就是程序运行目录了。不过在 apache httpd 运行的时候程序还是需要知道自己的绝对路径的,所以需要我们在配置文件中自定义一下程序目录绝对路径。找到并打开D:\Apache24\conf\httpd.conf
文件,找到Define SRVROOT
这一行:
Define SRVROOT "D:/Apache24"
这里写的目录就是默认用户会解压到D盘目录, 但移动到别处也可以,如果你的apache不在此位置,就更改此处。
两种运行方式
httpd.exe
查看apache版本信息:Apache24\bin路径下运行httpd.exe -V (注意,是大写V),
cmd运行, 或者双击运行apache24\bin
中的httpd.exe,服务器程序就会运行在黑框中,如果有could not reliably ...
的提示,不用解决,打开浏览器输入本机地址直接访问,如果正常出现网页就是成功了。==注意==:关闭网站时尽量不要直接关闭命令行窗口, 而要在命令行窗口使用快捷键Ctrl+C停止程序运行, Ctrl+C后延迟10秒才有反应, 不要着急.
安装到系统服务项
加入服务前须做两个准备:
- 先修改
Apache24\conf\httpd.conf
文件内的本机域名, 在文件中搜索ServerName,后面改为域名:端口号
, 如果没有域名, 就写IP:端口号
. - 检查确保系统环境变量中有"PYTHONHOME",路径指向Python安装目录,就是有python.exe的那个位置("PYTHONPATH"是不需要的)。如果不加这条环境变量,会报错
Fatal Python error: initfsencoding: unable to load the file system codec
准备好之后,在apache24\bin
的命令行中输入:
httpd.exe -k install -n "apache24"
其中"apache24"是自定义的名称, 如果不加-n
, 名称就默认设为Apache2.4
。完成后,在系统服务项页面就能看到并控制这条服务项了,也可以用apache24\bin
中的 ApacheMonitor.exe 图形界面去控制。
下载mod_wsgi
是apache的插件,用于协助Python后端程序在Apache上运行
Python Extension Packages for Windows - Christoph Gohlke (uci.edu)
选择一个匹配apache版本、VC版本、python版本、Windows版本的mod_wsgi,没写ap24的默认就是ap24版本。
可以下载到默认下载位置,到python脚本目录不是必须的。在下载的whl文件的文件夹中,打开命令行,使用pip安装mod_wsgi:
pip install "mod_wsgi-x.x.xx-cpxxx-win_amd64.whl"
引号内改为实际的文件名.
如果pip命令无效, 尝试在前面加python -m
.
如果一切正常, 将会在python的Lib目录安装wsgi模块, 并在Scripts目录生成一个mod_wsgi-express.exe
程序, 所以我们可以在命令行执行:
mod_wsgi-express module-config
这行命令是给mod_wsgi做一下配置, 完成后会出现三行配置信息, 分别是LoadFile LoadModule WSGIPythonHome
, 我们要将其填写到Apache24\conf\httpd.conf
中.
编辑配置文件
打开Apache24\conf\httpd.conf
. 勿忘记最开始配置的httpd程序目录: Define SRVROOT "D:/Apache24"
wsgi和Django项目的相关配置
将下面的代码修改为适合自己项目的, 然后复制到开头, (后面可能常打开看看, 放开头比较方便)
# 1.安装wsgi模块后,出来的三行字符,直接复制过来
LoadFile "c:/users/administrator/appdata/local/programs/python/python37/python37.dll"
LoadModule wsgi_module "c:/users/administrator/appdata/local/programs/python/python37/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
WSGIPythonHome "c:/users/administrator/appdata/local/programs/python/python37"
# 2.设置工程中的wsgi路径
WSGIScriptAlias / D:\website\website\wsgi.py
# 3.设置工程路径
WSGIPythonPath D:\website
# 4.再设置工程中的wsgi路径
<Directory D:\website\website>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
# 5.设置静态和媒体文件路径
Alias /media D:\website\website\media
<Directory D:\website\website\media>
AllowOverride None
Options None
Require all granted
</Directory>
Alias /static D:\website\website\website\static
<Directory D:\website\website\website\static>
AllowOverride None
Options None
Require all granted
</Directory>
django-admin页面的静态文件是不能直接访问, 需要收集到一起.
第一步: 修改应用的settings.py:
STATIC_URL = '/static/' #下方新增如下内容:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
第二步: 运行命令,收集静态文件到指定的static目录
python manage.py collectstatic
配置完以上内容应当就可以运行服务端, 访问网站了. 如果访问网站出现问题, 再看下面的设置内容
IP和端口设置
检查并设置一下主机IP和端口号:
- 找到
Listen
, 可写IP:端口, 也可只写端口:
#Listen 12.34.56.78:80
Listen 80
- 不设
ServerName
也能运行, 但总报警告. 找到ServerName
, 应当写DNS的那个域名带端口号, 如果没有域名, 就写IP和端口号:
ServerName 192.168.31.161:80
- 去掉#注释,打开访问日志
CustomLog "logs/access.log" common
- 若出现
You don't have permission to access / on this server.
, 就修改访问权限:
找到如下配置
<Directory />
AllowOverride none
Require all denied
</Directory>
中间部分修改为
AllowOverride ALL
Require all granted
Windows Server + IIS + wfastcgi
啊,图形界面真香!
参考:cnblog-飘逸的小乐
安装Python和Django
Python没有的话去官网下载,可以安装在C盘根目录,记住一定要安装在非用户目录,不然后期会有难以解决的权限问题。新版本Python一般自带pip,在cmd或PowerShell输入python -m pip -version
查看是否有pip,如果显示了pip版本号的话,python安装目录下的Scripts文件夹中的cmd中输入
python -m pip install django
即可安装django。如果报错权限问题,则用管理员权限打开cmd。
运行测试
对已存在的项目,要确保项目路径不在用户目录内,会有权限问题,可以在C目录下也可以在C:\inetpub\wwwroot
。在项目根目录执行命令python manage.py runserver
(0:80不要用了,Windows下不太支持) ,尝试启动服务,可能会出现类似下面的报错:
import requests ModuleNotFoundError: No module named ‘requests’
原因:没有导入requests库。原文链接:CSDN博主「stone_tomcat」
解决办法:
进入到python安装目录下的Scripts文件夹中,然后在cmd输入python -m pip install requests
,就好了。如果缺少其他module,同理。
安装wfastcgi
类似上面,在Scripts文件夹中在cmd输入
python -m pip install wfastcgi
wfastcgi是cgi的一种,类似于wsgi,作为服务器和Django的中间件,很重要。
开始IIS部署
复制wfastcgi.py
去python下site-package目录
把“wfastcgi.py”这个文件复制到网站根目录
如果只是调用“site-package”目录下的同一个“wfastcgi.py”文件,如果你要部署多个网站的话,将无法对不同网站创建不同的FastCGI执行环境。
在IIS里添加网站
物理路径就是有wfastcgi.py的目录。
添加程序映射
在新建的网站的控制台内点开“处理程序映射”。
右面点击“添加模块映射”,具体内容如下
可执行文件一栏输入“python解释器”的目录位置和我们的“wfastcgi.py”的位置,注意中间使用“|”符号隔开,名称随意填写。
填完后点开请求限制,把“仅当请求映射至以下内容时才调用处理程序”去掉
确认添加后会弹出创建FastCGI应用程序对话框,点击确认创建。注意,这里每多创建一个FastCGI应用程序,同时运行的Django网站就可以多一个。如果你添加了多个网站但不需要同时运行多个网站,只创建一个应用程序就够了。应用程序池可以管理创建的应用程序,网站的基本设置可以变更应用程序。
配置Django执行的环境变量
在服务器控制台,进入“FastCGI设置”
可以看到刚刚添加的映射
双击打开,添加Django执行时候的环境变量
这里环境变量一共要添加三个:
WSGI_HANDLER 为固定的 django.core.handlers.wsgi.WSGIHandler()
PYTHONPATH 为 网站根目录
DJANGO_SETTINGS_MODULE 为 django settings文件位置
添加完成后去应用程序池回收一下FastCGI应用程序就好了
静态文件的处理
在IIS内找到“static”文件夹的页面,打开处理程序映射
可以看到这里的列表跟网站是一致的
将为网站创建的FastCGI映射删除掉,static文件夹就可以直接访问了,右侧的“恢复为父项”可以恢复对此目录的修改
这样可以测试一下网站是否正常。Django后台管理页面可能出现静态文件丢失,那么需要使用
python manage.py collectstatic
,详见Django学习(7)上传文件和文件储存的最后部分。
搞定。虽然步骤比较多,但是比较之下,图形界面已经方便太多了。