现在比较流行的是Nginx + Gunicorn 的方式部署 Django 项目,但本文采用的是小众的Windows Server和IIS方式,其中须要一个Python包wfastcgi来将进入IIS的请求移交到Python应用程序进行处理。html
在 linux 上部署时,通常有两种选择。centos系统使用较多,新人能够选择有桌面环境的ubuntu系统。学生优惠9.9 元/月购买地址:阿里云服务器学生专区、腾讯云服务器学生专区。本文介绍的是Windows Server 2012 R2的部署。前端
阿里云域名注册地址:[ 域名注册系统](https://wanwang.aliyun.com/domain/ " 阿里云域名注册系统"),根据需求购买便可python
域名解析前须要先将绑定到服务器:[绑定域名 ](https://help.aliyun.com/knowledge_detail/39881.html " "),随后解析域名:[解析域名](https://help.aliyun.com/knowledge_detail/39903.html?spm=5176.2000002.0.0.43df132dmnCiMy " ")linux
如何登陆到Windows Server:腾讯云登陆服实例web
如何安装IIS:腾讯云安装配置 IIS,配置完成后浏览器访问云服务器的公网IP查看 IIS 服务是否正常运行。shell
如何安装Python:[安装Python教程](https://www.runoob.com/python3/python3-install.html " Windows下安装Python"),注意勾选添加到环境变量,最后在命令提示符中输入python并按Enter键,检验是否安装成功。django
使用虚拟环境便于包管理,并且避免版本冲突,方便迁移项目。python3.3版中加入了venv模块支持原生建立虚拟环境,并在3.4版本后加入了pip包,创立并激活虚拟环境后可直接使用,官方文档。ubuntu
>python -m venv Blog_ven
或提早创建虚拟环境的文件夹C:\virtualenv\Blog_ven,指定文件夹建立虚拟环境windows
> cd C:\virtualenv\Blog_ven > python -m venv .
> cd C:\virtualenv\Blog_ven\Scripts #激活 > activate.bat #退出 > deactivate.bat
在激活虚拟环境以后,会在命令提示符前出现(Blog_ven),以后便可以进行pip包的安装,不然安装到的是全局环境下
为确保咱们不会遇到pip安装或安全问题,让咱们升级更新Python的包安装程序,在上面的命令提示符与虚拟环境激活下,运行如下命令:centos
python -m pip install –upgrade pip
> cd C:\virtualenv\Blog_ven1\ > pip freeze > requirements.txt
此时包依赖信息将保存在C:\virtualenv\Blog_ven1\requirements.txt文件中,注意在有些包安装前须要依赖其余包的须要手动调整一下顺序。复制requirements.txt到C:\virtualenv\Blog_ven2中
进入目的服务器虚拟环境env:
>cd C:\virtualenv\Blog_ven2\ >pip install -r requirements.txt
pip就会自动从网上下载并安装全部包,此时虚拟环境以及彻底复制到服务器,在虚拟环境激活状态下,确保在服务器本地可运行django项目:
>cd C:\demo.eosones.com\Mybolg >python manage.py runserver 127.0.0.1:8000
为了将django项目可以部署到IIS上须要安装额外的一个Python包,激活虚拟环境状态下:
>pip install wfastcgi
安装完成后须要启动wfastcgi
>wfastcgi-enable
这里说明安装成功,而且获得虚拟环境python路径及虚拟环境下wfastcgi的安装路径,以后要用到这两个路径。(如需配置多个django项目,多个项目的wfastcgi的安装路径需不用,即单独项目单独虚拟环境便可)
#已经在配置提交路径“MACHINE/WEBROOT/APPHOST”向“MACHINE/WEBROOT/APPHOST”的“system.webServer/fastCgi”节应用了配置更改 " C:\virtualenv\Blog_ven\Scripts\python.exe|C:\virtualenv\Blog_ven\lib\site-packages\wfastcgi.py" can now be used as a FastCGI script processor
咱们在Django项目的根目录下建立一个web.config的文件,里面内容以下:(如需手动配置:手动配置教程,英语配置教程)
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <handlers> <add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor=" C:\virtualenv\Blog_ven\Scripts\python.exe|C:\virtualenv\Blog_ven\lib\site-packages\wfastcgi.py" resourceType="Unspecified" requireAccess="Script"/> </handlers> </system.webServer> <appSettings> <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" /> <add key="PYTHONPATH" value="C:\demo.eosones.com\Mybolg" /> <add key="DJANGO_SETTINGS_MODULE" value="Mybolg.settings" /> </appSettings> </configuration>
这里对照着本身的网站,修改三处地方替换便可
<add key="PYTHONPATH" value="">
这里的value要定位到当前的项目根目录(跟manage.py同目录)<add key="DJANGO_SETTINGS_MODULE" value="" />
这里写入app的名字而后打开IIS管理器:打开“控制面板”在“管理工具”中打开“Internet Information Services(IIS)管理器”。选中左边栏网站右键添加网站,物理地址选中项目地址
此时网站已经能够访问,但CSS等静态文件没有访问到,首先对咱们的django项目进行静态文件资源迁移,在项目的settings.py文件中添加:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
在项目根目录下输入以下命令
>python manage.py collectstatic
执行命令后会把所有用到的静态文件复制到STATIC_ROOT这个目录下,生产环境中还需设置 DEBUG = False,此时App中的 'django.contrib.staticfiles' 将会失效,出错时前端再也不代码等报错信息。
而后咱们在static文件夹中添加一个web.config文件,remove name中的值必须与以前的web.config中的一致,文件内容以下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <handlers> <remove name="Python FastCGI" /> </handlers> </system.webServer> </configuration>
此时已经配置完成,为了可以经过域名访问站点,项目的settings.py文件中添加ALLOWED_HOSTS = ['*'] 或者ALLOWED_HOSTS = [ '.example.com', # Allow domain and subdomains]
HTTP 错误 500.0 - Internal Server Error,c:\sites\myproject_env\scripts\python.exe - FastCGI 进程意外退出
ApplicationPoolIdentity
改成最高权限的LocalSystem
HTTP 404错误
配置错误:不能在此路径中使用此配置节。若是在父级别上锁定了该节,便会出现这种状况。锁定是默认设置的
%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/handlers