使用uWSGI+nginx部署Django项目(Ubuntu)
对于uwsgi+nginx的部署方式,它的访问关系大概是:
|
1
|
the web client <-> the web server <-> the socket <-> uwsgi <-> Django |
如果你需要使用virtualenv:
|
1
2
3
|
virtualenv uwsgi-tutorialcd uwsgi-tutorialsource bin/activate |
安装django:
|
1
2
3
|
pip install Djangodjango-admin.py startproject mysitecd mysite |
这里假设的你域名是:example.com,在后面的你可以换成你的域名或者IP地址。
原教程中使用的是8000端口号,我们这直接使用80端口。
基于uwsgi
安装uwsgi
|
1
|
pip install uwsgi |
先做个测试uwsgi是否能正常使用,创建一个test.py文件(在哪创你自己决定啊,反正配置完要删的):
|
1
2
3
4
5
|
# test.pydef application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello World"] # python3 #return ["Hello World"] # python2 |
下面我们使用uwsgi:
|
1
|
uwsgi --http :8000 --wsgi-file test.py |
参数解释:
http :8000:指示用的是8000端口
wsgi-file test.py:加载指定文件 test.py
然后你就可以尝试访问了:
|
1
|
http://example.com:8000 |
接下来我们在django项目上尝试一下
新建的django项目需要先:
|
1
|
python manage.py migrate<br>python manage.py runserver |
如果能够运行:
|
1
|
uwsgi --http :8000 --module mysite.wsgi |
参数:
module mysite.wsgi :指定wsgi
尝试访问:
|
1
|
http://example.com:8000 |
现在的结构类似于:
|
1
|
the web client <-> uWSGI <-> Django |
基于 nginx
安装nginx
|
1
2
|
sudo apt-get install nginxsudo /etc/init.d/nginx start # start nginx |
也可以用nginx服务命令比如
|
1
2
3
|
sudo service nginx startsudo service nginx stopsudo service nginx restart |
现在访问http://127.0.0.1/就能看到默认的nginx主页
然后我们来配置nginx文件,先对原始配置文件做个备份
|
1
|
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak |
然后编辑配置文件
|
1
|
sudo vim /etc/nginx/sites-available/default |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# default# the upstream component nginx needs to connect toupstream django { # server unix:///path/to/your/mysite/mysite.sock; # for a file socket server 127.0.0.1:8001; # for a web port socket (we'll use this first)}# configuration of the serverserver { # the port your site will be served on listen 80 default_server; listen [::]:80 default_server ipv6only=on; # the domain name it will serve for server_name .example.com; # substitute your machine's IP address or FQDN charset utf-8; # max upload size client_max_body_size 75M; # adjust to taste # Django media location /media { alias /path/to/your/mysite/media; # your Django project's media files - amend as required } location /static { alias /path/to/your/mysite/static; # your Django project's static files - amend as required } # Finally, send all non-media requests to the Django server. location / { uwsgi_pass django; include /etc/nginx/uwsgi_params; # the uwsgi_params file you installed } |
一下是我的配置信息供参考
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
upstream django { server unix:///home/ubuntu/blogsite/mysite.sock; # for a file socket #server 127.0.0.1:8001; # for a web port socket (we'll use this first)}server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /usr/share/nginx/html; index index.html index.htm; # Make site accessible from http://localhost/ server_name localhost; charset utf-8; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; client_max_body_size 75M; location /media { alias /home/ubuntu/blogsite/media; } location /static { alias /home/ubuntu/blogsite/static; } location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. #try_files $uri $uri/ =404; # Uncomment to enable naxsi on this location # include /etc/nginx/naxsi.rules uwsgi_pass django; include /etc/nginx/uwsgi_params; } |
下面我们对django进行一下配置,编辑django配置文件mysite/settings.py 加上:
|
1
|
STATIC_ROOT = os.path.join(BASE_DIR, "static/") |
这些配置信息具体用处可在我的另一篇文章中看到。
然后执行命令
|
1
|
python manage.py collectstatic |
然后重启nginx
|
1
|
sudo /etc/init.d/nginx restart |
现在可以在django项目中放几个静态文件,看是否能访问:
比如将一个media.png的图片放在mysite/media 文件夹中(没有media文件夹可以自己创建一个)
然后访问
|
1
|
http://example.com/media/media.png |
就能访问到这个图片。
nginx,uwsgi和test.py
还记得我们创建的test.py文件,现在我们再让它发挥一下作用
再test.py 的目录下执行命令:
|
1
|
uwsgi --socket :8001 --wsgi-file test.py |
这里使用的8001端口号跟上面的配置文件中的
|
1
2
3
4
|
upstream django { # server unix:///path/to/your/mysite/mysite.sock; # for a file socket server 127.0.0.1:8001; # for a web port socket (we'll use this first)} |
相对应,我们现在是用的端口socket所以使用下面的配置,以后会使用到文件socket
然后我们访问网站就能看到test.py 文件返回的内容了
这次我们的访问顺序类似于:
|
1
|
the web client <-> the web server <-> the socket <-> uWSGI <-> Python |
注:如果上文中的8001端口不能使用可改用其他端口号
使用unix sockets文件代替端口
前面我们使用了tcp端口,十分简单,但是我们最好使用sockets文件,这样能减少资源消耗
我们将default的配置稍作修改
|
1
2
|
server unix:///path/to/your/mysite/mysite.sock; # for a file socket# server 127.0.0.1:8001; # for a web port socket (we'll use this first) |
然后在django目录中使用命令
|
1
|
uwsgi --socket mysite.sock --wsgi-file test.py |
然后访问网站,
注:如果不能访问(一般来说访问不了!!),我们check一下nginx的错误日志,
|
1
|
vim /var/log/nginx/error.log |
如果在里面看到类似于
|
1
2
|
connect() to unix:///path/to/your/mysite/mysite.sock failed (13: Permissiondenied) |
那是权限问题,我们改用下面的命令
|
1
|
uwsgi --socket mysite.sock --wsgi-file test.py --chmod-socket=666 |
如果能正常访问了,那我们来试试使用wsgi来访问django项目
|
1
|
uwsgi --socket mysite.sock --module mysite.wsgi --chmod-socket=666 |
然后我们使用.ini文件来配置uwsgi(差不多就能完成了),在项目目录下创建mysite_uwsgi.ini
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# mysite_uwsgi.ini file[uwsgi]# Django-related settings# the base directory (full path)chdir = /path/to/your/project# Django's wsgi filemodule = project.wsgi# the virtualenv (full path)#home = /path/to/virtualenv# process-related settings# mastermaster = true# maximum number of worker processesprocesses = 10# the socket (use the full path to be safesocket = /path/to/your/project/mysite.sock# ... with appropriate permissions - may be neededchmod-socket = 666# clear environment on exitvacuum = true |
一下是我的配置,供参考
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
[uwsgi]# Django-related settings# the base directory (full path)chdir = /home/ubuntu/blogsite# Django's wsgi filemodule = blogsite.wsgi# the virtualenv (full path)# home = /path/to/virtualenv# process-related settings# mastermaster = true# maximum number of worker processesprocesses = 2# the socket (use the full path to be safesocket = /home/ubuntu/blogsite/mysite.sock# ... with appropriate permissions - may be neededchmod-socket = 666# clear environment on exitvacuum = true |
然后,跑起来
|
1
|
uwsgi --ini mysite_uwsgi.ini |
以上,使用uWSGI+nginx部署Django项目就算是完成了,还有其它的配置可参考官方文档(比如怎样服务开机自启)
http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html
欢迎多来访问博客:http://liqiongyu.com/blog
使用uWSGI+nginx部署Django项目(Ubuntu)的更多相关文章
- 使用uWSGI+nginx部署Django项目
最近使用django写了一些项目,不过部署到服务器上碰到一些问题,还有静态文件什么的一堆问题,这里总结一下碰到的问题和解决方案,总体思路是按照官方文档走的. 原文地址:http://uwsgi-doc ...
- ubuntu18+uwsgi+nginx部署django项目
更新系统软件源 sudo apt-get update pip3安装 sudo apt install python3-pip 安装virtualenvwrapper pip3 install vir ...
- Ubuntu+Django+uWSGI+Nginx部署Django项目
安装uWSGI,pip依据自己要使用的python版本自行选择,python2.x版本使用pip进行安装,python3.x版本使用pip3进行安装 pip install uwsgi 配置uWSGI ...
- uwsgi+nginx部署django项目
1. 概念解析(wsgi协议,uwsgi协议,uWSGI) 参考:https://www.cnblogs.com/wspblog/p/8575101.html 1.1 现实世界的web请求: 1.2 ...
- 基于腾讯云CentOS7.4+MySQL5.7+Python3+uwsgi+nginx的Django项目部署
准备知识 1.django一个基于python的开源web框架,请确保自己熟悉它的框架目录结构. 2.uWSGI一个基于自有的uwsgi协议.wsgi协议和http服务协议的web网关 3.nginx ...
- uwsgi+anaconda+nginx部署django项目(ubuntu下)
conda 环境不必多说: conda(或source) activate test 进入test虚拟环境 接下来安装uwsgi: pip install uwsgi 在conda环境下大概率安装 ...
- vue+uwsgi+nginx部署luffty项目
在部署项目之前本人已经将前端代码和后端代码发布在了一个网站上,大家可自行下载,当然如果有Xftp工具也可以直接从本地导入. django代码 https://files.cnblogs.com/fil ...
- uwsgi + nginx 部署python项目(一)
uWSGI uWSGI是一个Web服务器,它实现了WSGI协议.uwsgi.http等协议.Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换. 要注意 WSGI / uws ...
- 阿里云轻量级服务器和NGINX部署Django项目
部署条件: 1.一台阿里云服务器(本人的是CentOS系统的服务器) 2.已经构建好的项目 3.服务器上安装并配置Nginx 首先第一步:在服务器上安装并配置Nginx 进入服务器 $ ssh roo ...
- 关于Nginx部署Django项目的资料收集
参考:https://www.cnblogs.com/chenice/p/6921727.html 参考:https://blog.csdn.net/fengzq15/article/details/ ...
随机推荐
- 超详细--redis在Linux环境搭建主从复制
引言Redis是一个高性能的缓存中间件,一个Redis服务器可以支撑很多的并发请求.但是在一些超高的并发场景下,虽然Redis读写速度很快,但也会产生读写压力过大,服务器负载过高的情况.为了分担读写的 ...
- 三:nacos的配置中心
配置中心的使用: 编辑当前项目的pom.xml,加入必要的依赖配置 <!-- spring-cloud-alibaba-dependencies 依赖同注册中心 --> <depen ...
- mysql 命令行安装方式
一:下载 先到 mysql 官方网站下载:https://dev.mysql.com/downloads/mysql/ 点击直接下载: 解压到目录:D:\mysql-8.0.19-winx64 如图 ...
- 运算符优先级 JAVA11
**运算符优先级 ** 规律:算术运算符优先级较高,关系和逻辑运算符优先级较低.多数运算符具有左结合性,单目运算符.三目运算符.赋值运算符具有右结合性. 运算符的优先级 举例 使用优先级为 1 的小括 ...
- C# 实现中文转颜色 - 实现根据名字自动生成头像
一.C#实现中文转颜色 - 实现根据名字自动生成头像 原理说明: 由于名字图像是自动生成,背景颜色不一样,可以考虑一下几种方法: 1)使用随机数来自动生成一个16进制颜色字符串,作为头像的背景颜色: ...
- .Net Core 静态类获取注入服务
由于静态类中无法使用有参构造函数,从而不能使用常规的方式(构造函数获取) 获取服务,我们可以采取通过IApplicationBuilder 获取 1.首先创建一个静态类 using Microsoft ...
- 使用itextPDF实现PDF电子公章工具类
使用itextPDF实现PDF电子公章工具类 一.制作公章 在线网站:印章生成器 - Kalvin在线工具 (kalvinbg.cn) 然后对公章进行下载保存 盖章图片: 二.生成数字签名 2.1: ...
- MoneyPrinterPlus:AI自动短视频生成工具-微软云配置详解
MoneyPrinterPlus可以使用大模型自动生成短视频,我们可以借助Azure提供的语音服务来实现语音合成和语音识别的功能. Azure的语音服务应该是我用过的效果最好的服务了,微软还得是微软. ...
- Linux 应用案例开发手册——基于Zynq-7010/20工业开发板
目 录 1 开发案例说明 4 2 Linux 常用开发案例 4 2.1 tl_led_flash 案例 4 2.2 tl_key_test 案例 7 2.3 tl_can_echo 案例 11 2.4 ...
- Spark内核架构核心组件.txt
1.Application2.spark-submit3.Driver4.SparkContext5.Master6.Worker7.Executor8.Job9.DAGScheduler10.Tas ...