内容简介:本文只介绍首先需要有一个已经可用的 Django 项目。操作环境 Ubuntu。
本文只介绍 部署 。
首先需要有一个已经可用的 Django 项目。
操作环境 Ubuntu。
uWSGI 的安装配置
安装
pip install uwsgi 复制代码
Debian 及衍生系统,如 Ubuntu,需要先安装 python-dev
或 python3-dev
。否则不能正常安装 uwsgi。
使用 uWSGI 在 8000
端口运行 Django 项目:
uwsgi --http 127.0.0.1:8000 --chdir /path/to/project/ --wsgi-file /path/to/wsgi.py 复制代码
根据uWSGI 文档,为了 正确加载模块
,必须添加 chdir
选项。
而实际上, chdir
选项的作用是切换到该目录,见《uwsgi 常用参数说明》。
所以如果所有的配置都 使用完整路径
的话,就不需要 chdir
了。
配置项
--processes --threads --stats
关于 --stats
:
-
因为是一个地址,所以可以使用
telnet
或curl
查看。或者使用官方提供的工具 uwsgitop,最后一部分会简单介绍一下。
示例:
uwsgi --http 127.0.0.1:8000 --chdir /path/to/project/ --wsgi-file /path/to/wsgi.py --processes 4 --threads 2 --stats 127.0.0.1:8080 复制代码
上面的命令在 8000
端口启动了一个 uWSGI 实例,产生4个进程,每个进程2个线程,并可以在 127.0.0.1:8080
查看运行状态。
命令行参数写为配置文件
显然上面的命令有点长了。可以把配置写在配置文件里,执行时只需要一个配置文件做参数:
# conf.ini [uwsgi] http = 127.0.0.1:8000 chdir = /path/to/project/ wsgi-file = /path/to/wsgi.py processes = 4 threads = 2 stats = 127.0.0.1:8080 复制代码
考虑到安全性,uWSGI 文档中提到, 不要使用 root 权限来运行 uWSGI
,添加 uid
和 gid
选项指定用户和组。
使用配置文件运行:
uwsgi conf.ini 复制代码
现在项目已经通过 uWSGI 运行在 8000
端口了。
注意:
http
选项的参数可以只是一个端口,比如 :8000
,不过效果等于 0.0.0.0:8000
。
所以最好完整地写为 127.0.0.1:8000
,让项目只运行在本地,然后反向代理出去。
停止和重启
一般会设置多个进程,那么可以在配置文件中添加 master
选项:
master = true 复制代码
这样一来,除了配置中设置的进程数,还将 另外启动一个 master 进程 ,用来管理其他进程。
这时,
kill kill
可以使用 killall
退出 uWSGI,参考 StackOverflow 上的这个问题
。
可以,但是没有必要。
为了更优雅地操作 uWSGI,再添加 safe-pidfile
选项,使用 pidfile 来操作 uWSGI:
safe-pidfile = /path/to/uwsgi-master.pid 复制代码
safe-pidfile
会在指定的位置生成一个 pid 文件。
这时,
uwsgi --stop /path/to/uwsgi-master.pid uwsgi --reload /path/to/uwsgi-master.pid
详细内容见 管理 uWSGI 服务器 - uWSGI 文档 。
个人感觉 --reload
经常没效果,很多时候 --stop
后再启动才行。
配置 Nginx
这里只给出一个最简单的配置:
server{ listen 80; # 如果有域名 server_name example.com; location / { proxy_pass http://127.0.0.1:8000; include uwsgi_params; } ... } 复制代码
uwsgi_params
文件在 /etc/nginx/
目录中。如果没有,可以从 GitHub
获取。
使用 Unix Sockets
简介
应该叫 Unix Domain Socket,不过 uWSGI 官方文档写的就是 Unix Sockets。
上面 uWSGI 通过 http
配置项使 Django 项目运行在 http://127.0.0.1:8000
,因此 Nginx 中需要使用 proxy_pass
对这个地址进行反向代理。这是使用 TCP Socket 的运行方式。
下面将修改为使用 Unix Sockets 的方式,好处是开销低,效率高。
关于 TCP Socket 和 Unix Sockets 更具体一些的区别,可以看一下这篇文章: 《Node.js HTTP Server 监听 Unix Socket 套接字》 。
一个比较直观的表现是:
http socket
下面看一下怎么改。
修改 uWSGI 配置
删除 http
选项,添加 socket
选项,并设置一个 sock 文件的路径,运行 uWSGI 后会生成该 sock 文件。
生成的 sock 文件可能会缺少执行权限,可以通过设置 chmod-socket = 666
解决。
关于 Linux 中的权限,可以看这篇文章:《檔案權限》。
socket
选项可以设置两种类型的值:
http
例如下面的配置:
[uwsgi] socket = /path/to/sock.sock chmod-socket = 666 ... 复制代码
修改 Nginx 配置
uWSGI 改为使用 socket
后:
当 socket
设置为 IP 时,只要把原 Nginx 配置中的 proxy_pass
改成 uwsgi_pass
即可。
当 socket
设置为 sock 文件时,需要把 proxy_pass
改为:
location / { uwsgi_pass unix:///path/to/sock.sock; ... } ... 复制代码
注意,有三条斜线,由 unix://
和 /path/to/sock.sock
两部分组成
使用 upstream
uWSGI 文档中,Nginx 配置中使用了 uwsgi_pass
和 upstream
:
upstream django{ server ...; } server{ location /{ uwsgi_pass django; } ... } 复制代码
相当于本来直接设置 uwsgi_pass
的值,现在改成了先把值赋给变量 django
,再把变量 django
设置到 uwsgi_pass
上。
使用 IP 地址时,下面两个例子效果是一样的:
# 使用upstream upstream django{ server 127.0.0.1:8000; } server { location / { uwsgi_pass django; ... } } # 不使用upstream server { location / { uwsgi_pass 127.0.0.1:8000; ... } } 复制代码
使用 sock 文件时,下面两个例子效果也是一样的:
# 使用upstream upstream django{ server unix:///path/to/sock.sock; } server { location / { uwsgi_pass django; ... } } # 不使用upstream server { location / { uwsgi_pass unix:///path/to/sock.sock; ... } } 复制代码
upstream 常用于需要做负载均衡的场景,一个 upstream 里可以配置多个 server。
就不再详细介绍了。
配置 SSL 证书
如果要配置 SSL 证书,只要修改 Nginx 的配置即可:
server{ ssl_certificate crt; ssl_certificate_key key; ... } 复制代码
更详细的配置可以参考 StackOverflow 上的这个问题 。
可以使用 Let's Encrypt 生成 免费的 SSL 证书 。
欲知使用方法,请疯狂点击这篇文章: 《你的网站还没用上 HTTPS 吗》 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- linux 部署golang 项目(直接部署和基于nginx部署)
- 【Vue项目总结】项目nginx部署
- CentOS 部署 flask项目
- Docker 部署Python项目
- 【前端打包部署】谈一谈我在SPA项目打包=>部署的处理
- 「实战篇」开源项目docker化运维部署-后端java部署(七)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
函数式算法设计珠玑
Richard Bird / 苏统华、孙芳媛、郝文超、徐琴 / 机械工业出版社 / 2017-4-1 / 69.00
本书采用完全崭新的方式介绍算法设计。全书由30个珠玑构成,每个珠玑单独列为一章,用于解决一个特定编程问题。这些问题的出处五花八门,有的来自游戏或拼图,有的是有趣的组合任务,还有的是散落于数据压缩及字串匹配等领域的更为熟悉的算法。每个珠玑以使用函数式编程语言Haskell对问题进行描述作为开始,每个解答均是诉诸于函数式编程法则从问题表述中计算得到。本书适用于那些喜欢学习算法设计思想的函数式编程人员、......一起来看看 《函数式算法设计珠玑》 这本书的介绍吧!