对于uwsgi+nginx的部署方式,它的访问关系大概是:

1
the web client <-> the web server <-> the socket <-> uwsgi <-> Django

  

如果你需要使用virtualenv:

1
2
3
virtualenv uwsgi-tutorial
cd uwsgi-tutorial
source bin/activate

  

安装django:

1
2
3
pip install Django
django-admin.py startproject mysite
cd mysite

  

这里假设的你域名是:example.com,在后面的你可以换成你的域名或者IP地址。

原教程中使用的是8000端口号,我们这直接使用80端口。

基于uwsgi

安装uwsgi

1
pip install uwsgi

 

先做个测试uwsgi是否能正常使用,创建一个test.py文件(在哪创你自己决定啊,反正配置完要删的):

1
2
3
4
5
# test.py
def 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 nginx
sudo /etc/init.d/nginx start    # start nginx

  

也可以用nginx服务命令比如

1
2
3
sudo service nginx start
sudo service nginx stop
sudo 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 to
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)
}
 
# configuration of the server
server {
    # 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: Permission
denied)

  

那是权限问题,我们改用下面的命令

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 file
module          = project.wsgi
# the virtualenv (full path)
#home            = /path/to/virtualenv
 
# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10
# the socket (use the full path to be safe
socket          = /path/to/your/project/mysite.sock
# ... with appropriate permissions - may be needed
chmod-socket    = 666
# clear environment on exit
vacuum          = 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 file
module          = blogsite.wsgi
# the virtualenv (full path)
# home            = /path/to/virtualenv
 
# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 2
# the socket (use the full path to be safe
socket          = /home/ubuntu/blogsite/mysite.sock
# ... with appropriate permissions - may be needed
chmod-socket    = 666
# clear environment on exit
vacuum          = 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)的更多相关文章

  1. 使用uWSGI+nginx部署Django项目

    最近使用django写了一些项目,不过部署到服务器上碰到一些问题,还有静态文件什么的一堆问题,这里总结一下碰到的问题和解决方案,总体思路是按照官方文档走的. 原文地址:http://uwsgi-doc ...

  2. ubuntu18+uwsgi+nginx部署django项目

    更新系统软件源 sudo apt-get update pip3安装 sudo apt install python3-pip 安装virtualenvwrapper pip3 install vir ...

  3. Ubuntu+Django+uWSGI+Nginx部署Django项目

    安装uWSGI,pip依据自己要使用的python版本自行选择,python2.x版本使用pip进行安装,python3.x版本使用pip3进行安装 pip install uwsgi 配置uWSGI ...

  4. uwsgi+nginx部署django项目

    1. 概念解析(wsgi协议,uwsgi协议,uWSGI) 参考:https://www.cnblogs.com/wspblog/p/8575101.html 1.1 现实世界的web请求: 1.2  ...

  5. 基于腾讯云CentOS7.4+MySQL5.7+Python3+uwsgi+nginx的Django项目部署

    准备知识 1.django一个基于python的开源web框架,请确保自己熟悉它的框架目录结构. 2.uWSGI一个基于自有的uwsgi协议.wsgi协议和http服务协议的web网关 3.nginx ...

  6. uwsgi+anaconda+nginx部署django项目(ubuntu下)

    conda 环境不必多说: conda(或source)  activate  test 进入test虚拟环境 接下来安装uwsgi: pip install uwsgi 在conda环境下大概率安装 ...

  7. vue+uwsgi+nginx部署luffty项目

    在部署项目之前本人已经将前端代码和后端代码发布在了一个网站上,大家可自行下载,当然如果有Xftp工具也可以直接从本地导入. django代码 https://files.cnblogs.com/fil ...

  8. uwsgi + nginx 部署python项目(一)

    uWSGI uWSGI是一个Web服务器,它实现了WSGI协议.uwsgi.http等协议.Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换. 要注意 WSGI / uws ...

  9. 阿里云轻量级服务器和NGINX部署Django项目

    部署条件: 1.一台阿里云服务器(本人的是CentOS系统的服务器) 2.已经构建好的项目 3.服务器上安装并配置Nginx 首先第一步:在服务器上安装并配置Nginx 进入服务器 $ ssh roo ...

  10. 关于Nginx部署Django项目的资料收集

    参考:https://www.cnblogs.com/chenice/p/6921727.html 参考:https://blog.csdn.net/fengzq15/article/details/ ...

随机推荐

  1. Ceph配置与认证授权

    目录 Ceph配置与认证授权 1. 为什么现在不采用修改配置文件的方式了呢? 2. Ceph元变量 3. 使用命令行修改配置 3.1 全部修改(使用服务名) 3.2 部分修改(修改进程) 3.3 临时 ...

  2. IDEA使用——常用配置

    一. 设置鼠标悬停代码提示 二. 设置Ctrl+滚乱调整字体大小 三. 设置自动导包(不设置自动导包,我们也可以通过Alt+Enter进行手动导包) 四. 设置显示行号和方法间分隔符 五. 设置代码提 ...

  3. WPF开发快速入门【8】WPF进行简单的3D开发

    概述 本文介绍采用WPF进行3D开发的一些基础知识,还有HelixToolkit控件的介绍以及在MVVM模式下使用3D框架. 3D开发入门 官方文档对3D开发的一些基础知识已经描述的比较详细了:三维图 ...

  4. LeetCode 208. Implement Trie (Prefix Tree) 实现 Trie (前缀树)(C++/Java)

    题目: Implement a trie with insert, search, and startsWith methods. Example: Trie trie = new Trie(); t ...

  5. 2024-06-08:用go语言,给定三个正整数 n、x和y, 表示城市中的房屋数量以及编号为x和y的两个特殊房屋。 在这座城市中,房屋通过街道相连。对于每个编号i(1 <= i < n), 存在一条

    2024-06-08:用go语言,给定三个正整数 n.x和y, 表示城市中的房屋数量以及编号为x和y的两个特殊房屋. 在这座城市中,房屋通过街道相连.对于每个编号i(1 <= i < n) ...

  6. Vue学习:10.v标签综合-进阶版

    再来一节v标签综合... 实例:水果购物车 实现功能: 显示水果列表:展示可供选择的水果列表,包括名称.价格等信息. 修改水果数量:允许用户在购物车中增加或减少水果的数量. 删除水果:允许用户从购物车 ...

  7. 性能分析: 快速定位SQL问题

    在数据库性能调优的实践中,SQL性能分析是至关重要的一环.一个执行效率低下的SQL语句可能会导致整个系统的性能瓶颈. 为了快速定位并解决这些问题,我们需要对SQL进行性能分析.本文将介绍一些常用的方法 ...

  8. Linux命令行配置RIAD5

    环境准备: 系统: redhat6.9 硬盘:300G*3 SAS MegaCli是一款管理维护硬件RAID软件,可以用来查看raid信息等 1. 安装MegaCli rpm -ivh Lib_Uti ...

  9. 虚拟机安装Linux CENTOS 07 部署NET8 踩坑大全

    首先下载centos07镜像,建议使用阿里云推荐的地址: https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spm=a2c6h.25603 ...

  10. 【论文阅读】Learning to drive from a world on rails

    引用与参考 代码地址:https://github.com/dotchen/WorldOnRails 论文地址:https://arxiv.org/abs/2105.00636 论文部分 已看完 写在 ...