Django基于单一端口下多站点服务部署

作为一个专门用于网站开发使用的服务器,经常要跑多个的网站project,在Django+nginx+uwsgi的软件环境下,如何隔离各个不同的project,保证不同project的开发人员能够同时进行开发,而且彼此不受影响,对于开发效率以及管理非常重要。

一种做法就是,利用不同的端口进行项目隔离访问与部署,该方法相对比较简单直观,在这里不多说。这里主要介绍一下如何在一个端口的情况下,实现多个project的独立访问与部署。

这里的birthdf部署在基于Python的virtualenv虚拟环境,使用了Python 2.7.5 +psql (PostgreSQL) 9.4.0 + django 1.8.3 + nginx-1.6.2 + uwsgi 2.0.5.1,部署前请确保各种软件及依赖安装好。

一、创建PostgreSQL数据库

$ createuser -P birthadmin
$ createdb birthdb -O birthadmin

二、配置django project

shenweiyan@localhost 17:05:50 /App/pyweb/BirthDF 
=> python bin/django-admin.py startproject website

     settings.py中配置PostgreSQL数据库,添加以下内容:

......

DATABASES = {
    'default': {
        #'ENGINE': 'django.db.backends.sqlite3',
        #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE' : 'django.db.backends.postgresql_psycopg2',
        'NAME' : 'birthdb',
        'USER' : 'birthadmin',
        'PASSWORD' : 'shen@5611',
        'HOST' : 'localhost',
        'PORT' : '5432',
    }
}
......
     同步数据库,创建django admin登录用户:

shenweiyan@localhost 16:23:50 /App/pyweb/BirthDF/website 
=> python manage.py syncdb
.......
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'shenweiyan'): birthadmin
Email address: 
Password: 
Password (again): 
Superuser created successfully
.......

三、nginx配置

root@localhost 17:21:52 /usr/local/nginx-1.6.2/conf 
=> vi nginx.conf
......
server {
        listen       80;
        server_name  localhost;
     
        location /birthadmin {
        uwsgi_pass      unix:/App/pyweb/BirthDF/uwsgi/birthd.socket;
        include         uwsgi_params;
        }
        location /birthd {
        uwsgi_pass      unix:/App/pyweb/BirthDF/uwsgi/birthd.socket;
        include         uwsgi_params;
        }
}
......
四、uwsgi配置
shenweiyan@localhost 17:26:08 /App/pyweb/BirthDF 
=> mkdir uwsgi
shenweiyan@localhost 17:26:08 /App/pyweb/BirthDF 
=> vi uwsgi/birthd.ini
[uwsgi]
vhost=false
socket=/App/pyweb/BirthDF/uwsgi/birthd.socket
listen=64
max-requests=1000
socket-timeout=30
master=true
pidfile=/App/pyweb/BirthDF/uwsgi/birthd.pid
processes=1
chdir=/App/pyweb/BirthDF/website
wsgi-file=website/wsgi.py
virtualenv=/App/pyweb/BirthDF

profiler=true
memory-report=true
enable-threads=true
logdate=true
limit-as=2048
uid=nobody
gid=nobody
daemonize=/App/pyweb/BirthDF/uwsgi/birthd.log
五、更改birthdb的admin页面url(区别已有admin url)
shenweiyan@localhost 17:30:41 /App/pyweb/BirthDF/website/website 
=> vi urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'website.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    url(r'^birthadmin/', include(admin.site.urls)),
)
六、重启nginx、uwsgi
root@localhost 17:32:11 /usr/local/nginx-1.6.2/conf 
=> /usr/local/nginx-1.6.2/sbin/nginx -s reload
shenweiyan@localhost 17:33:30 /App/pyweb/BirthDF/website/website 
=> uwsgi /App/pyweb/BirthDF/uwsgi/birthd.ini
[uWSGI] getting INI configuration from /App/pyweb/BirthDF/uwsgi/birthd.ini

七、部署完成。

     登录birthadmin的管理页面,出现以下信息,说明部署完成。

Django基于单一端口下多站点服务部署_第1张图片

     接下来,就可以去部署开发其他的app应用了!



    

你可能感兴趣的:(Django基于单一端口下多站点服务部署)