使用Nginx+uwsgi在亚马逊云服务器上部署python+django项目完整版(二)——部署配置及相关知识
---恢复内容开始---
一、前提:
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即可