Django从零搭建个人博客 | 通过IIS部署腾讯云Winsows服务器
原文博客地址:
如今比较流行的是nginx + gunicorn 的方式部署 django 项目,但本文采用的是小众的windows server和iis方式,其中需要一个python包wfastcgi来将进入iis的请求移交到python应用程序进行处理。
部署前准备
1、购买服务器
在 linux 上部署时,一般有两种选择。centos系统使用较多,新人可以选择有桌面环境的ubuntu系统。学生优惠9.9 元/月购买地址:、。本文介绍的是windows server 2012 r2的部署。
2、购买域名
阿里云域名注册地址:[ 域名注册系统]( " 阿里云域名注册系统"),根据需求购买即可
3、解析域名到服务器
域名解析前需要先将绑定到服务器:[绑定域名 ]( " "),随后解析域名:[解析域名](https://help.aliyun.com/knowledge_detail/39903.html?spm=5176.2000002.0.0.43df132dmncimy " ")
搭建服务器
如何登录到windows server:
1、iis安装和配置
如何安装iis:腾讯云安装配置 iis,配置完成后浏览器访问云服务器的公网ip查看 iis 服务是否正常运行。
2、安装python
如何安装python:[安装python教程]( " windows下安装python"),注意勾选添加到环境变量,最后在命令提示符中输入python并按enter键,检验是否安装成功。
3、配置虚拟环境
使用虚拟环境便于包管理,而且避免版本冲突,方便迁移项目。python3.3版中加入了venv模块支持原生创建虚拟环境,并在3.4版本后加入了pip包,创立并激活虚拟环境后可直接使用,。
- 创建虚拟环境
以管理员身份运行cmd或power shell,在当前目录创建虚拟环境(blog_ven为自定义的虚拟环境的名称):
>python -m venv blog_ven
或提前建立虚拟环境的文件夹c:\virtualenv\blog_ven,指定文件夹创建虚拟环境
> cd c:\virtualenv\blog_ven > python -m venv .
- 激活虚拟环境
在上面的命令提示符中,进入虚拟环境scripts文件夹下
> cd c:\virtualenv\blog_ven\scripts #激活 > activate.bat #退出 > deactivate.bat
在激活虚拟环境之后,会在命令提示符前出现(blog_ven),之后即可以进行pip包的安装,否则安装到的是全局环境下
为确保我们不会遇到pip安装或安全问题,让我们升级更新python的包安装程序,在上面的命令提示符与虚拟环境激活下,运行以下命令:
python -m pip install –upgrade pip
- 迁移项目环境
当需要将本地测试虚拟环境env转移到另一台电脑比如服务器时,直接可将env1里的文件全部复制到env2里,虽简单但涉及修改文件路径。推荐使用requirements.txt方法迁移。
进入本地原虚拟环境env1:
> 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
4、安装wfastcgi模块
为了将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
5、配置iis和django网站
我们在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>
这里对照着自己的网站,修改三处地方替换即可
- scriptprocessor用刚才得到的路径代替
-
<add key="pythonpath" value="">
这里的value要定位到当前的项目根目录(跟manage.py同目录) -
<add key="django_settings_module" value="" />
这里写入app的名字
然后打开iis管理器:打开“控制面板”在“管理工具”中打开“internet information services(iis)管理器”。选中左边栏网站右键添加网站,物理地址选中项目地址
6、配置静态文件
此时网站已经可以访问,但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 进程意外退出
- 注意路径中是否含有中文路径
- 测试中使用python虚拟环境包virtualenv时报错,切换到python自带的env后解决
- 在iis管理器的应用池中,将默认标识
applicationpoolidentity
改为最高权限的localsystem
http 404错误
- 在iis网站中添加处理程序映射的模块映射设置将请求限值的映射选项卡的复选框取消勾选
配置错误:不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认设置的
- 因为 iis 7 采用了更安全的 web.config 管理机制,默认情况下会锁住配置项不允许更改。管理员运行命令行
%windir%\system32\inetsrv\appcmd unlock config -section:system.webserver/handlers