Django学习(9)在Windows中部署(IIS和Apache)

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组件,有哪个版本。


image.png
image.png

配置

压缩包下载完成后,解压到你期望的程序目录(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秒才有反应, 不要着急.

安装到系统服务项

加入服务前须做两个准备:

  1. 先修改Apache24\conf\httpd.conf文件内的本机域名, 在文件中搜索ServerName,后面改为域名:端口号, 如果没有域名, 就写IP:端口号.
  2. 检查确保系统环境变量中有"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)

image.png

选择一个匹配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和端口号:

  1. 找到Listen, 可写IP:端口, 也可只写端口:
#Listen 12.34.56.78:80
Listen 80
  1. 不设ServerName也能运行, 但总报警告. 找到ServerName, 应当写DNS的那个域名带端口号, 如果没有域名, 就写IP和端口号:
ServerName 192.168.31.161:80
  1. 去掉#注释,打开访问日志
 CustomLog "logs/access.log" common
  1. 若出现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目录


image.png

把“wfastcgi.py”这个文件复制到网站根目录


image.png

如果只是调用“site-package”目录下的同一个“wfastcgi.py”文件,如果你要部署多个网站的话,将无法对不同网站创建不同的FastCGI执行环境。

在IIS里添加网站

image.png

物理路径就是有wfastcgi.py的目录。

添加程序映射

在新建的网站的控制台内点开“处理程序映射”。


image.png

右面点击“添加模块映射”,具体内容如下


image.png

可执行文件一栏输入“python解释器”的目录位置和我们的“wfastcgi.py”的位置,注意中间使用“|”符号隔开,名称随意填写。
填完后点开请求限制,把“仅当请求映射至以下内容时才调用处理程序”去掉
image.png

确认添加后会弹出创建FastCGI应用程序对话框,点击确认创建。注意,这里每多创建一个FastCGI应用程序,同时运行的Django网站就可以多一个。如果你添加了多个网站但不需要同时运行多个网站,只创建一个应用程序就够了。应用程序池可以管理创建的应用程序,网站的基本设置可以变更应用程序。


image.png

配置Django执行的环境变量

在服务器控制台,进入“FastCGI设置”


image.png

可以看到刚刚添加的映射


image.png

双击打开,添加Django执行时候的环境变量
image.png

这里环境变量一共要添加三个:
WSGI_HANDLER 为固定的 django.core.handlers.wsgi.WSGIHandler()
PYTHONPATH 为 网站根目录
DJANGO_SETTINGS_MODULE 为 django settings文件位置


image.png

添加完成后去应用程序池回收一下FastCGI应用程序就好了
image.png

静态文件的处理

在IIS内找到“static”文件夹的页面,打开处理程序映射

image.png

可以看到这里的列表跟网站是一致的
image.png

将为网站创建的FastCGI映射删除掉,static文件夹就可以直接访问了,右侧的“恢复为父项”可以恢复对此目录的修改
image.png

这样可以测试一下网站是否正常。Django后台管理页面可能出现静态文件丢失,那么需要使用python manage.py collectstatic,详见Django学习(7)上传文件和文件储存的最后部分。

搞定。虽然步骤比较多,但是比较之下,图形界面已经方便太多了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。