热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Nginx+uwsgi在亚马逊云服务器上部署python+django项目完整版(二)——部署配置及相关知识

---恢复内容开始---一、前提:1、django项目文件已放置在云服务器上,配置好运行环境,可正常运行2、云服务器可正常连接二、相关知识1、pythonmanage.pyruns

---恢复内容开始---

一、前提:

1、django项目文件已放置在云服务器上,配置好运行环境,可正常运行

2、云服务器可正常连接

二、相关知识

1、python manage.py runserver:这是一款适合开发阶段使用的服务器,不能对大量请求进行同时处理,不适合运行在真实的生产环境中,在实际生产环境中使用WSGI作为接口,连接web和python代码(也就是django项目);

2、WSGI:Web服务器网关接口,英文为Python Web Server Gateway Interface,缩写为WSGI,是Python应用程序或框架和Web服务器之间的一种接口;

3、WSGI没有官方的实现, 因为WSGI更像一个协议,只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行;

4、django在创建project时,会自动生成wsgi.py文件,里面会指明settings、application对象;

5、uWSGI:前面说到WSGI类似协议,可以通过uWSGI进行实现,uWSGI完全由C语言编写,运行速度快,是一个快速、自我修复、开发人员和系统管理员友好的服务器;

6、Nginx:Nginx的主要作用有两个:负载均衡(多台服务器轮流处理请求,尽可能的使多个服务器均摊请求压力);反向代理(隐藏真实服务器,更加安全);

7、使用Nginx+uWSGI配置服务器时,动态数据请求的实现架构为(静态数据直接有Nginx反馈给用户):  

首先客户端请求服务资源,
nginx作为直接对外的服务接口,接收到客户端发送过来的http请求,会解包、分析,
如果是静态文件请求就根据nginx配置的静态文件目录,返回请求的资源,
如果是动态的请求,nginx就通过配置文件,将请求传递给uWSGI;
uWSGI 将接收到的包进行处理,并转发给wsgi,
wsgi根据请求调用django工程的某个文件或函数,处理完后django将返回值交给wsgi,
wsgi将返回值进行打包,转发给uWSGI,
uWSGI接收后转发给nginx,nginx最终将返回值返回给客户端(如浏览器)。
*注:不同的组件之间传递信息涉及到数据格式和协议的转换

整个配置过程的大方向是:配置uWSGI、配置Nginx、收集静态文件。

 

三、部署前对项目的修改

  主要修改setting.py:

1 DEBUG = False
2 ALLOW_HOSTS=['*',]表示可以访问服务器的ip

  如果项目中有涉及域名的,也需要更改,如有邮箱验证、重置密码链接等功能的。

  其他修改:

1 # 新建secret_key.txt文件(例如:/var/www/secret_key.txt)
2 # 将配置中SECRET_KEYS等号后面的内容复制到secret_key.txt中,保存
3 # 将配置SECRET_KEYS改为:
4 with open('/var/www/secret_key.txt') as f:
5     SECRET_KEY = f.read().strip()

四、uWSGI的安装及配置

  安装:

 pip install uwsgi

  在项目根目录下新建uwsgi.ini文件,(eg:项目目录/var/www/project1)配置如下:

 1 [uwsgi]
 2 socket=127.0.0.1:8000        # 外网ip:端口(使用nginx连接时,使用socket)
 3 # http=外网ip:端口(直接做web服务器,使用http,与socket只能选择一个使用)
 4 chdir=/var/www/project1         # 项目根目录,绝对路径
 5 wsgi-file=project1/wsgi.py  # 项目中wsgi.py文件的目录,相对于项目根目录
 6 processes=4
 7 threads=2
 8 master=True
 9 pidfile=uwsgi.pid
10 daemOnize=uswgi.log

  相关命令:

启动:uwsgi --ini uwsgi.ini

停止:uwsgi --stop uwsgi.pid

重启:uwsgi --reload uwsgi.pid

  可使用 ps ajx|grep uwsgi 查看运行状态,这时候访问网址,发现静态文件是不能加载的,下面继续进行。

五、Nginx的安装及配置

  安装:

 sudo apt-get nginx

  配置,找到安装目录,编辑安装目录下的conf/nginx.conf文件,如果没找到使用以下命令进行查找:

 sudo find / -name nginx.conf  

  修改配置:

 sudo vim /ect/nginx/conf/nginx.conf   # (安装目录换成自己的)

  配置域名及监听端口:

server {
        listen       80 default_server;
        listen       [::]:80 default_server;    // 监听的端口
        server_name  www.xxxx.xxx;   // 你的域名
        root          /var/www/object1/templates;   // 项目静态文件


...
}

  

 

  配置转向的路由:

1 location / {            # 如果没有这一项,在server内自行添加)
2   include uwsgi_params;    # 将所有的参数转到uwsgi下 
3   uwsgi_pass 127.0.0.1:8000;   # 将用户的请求转向的地址
4 }
配置静态文件目录,新建静态文件夹:
 $sudo chmod 777 /var/www/proje1  # 权限更改为所有用户均有读写权限
 $cd /var/www/proje1
 $mkdir static   # 新建静态文件夹,用来收集、存放静态文件

  配置Nginx中静态文件目录

1 location /static {    # 配置静态文件路径
2      alias /var/www/proje1/static/;   # 此目录必须有用户的读写权限
3  }
location /media {    # 配置静态文件路径,此项为新增
alias /var/www/blog/media/; # 此目录必须有用户的读写权限
}

  修改setting配置:

1 STATIC_ROOT='/var/www/project1/static/'
2 STATIC_URL='/static/'

  收集静态文件:

$cd /var/www/project1
$python manage.py collectstatic

相关命令:

查看版本:sudo sbin/nginx -v

启动:sudo sbin/nginx

停止:sudo sbin/nginx -s stop

重启:sudo sbin/nginx -s reload

 

  整个配置完成后重启Nginx,重启uWSGI即可

 

---恢复内容结束---

一、前提:

1、django项目文件已放置在云服务器上,配置好运行环境,可正常运行

2、云服务器可正常连接

二、相关知识

1、python manage.py runserver:这是一款适合开发阶段使用的服务器,不能对大量请求进行同时处理,不适合运行在真实的生产环境中,在实际生产环境中使用WSGI作为接口,连接web和python代码(也就是django项目);

2、WSGI:Web服务器网关接口,英文为Python Web Server Gateway Interface,缩写为WSGI,是Python应用程序或框架和Web服务器之间的一种接口;

3、WSGI没有官方的实现, 因为WSGI更像一个协议,只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行;

4、django在创建project时,会自动生成wsgi.py文件,里面会指明settings、application对象;

5、uWSGI:前面说到WSGI类似协议,可以通过uWSGI进行实现,uWSGI完全由C语言编写,运行速度快,是一个快速、自我修复、开发人员和系统管理员友好的服务器;

6、Nginx:Nginx的主要作用有两个:负载均衡(多台服务器轮流处理请求,尽可能的使多个服务器均摊请求压力);反向代理(隐藏真实服务器,更加安全);

7、使用Nginx+uWSGI配置服务器时,动态数据请求的实现架构为(静态数据直接有Nginx反馈给用户):  

首先客户端请求服务资源,
nginx作为直接对外的服务接口,接收到客户端发送过来的http请求,会解包、分析,
如果是静态文件请求就根据nginx配置的静态文件目录,返回请求的资源,
如果是动态的请求,nginx就通过配置文件,将请求传递给uWSGI;
uWSGI 将接收到的包进行处理,并转发给wsgi,
wsgi根据请求调用django工程的某个文件或函数,处理完后django将返回值交给wsgi,
wsgi将返回值进行打包,转发给uWSGI,
uWSGI接收后转发给nginx,nginx最终将返回值返回给客户端(如浏览器)。
*注:不同的组件之间传递信息涉及到数据格式和协议的转换

整个配置过程的大方向是:配置uWSGI、配置Nginx、收集静态文件。

 

三、部署前对项目的修改

  主要修改setting.py:

1 DEBUG = False
2 ALLOW_HOSTS=['*',]表示可以访问服务器的ip

  如果项目中有涉及域名的,也需要更改,如有邮箱验证、重置密码链接等功能的。

  其他修改:

1 # 新建secret_key.txt文件(例如:/var/www/secret_key.txt)
2 # 将配置中SECRET_KEYS等号后面的内容复制到secret_key.txt中,保存
3 # 将配置SECRET_KEYS改为:
4 with open('/var/www/secret_key.txt') as f:
5     SECRET_KEY = f.read().strip()

四、uWSGI的安装及配置

  安装:

 pip install uwsgi

  在项目根目录下新建uwsgi.ini文件,(eg:项目目录/var/www/project1)配置如下:

 1 [uwsgi]
 2 socket=127.0.0.1:8000        # 外网ip:端口(使用nginx连接时,使用socket)
 3 # http=外网ip:端口(直接做web服务器,使用http,与socket只能选择一个使用)
 4 chdir=/var/www/project1         # 项目根目录,绝对路径
 5 wsgi-file=project1/wsgi.py  # 项目中wsgi.py文件的目录,相对于项目根目录
 6 processes=4
 7 threads=2
 8 master=True
 9 pidfile=uwsgi.pid
10 daemOnize=uswgi.log

  相关命令:

启动:uwsgi --ini uwsgi.ini

停止:uwsgi --stop uwsgi.pid

重启:uwsgi --reload uwsgi.pid

  可使用 ps ajx|grep uwsgi 查看运行状态,这时候访问网址,发现静态文件是不能加载的,下面继续进行。

五、Nginx的安装及配置

  安装:

 sudo apt-get nginx

  配置,找到安装目录,编辑安装目录下的conf/nginx.conf文件,如果没找到使用以下命令进行查找:

 sudo find / -name nginx.conf  

  修改配置:

 sudo vim /ect/nginx/conf/nginx.conf   # (安装目录换成自己的)

  配置域名及监听端口:

server {
        listen       80 default_server;
        listen       [::]:80 default_server;    // 监听的端口
        server_name  www.xxxx.xxx;   // 你的域名
        root          /var/www/object1/templates;   // 项目静态文件


...
}

  

 

  配置转向的路由:

1 location / {            # 如果没有这一项,在server内自行添加)
2   include uwsgi_params;    # 将所有的参数转到uwsgi下 
3   uwsgi_pass 127.0.0.1:8000;   # 将用户的请求转向的地址
4 }
配置静态文件目录,新建静态文件夹:
 $sudo chmod 777 /var/www/proje1  # 权限更改为所有用户均有读写权限
 $cd /var/www/proje1
 $mkdir static   # 新建静态文件夹,用来收集、存放静态文件

  配置Nginx中静态文件目录

1 location /static {    # 配置静态文件路径
2      alias /var/www/proje1/static/;   # 此目录必须有用户的读写权限
3  }
location /media {    # 配置静态文件路径,此项为新增
alias /var/www/blog/media/; # 此目录必须有用户的读写权限
}

  修改setting配置:

1 STATIC_ROOT='/var/www/project1/static/'
2 STATIC_URL='/static/'

  收集静态文件:

$cd /var/www/project1
$python manage.py collectstatic

相关命令:

查看版本:sudo sbin/nginx -v

启动:sudo sbin/nginx

停止:sudo sbin/nginx -s stop

重启:sudo sbin/nginx -s reload

 

  整个配置完成后重启Nginx,重启uWSGI即可

 


推荐阅读
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 负载均衡_Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分
    nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解 ... [详细]
  • ZABBIX 3.0 配置监控NGINX性能【OK】
    1.在agent端查看配置:nginx-V查看编辑时是否加入状态监控模块:--with-http_stub_status_module--with-http_gzip_stat ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了SpringCloudRibbon部分源码相关的知识,希望对你有一定的参考价值。1:ribbon是提供通过servi ... [详细]
  • LVS-DR直接路由实现负载均衡示例
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
author-avatar
我就是在刷粪_944
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有