Django+MySQL+uwsgi+Nginx部署
来源:互联网 发布:韩信守荆州 知乎 编辑:程序博客网 时间:2024/05/21 05:39
配置环境:
System:CentOS6.8 64位Database Server version: 5.7.73 Nginx version:1.10.2Python version:python 3.4.1Django version:1.11.2
Nginx
Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性:
当它作为 Web 服务器,相比 Apache来说,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,能够支持高达 50,000 个并发连接数的响应。
当它作为负载均衡服务器,Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
当它作为邮件代理服务器, Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器)。
Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器。 Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。
安装
使用源码编译安装,编译环境gcc g++ 开发库之类的需要提前装好,这里默认你已经装好。一般我们都需要先装pcre和 zlib,pcre为了重写rewrite,zlib为了gzip压缩。如果没有ssl的话应该先装上。
cd /usr/local/srcwget http://nginx.org/download/nginx-1.4.2.tar.gztar -zxvf nginx-1.4.2.tar.gzcd nginx-1.4.2./configure --sbin-path=/usr/local/nginx/nginx \--conf-path=/usr/local/nginx/nginx.conf \--pid-path=/usr/local/nginx/nginx.pid \--with-http_ssl_module \--with-pcre=/opt/app/openet/oetal1/chenhe/pcre-8.37 \--with-zlib=/opt/app/openet/oetal1/chenhe/zlib-1.2.8 \--with-openssl=/opt/app/openet/oetal1/chenhe/openssl-1.0.1tmakemake install
--with-pcre=/usr/src/pcre-8.34
指的是pcre-8.34 的源码路径。 --with-zlib=/usr/src/zlib-1.2.7
指的是zlib-1.2.7 的源码路径。
确保系统的 80 端口没被其他程序占用,运行/usr/local/nginx/nginx
命令来启动 Nginx,然后打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。
Nginx基本配置文件为nginx.conf
文件,当然,也可以使用include包含其余的.conf
文件。可以根据不同的需求添加配置,只需要在include写好配置文件的路径。
几个常用的Nginx命令:
service nginx start
–>启动服务器service nginx stop
–>关闭服务器nginx -s reload
–>服务器重启nginx -t
–>服务器配置文件语法检查
安装使用参考网站:http://www.nginx.cn/doc/index.html
uwsgi
uWSGI,既不用wsgi协议也不用fcgi协议,而是自创了一个uwsgi的协议,据说该协议大约是fcgi协议的10倍,性能超好,内存占用低等诸多好处,而且和Nginx配合可以解决负载均衡等问题,是一种比较经典的配置方式。
安装uwsgi
安装方式也很简单,直接使用python的经典安装方式pip pip install uwsgi
就OK了。
测试uwsgi
安装后应该进行测试是否使用OK:
首先可以在项目根目录下创建一个test.py
文件,源码如下:
# test.pydef application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello World"]
直接使用8000端口和测试文件test.py
运行uwsgi:
uwsgi --http :8000 --wsgi-file test.py
然后通过浏览器访问http://[ip]:8000
可以看到测试文件的”Hello World”则uwsgi运行正常。
Django+uwsgi+Nginx配置
下面进行亲测成功的经典配置Django+uwsgi+Nginx。
Django+Nginx
使用Django内置服务器与Nginx反向代理可以测试Nginx能否正常工作。
首先,将Django项目运行起来,python manage.py runserver 0.0.0.0:8000
运行起来。
然后,开始配置Nginx的相关文件:Nginx的配置文件为nginx.conf
,我们可以单独设置项目文件的Nginx配置,然后将其include到原文件中。
比如,我们的nginx.conf
在/etc/nginx
路径下,我们可以在这个目录下创建一个conf.d
目录,然后再/etc/nginx/conf.f
下创建default.conf
文件,然后再***.conf
文件中配置Nginx对这个项目的代理。
blogproject.conf
文件如下:
## The default server##server {# listen 80 default_server;# listen [::]:80 default_server;# server_name _;# root /usr/share/nginx/html;## # Load configuration files for the default server block.# include /etc/nginx/default.d/*.conf;## location / {# }## error_page 404 /404.html;# location = /40x.html {# }## error_page 500 502 503 504 /50x.html;# location = /50x.html {# }##}#配置开始server{ listen 80; server_name 106.14.215.47; rewrite ^/$ /blog/index/ break; location / { proxy_pass http://[ip地址]:8000; }}#配置结束
然后重启服务器,nginx -s reload
(确保内置服务器在运行中)然后就可以通过默认的80端口访问项目了。http://[ip]
。
Django+uswgi
首先,将用uwsgi服务器运行Django项目,这里我们使用之前创建的项目blogproject来进行测试。当然Django项目本身需要可以正常使用,也就是使用python manage.py runserver 0.0.0.0:8000
可以正常访问。然后更改配置使用uwsgi做服务器:
更改
wsgi.py
文件import osfrom django.core.wsgi import get_wsgi_application#from django.core.handlers.wsgi import WSGIHandleros.environ.setdefault("DJANGO_SETTINGS_MODULE", "blogproject.settings")application = get_wsgi_application()#application = WSGIHandler() #注释掉的是原自动生成的manage.py的配置
- 启动uwsgi服务器
在项目根目录下运行uwsgi --http :8000 --module blogproject.wsgi
- 打开浏览器,输入
http://[ip]:8000+[django的内部urls]
测试项目是否可访问。
Django+uswgi+Nginx
将以上两个服务器与Django配置连接。
保证nginx.conf
同级目录下有uwsgi_params
文件这是连接Nginx和uwsgi的关键。
首先,用uwsgi与django项目启动起来,配置与上文一样,不过只有最后不是直接用HTTP访问,而是和Nginx建立socket连接。也就是Django+uwsgi第二步改成运行uwsgi --socket :8000 --module blogproject.wsgi
。然后通过8000端口和Nginx连接,下面配置Nginx:
在这里直接更改上文创建的blogproject.conf
为:
upstream django{ server [ip]:8000;#与uwsgi的连接端口}server{ listen 80;#外部客户端默认接入端口 server_name [ip]; charset utf-8; rewrite ^/$ /blog/index/ break;#默认输入域名或ip(默认的80端口)时跳转的网址 client_max_body_size 75M; #Django media location /media{ alias /usr/local/www/blogproject/blog/media; } #Django static location /static{ alias /usr/local/www/blogproject/blog/static; } #Django server location / { uwsgi_pass django; include /etc/nginx/uwsgi_params; }}
然后重启Nginx服务器,(注意uwsgi服务器需要一直在运行状态)就可以通过http://[ip]
或者域名访问编写的Django网站了。
配置完成。
Django+MySQL配置
Django默认的数据库为SQLite,如果需要更改自己的数据库时,需要自己重新配置。下面以MySQL为例:
首先,Django无法创建数据库,需要通过命令行或其他MySQL的软件创建一个需要的数据库,不需要创建table,Django可以创建。
- 创建数据库
mysql>CREATE DATABASE blogproject;
- 更改
settings.py
中关于数据库的设置
找到DATABASS设置,更改为:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'blogproject',#创建的数据库名 'USER':'root',#数据库用户名 'PASSWORD':'*******'#数据库密码 }}
然后执行python manage.py makemigrations
和python manage.py migrate
进行数据库迁移,就可以使用MySQL数据库进行数据库存取使用了。
ps:当使用数据库时,遇到问题:Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
可能是数据库未启动使用初始启动命令service mysqld start
- Django+MySQL+uwsgi+Nginx部署
- mysql+uwsgi+django+nginx部署记录
- CentOS nginx django uwsgi mysql 部署项目
- Django+Nginx+uwsgi部署
- nginx uwsgi django部署
- nginx uwsgi 部署django
- django nginx+uwsgi部署
- Django+uWsgi+nginx部署
- Nginx+uWSGI+Django部署
- nginx+uwsgi部署django
- nginx+uwsgi部署django
- nginx+uwsgi 部署django
- Django nginx uwsgi部署
- uwsgi+django+nginx部署
- nginx+uwsgi+django部署
- nginx + uwsgi + django部署
- DJango+UWSgi+Nginx部署
- uwsgi+nginx部署Django
- R中的直方图和核密度图绘制
- Drying (二分)
- git 命令 —— checkout
- innodb change buffer 初识
- Java之泛型
- Django+MySQL+uwsgi+Nginx部署
- 更改MyEclipse/Eclipse的工作空间名字(workspace)
- Python:文件中每行开头加一个逗号‘,’
- SSO -单点登录的实现原理
- 通过WatchService检测文件状态
- java customConfig.properties文件读取数据
- 菜鸟笔记--软件测试--黑盒测试
- 元素的拖拽和通过元素的拖拽模拟滚动条以及碰撞效果
- NY oj 79 拦截导弹