300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Ubuntu下的Nginx-Uwsgi-Django项目部署详细流程

Ubuntu下的Nginx-Uwsgi-Django项目部署详细流程

时间:2020-07-11 12:39:42

相关推荐

Ubuntu下的Nginx-Uwsgi-Django项目部署详细流程

Ubuntu下的Nginx+Uwsgi+Django项目部署详细流程

版本

Ubuntu 18.04Python 3.6Django 3.2Nginx 1.14.0

Python 虚拟环境

virtualenv是虚拟环境安装包,创建虚拟环境可以更好地控制包的版本,保证了项目的稳定性不同虚拟环境之间的运行环境相互独立,互不干扰

1.安装virtualenv

pip3 install -i https://pypi.tuna./simple virtualenv

2.创建虚拟环境

virtualenv myVenv

3.进入虚拟环境

source myVenv/bin/activate

Django项目代码上传

1.通过pycharm进行代码部署

选择:工具-Deployment-Configuration

点击 + 号,选择SFTP连接

选择远程主机

选择本地目录与上传目录

选择文件后进行上传

2.项目试运行

python3 manage.py runserver 0.0.0.0:8000

uWSGI 安装配置

1.Python 安装 uWSGI

在虚拟环境下安装uWSGI

pip3 install -i https://pypi.tuna./simple uwsgi

2.测试uWSGI

从一个简单的 “Hello World” 开始,创建文件 test_uwsgi.py,代码如下:

def application(env, start_response):start_response('200 OK', [('Content-Type','text/html')])return [b"Hello World"]

uWSGI Python 加载器将会搜索的默认函数 application 。

接下来我们启动 uWSGI 来运行一个 HTTP 服务器,将程序部署在HTTP端口 8001 上:

uwsgi --http :8001 --wsgi-file test_uwsgi.py

uWSGI部署Django

在项目根目录下(与manage.py同级)新建一个uwsgi.ini文件,内容如下:

[uwsgi]socket = 0.0.0.0:8001chdir = /data/myobject/ wsgi-file = myobject/wsgi.py processes = 4threads = 2buffer-size = 65536# .sock文件目录需与Nginx文件内的配置相同# socket = /data/myobject/my_sock.sock# chmod-socket = 666# 存储pid进程pidfile=uwsgi.pid# 存储log日志daemonize=uwsgi.log

启动uWSGI,并指定配置文件

uwsgi --ini uwsgi.ini

可以看到,文字正常显示,图片无法显示,这是正常现象以上步骤说明以下三个环节是相通的

web client <-> uWSGI <-> Django

Nginx

1.安装Nginx

sudo apt-get install nginx

2.Nginx命令

/usr/sbin/nginx # 启动Nginx

/usr/sbin/nginx -s stop # 停止Nginx

/usr/sbin/nginx -s reload # 重新启动Nginx

vi /etc/nginx/nginx.conf # 编辑Nginx配置文件

3.测试Nginx

启动Nginx后,浏览器访问ip地址:

看到如上页面,说明Nginx启动成功。

4.配置Nginx

将/etc/nginx/目录下的uwsgi_params复制到项目文件夹,对此文件不做任何改动

cp /etc/nginx/uwsgi_params /data/myobject

在项目根目录创建文件my_nginx.conf,并写入以下内容

upstream django {server 0.0.0.0:8001;# serverunix:///data/myobject/my_sock.sock;}server {listen8000; # 端口号server_name 127.0.0.1; # 服务器 ip 或是域名charsetutf-8; # 字符集# 最大上传限制client_max_body_size 75M;location /static {alias /data/myobject/static; # 静态文件所在文件夹}# 将所有非媒体请求转到Django服务器上location / {uwsgi_passdjango; # 最上方已定义# 将所有参数都转到uwsgi下include /data/myobject/uwsgi_params; # uwsgi_params的路径}}

这个配置文件表示将静态文件和媒体文件由Nginx处理,而其它的请求转入uWSGI处理

与Nginx配置目录建立软链接

sudo ln -s /data/myobject/my_nginx.conf /etc/nginx/sites-enabled/

Nginx & uWSGI & Django

1.测试Nginx

将一张测试图片test.jpg放入static文件夹中,在浏览器中输入<YOUR_SERVER_IP>:8000/static/test.jpg,如果出现403则将图片的权限改为666,成功显示图片。

2.测试uWSGI

回到项目根目录,输入以下命令

uwsgi --socket :8001 --wsgi-file test_uwsgi.py

打开浏览器,地址栏输入<YOUR_SERVBER_IP>,看是否能正常显示’Hello World’。

3.用UNIX socket取代TCP port

修改my_nginx.conf,最终版如下:

upstream django {# server 0.0.0.0:8001;serverunix:///data/myobject/my_sock.sock;}server {listen8000; # 端口号server_name 127.0.0.1; # 服务器 ip 或是域名charsetutf-8; # 字符集# 最大上传限制client_max_body_size 75M;location /static {alias /data/myobject/static; # 静态文件所在文件夹}# 将所有非媒体请求转到Django服务器上location / {uwsgi_passdjango; # 最上方已定义# 将所有参数都转到uwsgi下include /data/myobject/uwsgi_params; # uwsgi_params的路径}}

修改uwsgi.ini,最终版如下:

# socket = 0.0.0.0:8001chdir = /data/myobject/ wsgi-file = myobject/wsgi.py processes = 4threads = 2buffer-size = 65536# .sock文件目录需与Nginx文件内的配置相同socket = /data/myobject/my_sock.sockchmod-socket = 666# 存储pid进程pidfile=uwsgi.pid# 存储log日志daemonize=uwsgi.log

重启Nginx和uWSGI

/usr/sbin/nginx -s reload

uwsgi --stop uwsgi.pid

uwsgi --ini uwsgi.ini

打开浏览器,地址栏输入网址<YOUR_SERVER_IP>:8000,查看图片和文字是否显示正常

此时以下环节已全部打通

web client <-> web server(nginx) <-> the socket <-> uwsgi <-> Django

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。