前天在一个python技术开发群里大家都在聊django开发相关内容时,突然有一个哥们蹦出来一句,谁能帮我搭建一个线上的django环境,对于这种问题,一般本能的感觉是不难,网上肯定一堆资料,照着敲就可以了,所以很多人直接回复的是,上网上查,结果这哥们来一句,自己都快被网上的资料整崩溃了,看了几十篇没一个能按着步骤搭建完成的,所以跑开发群里来求救来了,我看到后也上网大概搜了下,想看到合适的就发给这位兄台,但我看了几个文章后,非常失望,决定还是自己写一篇吧,网上的内容第一同质化内容太严重,基本你看一篇其它都不用看了,基本都一样,另外最最主要的是文章内容没有价值,因为10篇有9篇都是很久以前的文章,就现在这IT技术的发展,尤其是使用开源的东西,基本每天都在变化,要按这些文章做,能搭建成才怪,所以为了避免大家浪费时间去看那些无用的内容,我就把之前的搭建的环境,整理下,发给大家做个参考,方便大家快速部署线上环境:
具体安装nginx, uwsgi,django不多说了,都是老步骤,除nginx,另外两个都可以通过pip安装,也很方便。
安装完后假设你还没有项目,我们一步一步来,新建一个:
1 2 3 4 |
#cd /home #mkdir mytest #cd mytest #django-admin startproject my_dj |
这样就在/home/mytest/my_jd下建立一个项目,目录结构如下:
1 2 3 4 5 6 7 |
my_dj/ |-- manage.py `-- my_dj |-- __init__.py |-- settings.py |-- urls.py `-- wsgi.py |
接下来配置nginx.conf文件,因为文件太长,我只贴关键行了:
1 2 3 4 5 6 7 8 9 10 11 |
server { listen 80; server_name www.mindg.cn; root /home/mytest/my_dj; index index.py index.htm; access_log /var/log/nginx/mindg.access.log; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:9001; } |
这样nginx就配置完毕了,然后启动uwsgi,启动命令如下:
1 |
uwsgi --socket 127.0.0.1:9001 --chdir /home/mytest/my_dj/ --wsgi-file /home/mytest/my_dj/my_dj/wsgi.py -d uwsgi.log |
注:具体的生成环境可以加自己需要的参数(这个网上真有),也可以写成一个xml或ini的配置文件, -d是后台运行,后跟的日志文件名
然后测试,在此我们需要一个简单的页面来测试,进入/home/mytest/my_dj/my_jd目录下,新建一个views.py文件,内容如下:
1 2 3 4 |
from django.http import HttpResponse def index(request): return HttpResponse('hello world') |
然后修改urls.py如下,标红的是新加的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
from django.conf.urls import patterns, include, url from django.contrib import admin <span style="color: #ff0000;" data-mce-style="color: #ff0000;">from .views import index</span> admin.autodiscover() urlpatterns = patterns('', # Examples: # url(r'^$', 'my_dj.views.home', name='home'), # url(r'^blog/', include('blog.urls')), url(r'^admin/', include(admin.site.urls)), url(r'^$', index),</span> ) |
测试,在浏览器里输入:http://www.mindg.cn
将显示”hello world”,表示搭建成功。
但如果你站点有静态文件,这样访问静态文件是无法加载的,所以我们还需要修改下nginx配置,同时我们也用配置文件方式来启动uwsgi, 方式如下:
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 |
#cat myweb_uwsgi.ini [uwsgi] # Django-related settings socket = 127.0.0.1:9001 # the base directory (full path) chdir = /home/myproject # Django s wsgi file module = myproject.wsgi:application # wsgi-file = myproject/wsgi.py # process-related settings # master master = true # maximum number of worker processes processes = 4 # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true daemonize = /home/myproject/uwsgi_log.log pidfile = /home/myproject/uwsgi_pid.log 启动:uwsgi --ini myweb_uwsgi.ini |
nginx配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
NGINX配置: server { listen 80; server_name 192.168.41.207; root /home/myproject; index index.py index.htm; access_log /var/log/nginx/recorder.access.log; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:9001; } location /static/ { alias /home/myproject/static/; } } |