[django]django 部署,gunicorn、virtualenv、nginx

65 篇文章 16 订阅
10 篇文章 0 订阅

http://www.cnblogs.com/tk091/p/3859514.html

使用gunicorn 来部署django

django写代码简单,但部署是个难题,今天终于发现gunicorn 这个好东西,与大家一起分享。

 

环境:ubuntu 14.04 64bit + django 1.6.5 + virtualenv + gunicorn


一、创建虚拟环境

复制代码
root@recall:/home/www# pwd
/home/www

root@recall:/home/www# virtualenv bugenv

New python executable in bugenv/bin/python
Installing setuptools, pip...done.

root@recall:/home/www# ll
total 16
drwxr-xr-x 4 root root 4096 Jul 21 15:04 ./
drwxr-xr-x 5 root root 4096 Jul 21 12:34 ../
drwxr-xr-x 6 root root 4096 Jul 21 15:05 bugenv/
....................................(这一行是私人数据,这里不影响,所以不显示了)
复制代码

 


二、进入虚拟环境

root@recall:/home/www# cd bugenv/
root@recall:/home/www/bugenv# source bin/activate
(bugenv)root@recall:/home/www/bugenv#

 

三、下载django和gunicorn
pip install django==1.6.5
pip install gunicorn

  下载django和gunicorn

四、创建django项目和django app

django-admin.py startproject bugproject
python manages.py startapp bugapp

复制代码
1 (bugenv)root@recall:/home/www/bugenv# ls
2 bin include lib local
3 (bugenv)root@recall:/home/www/bugenv# mkdir djcode
4 (bugenv)root@recall:/home/www/bugenv# cd djcode/
5 (bugenv)root@recall:/home/www/bugenv/djcode# django-admin.py startproject bugproject
6 (bugenv)root@recall:/home/www/bugenv/djcode# cd bugproject/
7 (bugenv)root@recall:/home/www/bugenv/djcode/bugproject# python manage.py startapp bugapp
复制代码

 


五、设置django 的settings.py文件
添加app,最后结果如下:

复制代码
 1 INSTALLED_APPS = (
 2     'django.contrib.admin',
 3     'django.contrib.auth',
 4     'django.contrib.contenttypes',
 5     'django.contrib.sessions',
 6     'django.contrib.messages',
 7     'django.contrib.staticfiles',
 8     # add app
 9     'bugapp',
10     'gunicorn',
11 )
复制代码

 

六、运行gunicorn

1 (bugenv)root@recall:/home/www/bugenv/djcode/bugproject# pwd
2 /home/www/bugenv/djcode/bugproject
3 (bugenv)root@recall:/home/www/bugenv/djcode/bugproject# gunicorn bugproject.wsgi:application -b 127.0.0.1:1010

如果没有问题,程序就挂起了。
如果你要操作其它东西,你最好使用nohup或screen

七、测试

7.1 我这里用的是nohup运行的(也就是说,上面六的最后一行命令变成了下面这一行)

1 (bugenv)root@recall:/home/www/bugenv/djcode/bugproject# nohup gunicorn bugproject.wsgi:application -b 127.0.0.1:1010&

然后用tail查看nohup.out,没有任何信息就对了

7.2 查看端口

复制代码
1 (bugenv)root@recall:/home/www/bugenv/djcode/bugproject# netstat -lpnt 
2 Active Internet connections (only servers)
3 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
4 ---------------------------------------------------------------------------------------------    
5 tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      772/nginx       
6 tcp        0      0 127.0.0.1:1010          0.0.0.0:*               LISTEN      9842/python     
7 tcp        0      0 0.0.0.0:******          0.0.0.0:*               LISTEN      8387/python     
8 tcp        0      0 0.0.0.0:*****           0.0.0.0:*               LISTEN      689/python        
9 tcp        0      0 0.0.0.0:****            0.0.0.0:*               LISTEN      1013/python  
复制代码

 

我们使用的1010端口已经被占用了

7.3 使用curl 进行测试
root@recall:~# curl 127.0.0.1:1010
结果如下:

复制代码
 1 <!DOCTYPE html>
 2 <html lang="en"><head>
 3   <meta http-equiv="content-type" content="text/html; charset=utf-8">
 4   <meta name="robots" content="NONE,NOARCHIVE"><title>Welcome to Django</title>
 5   <style type="text/css">
 6     html * { padding:0; margin:0; }
 7     body * { padding:10px 20px; }
 8     body * * { padding:0; }
 9     body { font:small sans-serif; }
10     body>div { border-bottom:1px solid #ddd; }
11     h1 { font-weight:normal; }
12     h2 { margin-bottom:.8em; }
13     h2 span { font-size:80%; color:#666; font-weight:normal; }
14     h3 { margin:1em 0 .5em 0; }
15     h4 { margin:0 0 .5em 0; font-weight: normal; }
16     table { border:1px solid #ccc; border-collapse: collapse; width:100%; background:white; }
17     tbody td, tbody th { vertical-align:top; padding:2px 3px; }
18     thead th { padding:1px 6px 1px 3px; background:#fefefe; text-align:left; font-weight:normal; font-size:11px; border:1px solid #ddd; }
19     tbody th { width:12em; text-align:right; color:#666; padding-right:.5em; }
20     #summary { background: #e0ebff; }
21     #summary h2 { font-weight: normal; color: #666; }
22     #explanation { background:#eee; }
23     #instructions { background:#f6f6f6; }
24     #summary table { border:none; background:transparent; }
25   </style>
26 </head>
27 
28 <body>
29 <div id="summary">
30   <h1>It worked!</h1>
31   <h2>Congratulations on your first Django-powered page.</h2>
32 </div>
33 
34 <div id="instructions">
35   <p>
36     Of course, you haven't actually done any work yet.
37     Next, start your first app by running <code>python manage.py startapp [appname]</code>.
38   </p>
39 </div>
40 
41 <div id="explanation">
42   <p>
43     You're seeing this message because you have <code>DEBUG = True</code> in your
44     Django settings file and you haven't configured any URLs. Get to work!
45   </p>
46 </div>
47 </body></html>
复制代码

 

八、配置nginx 
8.1 只有127.0.0.1:1010能访问时不够的,我们还需要配置nginx

root@recall:~# vim /usr/local/nginx/nginx.conf

复制代码
 1     server{
 2         listen 80;
 3         resolver 8.8.8.8;
 4         server_name www.xxoo.com;
 5 
 6         location / {
 7                 proxy_pass http://127.0.0.1:1010;
 8                 proxy_set_header Host $host;
 9                 proxy_set_header X-Real-IP $remote_addr;
10                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
11         }
12     }
复制代码

至于静态文件,自己百度、谷歌配置就好了。

8.2 测试配置文件

1 root@recall:~# /usr/local/nginx/nginx -t
2 nginx: the configuration file /usr/local/nginx/nginx.conf syntax is ok
3 nginx: configuration file /usr/local/nginx/nginx.conf test is successful

 

8.3 nginx 重新加载配置文件
root@recall:~# /usr/local/nginx/nginx -s reload


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django是一个优秀的Web框架,可以帮助开发者快速构建Web应用程序。但是,当我们需要将Django应用程序部署到生产环境时,我们需要考虑很多方面,例如性能、安全、可靠性等。本文将介绍如何使用GunicornNginxDjango应用程序部署到生产环境中。 ## 准备工作 在开始之前,我们需要在服务器上安装一些必要的软件包和库。 ### 安装Python和pip 首先,我们需要在服务器上安装Python和pip。如果您已经安装了它们,请跳过此步骤。 ```shell # Ubuntu sudo apt-get update sudo apt-get install python3 python3-pip # CentOS sudo yum update sudo yum install python3 python3-pip ``` ### 创建虚拟环境 为了避免与其他Python应用程序的依赖项冲突,我们建议在服务器上使用虚拟环境。在此过程中,我们将使用venv创建一个虚拟环境。 ```shell python3 -m venv myenv source myenv/bin/activate ``` ### 安装DjangoGunicorn 一旦我们进入虚拟环境,我们可以使用pip安装DjangoGunicorn。 ```shell pip install django gunicorn ``` ## 配置Gunicorn Gunicorn是一个Python WSGI HTTP服务器,可以处理Django应用程序的并发请求。下面是如何配置Gunicorn。 ### 创建Gunicorn配置文件 我们可以为Gunicorn创建一个配置文件。在此过程中,我们将创建一个名为`gunicorn_config.py`的文件。 ```python bind = "127.0.0.1:8000" workers = 3 user = "myuser" ``` 在这个配置文件中,我们定义了以下几个参数: - `bind`:指定Gunicorn绑定的IP地址和端口号。 - `workers`:指定Gunicorn启动的工作进程数。 - `user`:指定Gunicorn运行的用户。 请注意,我们将Gunicorn绑定到`127.0.0.1`地址,这意味着它只能在本地访问。如果您想让Gunicorn在公共IP地址上运行,请使用`0.0.0.0`。 ### 启动Gunicorn 一旦我们创建了配置文件,我们可以使用以下命令启动Gunicorn。 ```shell gunicorn myproject.wsgi:application -c gunicorn_config.py ``` 在这个命令中,我们指定了Django的WSGI入口点`myproject.wsgi:application`,以及Gunicorn配置文件`gunicorn_config.py`。 ## 配置Nginx 现在我们已经成功启动了Gunicorn,我们需要将Nginx配置为反向代理,以便客户端可以通过Nginx访问我们的应用程序。 ### 安装Nginx 如果您还没有安装Nginx,请按照以下步骤进行安装。 ```shell # Ubuntu sudo apt-get update sudo apt-get install nginx # CentOS sudo yum update sudo yum install nginx ``` ### 创建Nginx配置文件 我们需要为Nginx创建一个配置文件。在此过程中,我们将创建一个名为`myproject.conf`的文件。 ```nginx server { listen 80; server_name example.com; access_log /var/log/nginx/access.log; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` 在这个配置文件中,我们定义了以下几个参数: - `listen`:指定Nginx监听的端口号。 - `server_name`:指定Nginx的域名。 - `access_log`:指定Nginx的访问日志路径。 - `location`:指定Nginx的URL匹配规则和反向代理设置。 请注意,我们将Nginx绑定到`example.com`域名,并将所有请求转发到Gunicorn运行的`127.0.0.1:8000`地址。 ### 重启Nginx 一旦我们创建了配置文件,我们可以使用以下命令重新启动Nginx。 ```shell sudo service nginx restart ``` ## 结论 现在我们已经成功地将Django应用程序部署到生产环境中。我们使用Gunicorn处理并发请求,并使用Nginx作为反向代理,以提高性能和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值