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

版本

  • Ubuntu 18.04
  • Python 3.6
  • Django 3.2
  • Nginx 1.14.0

Python 虚拟环境

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

1.安装virtualenv

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/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.tsinghua.edu.cn/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:8001
chdir = /data/myobject/
wsgi-file = myobject/wsgi.py
processes = 4
threads = 2
buffer-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;# server      unix:///data/myobject/my_sock.sock;
}server {listen      8000;  # 端口号server_name 127.0.0.1;  # 服务器 ip 或是域名charset     utf-8;  # 字符集# 最大上传限制client_max_body_size 75M;location /static {alias /data/myobject/static;  # 静态文件所在文件夹}# 将所有非媒体请求转到Django服务器上location / {uwsgi_pass      django;  # 最上方已定义# 将所有参数都转到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;server      unix:///data/myobject/my_sock.sock;
}server {listen      8000;  # 端口号server_name 127.0.0.1;  # 服务器 ip 或是域名charset     utf-8;  # 字符集# 最大上传限制client_max_body_size 75M;location /static {alias /data/myobject/static;  # 静态文件所在文件夹}# 将所有非媒体请求转到Django服务器上location / {uwsgi_pass      django;  # 最上方已定义# 将所有参数都转到uwsgi下include         /data/myobject/uwsgi_params; # uwsgi_params的路径}
}

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

# socket = 0.0.0.0:8001
chdir = /data/myobject/
wsgi-file = myobject/wsgi.py
processes = 4
threads = 2
buffer-size = 65536
# .sock文件目录需与Nginx文件内的配置相同
socket = /data/myobject/my_sock.sock
chmod-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

Ubuntu下的Nginx-Uwsgi-Django项目部署详细流程相关推荐

  1. 阿里云运行python项目_荐个人博客开发-06:Nginx + uWSGI + Django项目部署到阿里云服务器运行...

    版本:Python-3.8.1 + Django-2.2 + 阿里云服务器 Ubuntu-16.04 在正式部署前,需要确认几点: 服务器上已经安装相应的 Python MySQL Nginx uWS ...

  2. Docker部署Angular+Nginx+uwsgi+Django项目

    Docker部署Angular+Nginx+uwsgi+Django项目 0.前言 在开发部署时,容易遇到服务器环境不一致,多台服务重复部署操作过于繁杂的情况.这时可以采用Docker来提供一套统一的 ...

  3. Nginx+uWSGI+Django方法部署Django程序

    在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.nginx把所有静态请求自己来处理(这是NGINX的强项).然后,NGINX将所有非静态请求通过u ...

  4. nginx+uwsgi+django环境部署部署

    首科常昊技术部 Django框架部署文档: 硬件环境:阿里云ecs服务器8核心.16GB.10Mbps 环境结构:nginx+uwsgi+django 所需软件:python-3.6.1.pip3.6 ...

  5. nginx + uwsgi + Django 应用部署

    今天来看下基于Django开发的应用如何在Centos6环境部署 系统环境:Centos6.5 x64 软件版本:Django 1.9.5 .uwsgi-2.0.13.1 nginx 安装配置(略)请 ...

  6. 【NGINX】nginx+uwsgi+django+python部署总结

    (记录一下) 环境如下: 操作系统: Ubuntu 10.04 nginx: 1.0.12 uwsgi:  1.0.4 python: 2.6.5 django: 1.2.7 一.安装uwsgi 到h ...

  7. 阿里云服务器从购买到项目部署详细流程

    1.购买服务器流程 官网 注册阿里云账号登录后点击控制台 点击侧边栏展开 选择云服务器ECS 由于我已经购买完毕,所以这里会出现一个服务器.=我们可以点击创建实例来购买 操作系统尽量选择 CentOS ...

  8. Ubuntu Nginx uwsgi django 初试

    /*************************************************************************************** Ubuntu Ngin ...

  9. nginx+uWSGI + django部署项目

    项目部署 nginx+uWSGI + django 1. WSGI WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器(返回静态资源的就是web服务器,Nginx)如何与Web应用程序( ...

最新文章

  1. KS103超声波测距模块
  2. Netty消息接收类故障案例分析
  3. Sayjoy┊多媒体在线编辑创作工具
  4. MariaDB主从复制、主主复制
  5. 新手学逆向,调试abexcm1过程
  6. Lotus,协作领域的常青树
  7. 使用tomcat时,Add and Remove出现异常
  8. 计算机组装与维护时dm是指,《计算机组装与维护》试题答案
  9. 今天辞去了联盟的版主职务
  10. atitit.软件设计模式大的总结attialx总结
  11. HeadFirstJava学习心得——网络编程
  12. 网络编程——TCP编程及UDP编程
  13. RabbitMQ实现即时通讯
  14. demoのpython学习笔记【2】——文件操作、面向对象的函数、HTML基础
  15. Learning Convolutional Neural Networks for Graphs
  16. 关于自动驾驶中毫米波雷达传感器的一些知识(涉及多传感器融合)
  17. 锐龙R3 4300U和i5-9300H 哪个好
  18. ubuntu18.04 分辨率突然变小,添加1920x1080分辨率,转完变卡默认成集显llvmpipe改独显方法
  19. Java工程师修炼之道! | 送10本书籍
  20. 最简单方法!!用python生成动态条形图(解决报错问题!)

热门文章

  1. 第53届全球生态旅游大使参赛佳丽备战世界总决赛
  2. 统计软件与数据分析--Lesson1
  3. python游戏模块 - 25 pygame常规操作
  4. Ansible第一章:ansible的安装及部署
  5. ZGC这是要上天吗?
  6. 多智能体系统协同一致性问题(一)
  7. OpenMLDB 官方网站正式上线
  8. TurboVNC启用一次性密码TOTP
  9. 前端技术之Ajax(一)
  10. 贝叶斯推理:概率分布