解压后,去文件目录内的conf文件夹内的httpd.conf修改
Define SRVROOT "C:\Apache24" #Apache24文件的路径,其余不用改。
解压后,去文件目录内的conf文件夹内的httpd.conf修改
Define SRVROOT "C:\Apache24" #Apache24文件的路径,其余不用改。
...
Listen 192.168.31.227:8000 #此处为你要发布的网站ip地址,此处我用我电脑的ip和端口,你也可以用127.0.0.1:8000用于本地测试;80端口自己设置
...
ServerName 192.168.31.227:8000
在bin文件夹下执行
httpd.exe -k install -n “apache2.4” #apache2.4是所创建服务器名称,可更改。
我的电脑右键—>管理---->服务和应用程序---->服务-----> apache2.4右键----->启动
如果启动报错,去bin文件夹下执行命令
>>> httpd.exe 根据报错寻找解决办法,我当时apache路径写错,直接报出所在行目
如果报错如下
D:\Apache24\bin>httpd.exe
(OS 10013)以一种访问权限不允许的方式做了一个访问套接字的尝试。 : AH00072: make_sock: could not bind to address 192.168.1.127:8081
AH00451: no listening sockets available, shutting down
AH00015: Unable to open logs
可能是Listen 端口占用问题
查看端口命令
D:\>netstat -aon|findstr 80 查看80端口占用
启动成功后访问配置的ip地址
会出现访问成功的页面
二 、安装python
1、安装mod_wsgi
下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi 进入网址后,下载对应版本,ap24cv24指apache版本,比如我的是apache24, cp36指python3.6,win_adm64指操作系统为64位,这里一定要下载正确版本,不然后面无法正确部署。、
安装:
pip3 install "mod_wsgi-4.5.24+ap24vc14-cp36-cp36m-win_amd64.whl"
执行命令
mod_wsgi-express module-config
出现三行日志(复制下来记住,可能向下边这样)
LoadFile "c:/users/nickwu/appdata/local/programs/python/python37/python37.dll"
LoadModule wsgi_module "c:/users/nickwu/appdata/local/programs/python/python37/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
WSGIPythonHome "c:/users/nickwu/appdata/local/programs/python/python37"
2 、安装python3
三 、安装mysql
四 、安装redis
五 、安装需要环境
django 、channels、channels_redis、mysqlclient,pywin32、djangorestframework
基本直接pip install 就可以
mysqlclient可能比较难装
主要就是这些库、windows还需要其他的库,需要时再下载
六、配置apache
需要配置uwsgi代理
做一个配置文件引入,可能本来就有,需要解掉注释
Include conf/extra/httpd-vhosts.conf
刚才复制的三行代码
LoadFile "c:/users/nickwu/appdata/local/programs/python/python37/python37.dll"
LoadModule wsgi_module "c:/users/nickwu/appdata/local/programs/python/python37/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
WSGIPythonHome "c:/users/nickwu/appdata/local/programs/python/python37"
项目的路径,不是python的
WSGIPythonPath D:\Object\object\mysite
httpd-vhosts.conf 文件的配置
Listen 8000 监听的端口
<VirtualHost *:8000> 配置虚拟机
ServerName localhost
WSGIScriptAlias / D:/Object/object/mysite/mysite/wsgi.py django wsgi的位置
<Directory D:\Object\object\mysite\mysite> 项目位置
<Files wsgi.py> 应该是wsgi的文件权限
Require all granted
</Files>
</Directory>
Alias /static D:\Object\object\mysite\static 静态文件位置
<Directory D:\Object\object\mysite\static> 静态文件的权限
AllowOverride None
Options all
Require all granted
</Directory>
Alias /media D:\Object\object\mysite\media media配置
<Directory D:\Object\object\mysite\media>
AllowOverride None
Options None
Require all granted
</Directory>
ProxyPass /ws ws://localhost:8001/ws websocket代理
ProxyPassReverse /ws ws://localhost:8001/ws
ProxyRequests Off
ProxyMaxForwards 100
ProxyPreserveHost On
ErrorLog "D:\Object\object\mysite\logs\error.log" 日志位置,这将和apache日志分开打印
CustomLog "D:\Object\object\mysite\logs\access.log" common
</VirtualHost>
为了使用websocket 需要
将 LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so 前面的#去掉。
七 、daphne配置
https://pypi.org/project/daphne/1.2.0/
其实只是一条命令
daphne -b 0.0.0.0 -p 8001 --access-log logs/webso.log --access-log logs/websocket1.log -s asgi --proxy-headers mysite.asgi:application
个人感觉这样运行很不把握,在centos上会使用进程管理工具代替运行。但是windows上不知道用什么代替。
八 、 为了实现开机自启(这部分纯属diy 谁会做请指教)
我把这条命令放到一个bat文件中,但是运行时发现会出现一个cmd窗口,而且关闭就会导致进程中断。于是百度到了一个隐藏cmd的方法,就是用vbs脚本。(python应该也可以,但是感觉麻烦)
set ws=WScript.CreateObject("WScript.Shell")
ws.Run "D:\Object\object\mysite\xxxxx.bat",0
D:\Object\object\mysite\xxxxx.bat 这是bat的位置
九 、说一说问题
1 、uwsgi是依附于apache运行,感觉属于apache进程的下属,不是很稳妥(应该是可以做到分离,但是没有百度到)
2 、daphne依附于cmd运行,感觉更差劲
但是没有百度到好的办法。
十 、说一说channels的问题
博客:https://www.jianshu.com/p/dda97a5b1074
感觉django的这个websocket非常麻烦。为了他做了好多事。运行时发现一个问题,mysql的连接总是断掉。
报错:MySQL server has gone away
django的数据库配置中有一个配置 CONN_MAX_AGE
如果为0: 每一次使用数据库的连接都会删除掉原来的连接重新建立
不为0 : 在距上一次使用连接的时间在这个时间之内不会重新建立
但是channels不会受这个配置控制,没有这种建立数据库连接的配置方法。于是可能访问到时效的连接。博客内有解决办法。