我之前已经用Flask开发过一个博客,并且使用Nginx+uwsgi+virtualenv成功部署到树莓派上面,这次同样是使用树莓派作为上线测试用的服务器,将Django开发的RewrZ成功部署到上面,发现其实都是大同小异的,除了wsgi.py文件内容不一样之外,其他的配置内容几乎一致。所以就以RewrZ部署为例,探讨下这个组合的部署方式,因为其中涉及的坑其实特别多,并没有网上千篇一律的教程那样三言两语就能了事的,看似非常简单,实则根本就是个大坑。
前言
很多现成的教程看得超级难受,总是很多地方有坑都完全不说,很多地方搞不明白也没有解释提及,还要你另外到处去找教程,那些教程又惊人的相似,可参考价值太低太低。本篇文章可能还有很多不足之处,但一般部署,我想是完全足够了,我将自己部署过程中遇到的坑以及解决方案都一一记录下来,以后也会及时更新新的内容。
安装Python+Virtualenv+Nginx
可以的话不建议使用Virtualenv,这玩意无法 import sqlite3,试过很多方法都无法解决,直接安装在正式环境算了。
Nginx安装失败处理
Nginx安装失败可能是因为apache2服务在运行。
上传网站程序
创建存放网站的目录(如Django),把网站程序上传。
随便你喜欢上传到哪里,不赘述。
Virtualenv虚拟环境
其中,.env 为虚拟环境名称,可以根据自己喜欢随意更改。
退出虚拟环境命令:deactivate
删除虚拟环境命令是:rm -rf .env
安装Flask/Django、uwsgi
(激活虚拟环境后执行)
网站程序初始化(以RewrZ为例)
(PS:虚拟环境内执行)
如果安装依赖出现失败,很可能是有其他关联的依赖库没安装:如libxslt1-dev(libxslt-dev)、libxml2-dev、libffi-dev等,执行sudo apt-get install进行安装之后再试。最常出现的是lxml安装出错,试了很多方法都无效,看到有个老外说是内存不足之类的也会编译失败。关了系统第二天一开机就安装,结果竟然成功了。
如果安装xml报错:
进入超级管理员账户:
执行自动修复脚本:
退回普通用户
配置uwsgi
增加配置文件uwsgi.ini,内容如下(RewrZ项目自带案例):
目录路径请按照实际情况修改,pwd命令可查看当前目录的全路径。
启动uwsgi
成功将会出现提示:
启动:uwsgi --ini uwsgi.ini
停止:uwsgi --stop uwsgi.pid
重新加载:uwsgi --reload uwsgi.pid
uwsgi.pid为进程pid文件
配置Nginx
内容如下(RewrZ项目自带案例):
为了使用这个配置文件生效,创建django.conf的链接文件:
重启Nginx
Nginx安装后默认就已经启动,修改了配置文件,需要对其进行重启。
重启前先对nginx配置进行语法检查
正常情况会出现类似提示:
直接重启命令:
或者
可能会出现类似的错误信息:
类似的解决方法:
访问网站
如果是本地局域网网站,所以可以通过修改hosts来直接访问。Windows编辑C:\Windows\System32\drivers\etc\hosts文件,增加一项,例如:
192.168.1.72 是我的树莓派在本地局域网的地址,你可以直接在路由器后台里面看到。
打开浏览器,输入rewrz.com,回车,即可以看到输出结果。
如果是互联网网站,则设置域名A记录即可,这不在本文章讨论范围内,就不赘述了。
如果系统安装了Apache2很可能会失败,因为同一个端口只能一个程序监听。可以尝试卸载或停用。
但我尝试过网上提供的停用方法,没有效果。于是我选择了卸载:
当然你也可以通过修改端口来实现。
可能会遇到的其他坑
来自 <https://coyotelin.blogspot.com/2017/03/nginx-uwsgi-django-3-q.html>
sqlite3
如果你的專案是使用sqlite3資料庫的話那你可能會在運行時發生下列錯誤:而很理所當然就會使用pip執行安裝,但是卻出現下列錯誤:
這是因為sqlite3已經被包括在python3所以無法使用pip安裝,必須重新編譯安裝python
pcre 在運行uwsgi指令時,log紀錄可能會出現下列警告
為了解決這個問題我們必須安裝pcre並重新安裝uwsgi
Comments NOTHING