作为一个专门用于网站开发使用的服务器,经常要跑多个的网站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的管理页面,出现以下信息,说明部署完成。
接下来,就可以去部署开发其他的app应用了!