Nginx+PostgreSQL+Django+UWSGI搭建

最近因为项目上的需要开始大量使用nginx,因此也想趁机将以前常用的django+apache的架构换成django+nginx。常见的 django webapp 部署方式采用FCGIWSGI的方式部署,在这里主要对CentOS 6.5下Python 2.7.5环境下采用 Nginx + PostgreSQL + Django + uwsgi 的搭建与配置步骤做一个简要说明,主要留作备忘,也希望对大家有所帮助。

一、Nginx-1.6.2安装

1. 在安装nginx前,需要确保系统安装了g++、gcc、openssl、openssl-devel、pcre、pcre-devel和zlib、zlib-devel软件。安装必须软件:

[email protected] 10:48:14 /usr/local
=> yum install gcc-c++
=> yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel

2. 卸载系统原有的nginx

[email protected] 10:57:36 /usr/local
=> yum remove nginx

3. 编译安装Nginx

[email protected] 10:57:36 /usr/local/download
=> wget http://nginx.org/download/nginx-1.6.2.tar.gz
=> tar -zxvf nginx-1.6.2.tar.gz
=> cd nginx-1.6.2
=> ./configure --prefix=/usr/local/nginx-1.6.2
=> make && make install
=> ln -s /usr/local/nginx-1.6.2/sbin/nginx /usr/bin/nginx

4. 启动Nginx

[email protected] 17:04:38 /usr/local/download/nginx-1.6.2
=> /usr/local/nginx-1.6.2/sbin/nginx
其他nginx常用命令:
=> /usr/local/nginx-1.6.2/sbin/nginx -s reload   # nginx重启(stop, quit, reopen, reload)

5. 测试是否安装成功

#测试端口
    netstat –na|grep 80

#浏览器中测试(有时候ip:80无法显示,需要关闭防火墙的干扰:service iptables stop)
    http://localhost 

# Nginx正常启动:

二、PostgreSQL-9.4.0安装

1. 新增用户组及用户

PostgreSQL默认是通过postgres:postgres来启动和使用的,因此在安装PostgreSQL前需要先创建postgres用户组及postgres用户。

[email protected] 11:30:18 ~

=> groupadd postgres

=> useradd postgres -g postgres 
=> passwd postgres                       #设置postgres用户密码

2、安装postgresql-9.4.0

[email protected] 11:35:04 /usr/local/download
=> wget https://ftp.postgresql.org/pub/source/v9.4.0/postgresql-9.4.0.tar.gz
=> tar zvxf postgresql-9.4.0.tar.gz
=> cd postgresql-9.4.0
=> ./configure --prefix=/usr/local/postgresql-9.4.0
=> make
=> make install

3. PostgreSQL启动 

   # 新建数据库文件保存目录

=> mkdir /usr/local/postgresql-9.4.0/database

   # 新建数据库log文件目录

=> mkdir /usr/local/postgresql-9.4.0/logdb

   # 修改目录拥有者

=> chown postgres:postgres /usr/local/postgresql-9.4.0/database -R
=> chown postgres:postgres /usr/local/postgresql-9.4.0/logdb –R

   # 执行数据库初始化脚本

=> su postgres
[[email protected] postgresql-9.4.0]$ /usr/local/postgresql-9.4.0/bin/initdb --encoding=utf8 -D /usr/local/postgresql-9.4.0/database

   # 启动PostgreSQL服务

[[email protected] postgresql-9.4.0]$ touch /usr/local/postgresql-9.4.0/log/logfile
[[email protected] postgresql-9.4.0]$ /usr/local/postgresql-9.4.0/bin/pg_ctl -D /usr/local/postgresql-9.4.0/database -l /usr/local/postgresql-9.4.0/logdb/logfile start

   # 登录PostgreSQL数据库

[[email protected] postgresql-9.4.0]$ psql

三、Django-1.6.10安装

1. 源码安装

[email protected] 12:51:56 /usr/local/download
=> wget https://www.djangoproject.com/m/releases/1.6/Django-1.6.10.tar.gz
=> tar zvxf Django-1.6.10.tar.gz
=> cd Django-1.6.10
=> python setup.py install

2.测试是否安装成功

四、uwsgi-2.0.5.1安装

1. 源码安装

[email protected] 13:05:52 /usr/local/download
=> wget http://projects.unbit.it/downloads/uwsgi-2.0.5.1.tar.gz
=> tar zvxf uwsgi-2.0.5.1.tar.gz
=> cd uwsgi-2.0.5.1
=> python setup.py install

# 该安装,默认将uwsgi安装在了$python的路径下了,我这里安装在了:/usr/local/python2.7/bin/uwsgi

2. 测试是否安装成功

[email protected] 13:13:14 /App/tmp
=> vi test.py

def application(env, start_response):
    start_response(‘200 OK‘, [(‘Content-Type‘,‘text/html‘)])
    return "Hello Worldi,uwsgi success!"
[email protected] 13:13:48 /App/tmp
=> uwsgi --http :9090 --wsgi-file /App/tmp/test.py

五、Django配置使用PostgreSQL

1. 安装psycopg2

    Python使用PostgreSQL数据库,需要通过psycopg2进行调用,因此Django中使用PostgreSQL,就先应该安装psycopg2模块:

[email protected] 13:30:37 /usr/local/download
=> wget http://initd.org/psycopg/tarballs/PSYCOPG-2-5/psycopg2-2.5.4.tar.gz
=> tar zvxf psycopg2-2.5.4.tar.gz
=> cd psycopg2-2.5.4
=> python setup.py install

2. 创建Django Project

[email protected] 13:25:53 /App/django-websites
=> python /usr/local/python2.7/bin/django-admin.py startproject websites

3. 设置Django使用PostgreSQL

[email protected] 13:27:33 /App/django-websites/websites/websites
=> vi settings.py
…………
DATABASES = {
    ‘default‘: {
        #‘ENGINE‘: ‘django.db.backends.sqlite3‘,
        #‘NAME‘: os.path.join(BASE_DIR, ‘db.sqlite3‘),
        ‘ENGINE‘ : ‘django.db.backends.postgresql_psycopg2‘,
        ‘NAME‘ : ‘djangodb‘,
        ‘USER‘ : ‘django‘,
        ‘PASSWORD‘ : ‘123456‘,
        ‘HOST‘ : ‘localhost‘,
        ‘PORT‘ : ‘5432‘,

    }
}
………

4. 创建后台数据库

[email protected] 13:40:17 /App/django-websites/websites
=> python manage.py syncdb
Creating tables ...
Creating table django_admin_log
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Creating table django_content_type
Creating table django_session

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     # 输入yes/no
Username (leave blank to use ‘shenweiyanj‘): django(不输,即默认当前系统用户名)
Email address:    # 邮箱地址,不输的话,可直接enter跳过
Password:  123456    # 密码
Password (again):  123456    # 确认密码
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)

六、uWSGI搭配Nginx+Django使用

1. Nginx 配置

   #在 nginx.conf 上加入/修改,我的 server 配置如下(一切从简……):

server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;
        add_header X-Frame-Options SAMEORIGIN;
        add_header X-XSS-Protection "1;mode=block";
        server_tokens off;

        #access_log  logs/host.access.log  main;
        access_log  /usr/local/nginx-1.6.2/logs/access.log;
        error_log  /usr/local/nginx-1.6.2/logs/error.log;
     
        location /static {                alias /usr/local/python2.7/lib/python2.7/site-packages/django/contrib/admin/static/;        }
        location / {
                uwsgi_pass      127.0.0.1:8011;
                include         uwsgi_params;
        }
        #error_page  404              /404.html;
}

2. uWSGI 配置

   # ini 配置

[email protected] 14:02:56 ~
=> mkdir -p /etc/uwsgi/logs
[email protected] 14:02:56 ~
=> vi /etc/uwsgi/uwsgi.ini
[uwsgi]
socket=127.0.0.1:8011
listen=128
max-requests=1000
socket-timeout=10
master=true
pidfile=/etc/uwsgi/logs/uwsgi.pid
processes=1
pythonpath=/App/django-websites/websites/
chdir=/App/django-websites/websites/websites
module=websites.wsgi:application
profiler=true
memory-report=true
enable-threads=true
logdate=true
limit-as=256
uid=nobody
gid=nobody
daemonize=/etc/uwsgi/logs/django.log

   # 启动uwsgi

[email protected] 14:06:09 ~
=> uwsgi /etc/uwsgi/uwsgi.ini
[uWSGI] getting INI configuration from /etc/uwsgi/uwsgi.ini

  # 每一次Django后台数据库进行修改,均需要重启uwsgi,其重启可通过kill掉/etc/uwsgi/logs/uwsgi.pid,再利用“uwsgi /etc/uwsgi/uwsgi.ini”启动即可。

七、完成安装

   至此,Nginx+PostgreSQL+Django+UWSGI搭建已全部完成,我们在网页浏览器打开:http://localhost/admin/,输入五(4)中设置的用户名(django)和密码(django)登录Django的后台数据库管理界面,即可看到相应的后台数据库信息。

时间: 2024-08-28 02:30:57

Nginx+PostgreSQL+Django+UWSGI搭建的相关文章

Nginx与django+uwsgi成功勾搭的始末(下)

在"Nginx与django+uwsgi成功勾搭的始末(上)"里我们已经实现了可以用浏览器访问我们django里的静态文件,注意,是django里的文件,而不是nginx里的.也就是说我们打开nginx是可以访问django里的静态文件,而不能访问django里的其他内容,只有我们启动了nginx同时也启动了django,才会访问django里的动态文件. 这篇文章的内容是验证socket是否可以连接起nginx和uwsgi. 在/home/下面我记得我们是有一个叫logan.py,里

阿里云 centos7 django + uWSGI+Nginx + python3 部署攻略

centos7+nginx+python3+django+uwsgi配置Django 项目部署 1.租的服务器(选择centos)的话,需要在阿里云后台控制台开放几个端口,克隆一下已开放的端口,tcp自定义就行,mysql(3306),nginx(8000以上都行).(都切换到root用户操作) 2.安装python3 3.安装nginx 4.安装mysql(这一步如果暂时用不上数据库也可以不操作) 5.确定2,3两步安装成功了,接下来就用pip3 安装django 和uwsgi, 在进行下一步

[zz]阿里云计算:CentOS+nginx+Django+Postgresql web环境搭建

原文链接: http://www.cnblogs.com/AllStarGIS/p/3788518.html 参考链接: 1. http://www.cnblogs.com/zhouej/archive/2012/03/25/2379646.html 2. http://ec58.com/archives/2836 最近在在万网和阿里云上分别购买了一个域名和一台云服务器,打算用来做点什么.昨天吃完晚饭稍作休息开始对这个新奇的玩意作了些了解并着手配置其运行环境,今早凌晨4点多才弄得7788,为此也

python django+uwsgi+nginx 搭建步骤(血一般的教训)

安装Django 没有pip的童鞋可以看http://blog.csdn.net/imphp/article/details/38228619安装python包管理工具pip 先在 https://pypi.python.org/ 上 搜索Django,排在第一的那个就是我们要安装的主要框架Django啦- 点进去可以查找一些相关文档,虽然全部是鸟语花香,不过有翻译.百度.炕忙,就算是菜鸟也成英国鸟了. Django 的官网文档 https://docs.djangoproject.com/en

Centos 7 下部署Django + uWSGI + Nginx

1.废话 之前利用Django写了些测试工具,一直是直接 python manage.py runserver 8081这么来用的.用户量不大,倒也不影响什么.uWSGI+Nginx的性能肯定要好,so 研究了一下 2.环境: Python: 3.5 Django: 1.8 OS: CentOS 7 x86_64 uwsgi: 2.0.17 3.安装Python3.5 不要删除自带的python2.7,否则会出问题,因为centos许多软件需要依赖系统自带python 安装依赖工具 yum in

跨过Nginx上基于uWSGI部署Django项目的坑

先说说他们的关系,Nginx和uWSGI都是Web服务器,Nginx负责静态内容,uWSGI负责Python这样的动态内容,二者配合共同提供Web服务以实现提高效率和负载均衡等目的.uWSGI实现了多个协议,如WSGI,HTTP协议,还有它自己的uwsgi协议,想了解更多关于uWSGI和uwsgi协议内容可以查阅这里.这样和fastcgi类似,请求和响应的流程如下: Request > Nginx > uWSGI > Django > uWSGI > Nginx > R

Nginx+Django+Uwsgi+php

在FreeBSD结合Nginx和FastCGI简单配置Django和PHP  http://blog.chinaunix.net/uid-11131943-id-3031767.html Nginx+Django+Uwsgi架构部署 http://www.linuxidc.com/Linux/2014-09/106928.htm

Django + Uwsgi + Nginx 的生产环境部署

使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等,本篇文章总结归纳了一下基于uwsgi+Nginx下django项目生产环境的部署 准备条件: 1.确保有一个能够用runserver正常启动的django项目 2.项目已上传到linux 3.linux上已部署好python环境,且已安装好项目所需的模块 安装uwsgi uwsgi是python的一个模块,安装u

python django uwsgi nginx   实例

实例:192.168.200.133 1.安装django wget  https://www.djangoproject.com/download/1.7.11/tarball/ 1.3.安装 cd Django-1.x.y sudo python setup.py install 1.4.创建  django-admin.py startproject testdj 1.5.启动测试 cd testdj # 切换到我们创建的项目 python manage.py runserver 2.安装