一文教会你用nginx+uwsgi部署自己的django项目

目录
  • 第一步:换源
  • 第二步:安装相关包
    • 1.安装python3
    • 2.安装openssh-server和net-tools
  • 第三步:写入测试文件并测试运行
    • 1.写入测试文件
    • 2.测试运行
  • 第四步:引入nginx
    • 1、安装启动nginx
    • 2、写入conf配置文件
    • 3、创建uwsgi_params文件和静态文件夹配置
      • 1)、uwsgi_params
      • 2)、创建静态文件夹
  • 第五步:建立uwsgi和nginx的管道通信
  • 第六步:将项目改为后台运行
  • 总结

第一步:换源

输入命令换掉Ubuntu的下载源

sudo nano /etc/apt/sources.list

将以下全部替换掉原文件,我这里用的是阿里的源,你也可以换其他的。

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ bionic universe
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates universe
deb http://mirrors.aliyun.com/ubuntu/ bionic multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted
deb http://mirrors.aliyun.com/ubuntu/ bionic-security universe
deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic stable
分别输入以下命令,更新源
sudo apt update
sudo apt upgrade

第二步:安装相关包

1.安装python3

# 安装python3
sudo apt install python3
# 查看python安装路径:
which python
# 查看python版本:建议使用3.6之后的版本,因为其他的笔者没试过,笔者用的是3.6.9版本
python

2.安装openssh-server和net-tools

# 安装 openssh-server
sudo apt install openssh-server
#开启:
sudo service ssh start

# 安装net-tools
sudo apt install net-tools
# 查看虚拟机ip:
ifconfig

如下图所示,就是我们的虚拟机IP

安装django的运行环境

#安装django运行环境:
sudo apt install virtualenv
# 创建环境
virtualenv --python=/usr/bin/python3 myblog
# 进入环境:
cd myblog
# 激活环境:
source bin/activate

安装django:pip3 install Django

创建项目:django-admin.py startproject blog

激活并且创建好项目之后就基本和下图所示差不多了

# 进入到blog中安装 uwsgi:
pip3 install uwsgi

第三步:写入测试文件并测试运行

1.写入测试文件

安装好之后我们再写一个测试文件,用来测试我们项目的运行方式,实际项目也是一样的。这里我用的是nano编辑写入方式,你也可以使用vim,方式不限,能创建写入即可写入命令为:

sudo nano test.py

需要写入的文件内容为:

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

2.测试运行

测试命令为:uwsgi --http :8000 --wsgi-file test.py

回车之后,我们在浏览器输入ip加port端口号,我的是192.168.217.133:8000。在浏览器打开发现报了以下错误。

对于这个错误,我们只需要打开项目文件的settings.py文件,在ALLOWED_HOSTS里面添加自己虚拟机的地址,就ok了,然后我们再测试运行,发现正常,网页输出hello world。这里说明uwsgi能够正常运行测试文件。

但是我们并不是为了运行test.py文件,我们是为了运行自己的django项目,这里我们需要对上一个命令进行修改,改为:uwsgi --http :8000 --module blog.wsgi

第四步:引入nginx

1、安装启动nginx

为了避免在输入ip时,不输入端口号也能正常使用,我们引入轻量级的nginx,这里我们用命令行安装并且启动nginx

安装:sudo apt install nginx

启动:sudo service nginx start

2、写入conf配置文件

输入命令:sudo nano /etc/nginx/sites-available/blog_nginx.conf

新建一个conf文件,并且写入以下内容,将里面涉及路径的地方全部改为你自己项目的路径:

upstream django {
    # server unix:///home/python/myblog/blog/blog.sock; # 这里的路径改为你自己项目路径
    server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}
server {
    listen      8000;
    server_name 192.168.217.133; # 将这里的ip地址改为你自己的虚拟机或者服务器地址
    charset     utf-8;
    client_max_body_size 75M;   # adjust to taste
    location /media  {
        alias /home/python/myblog/blog/media;  # your Django project's media files - amend as required
    }
    location /static {
        alias /home/python/myblog/blog/static; # your Django project's static files - amend as required
    }
    location / {
        uwsgi_pass  django;
        include     /home/python/myblog/blog/uwsgi_params; # the uwsgi_params file you installed
    }
}

创建好文件之后,我们需要对该文件创建一个软链接,需要输入以下命令:

sudo ln -s /etc/nginx/sites-available/blog_nginx.conf /etc/nginx/sites-enabled

完成之后我们可以通过ll /etc/nginx/sites-enabled/这个命令来查看一下,是否设置正确,参考下图

3、创建uwsgi_params文件和静态文件夹配置

1)、uwsgi_params

这里我们需要创建一个uwsgi_params文件,创建命令为:sudo nano uwsgi_params

并且将下面内容一字不差的写入到uwsgi_params文件中保存并退出

uwsgi_param  QUERY_STRING       $query_string;
uwsgi_param  REQUEST_METHOD     $request_method;
uwsgi_param  CONTENT_TYPE       $content_type;
uwsgi_param  CONTENT_LENGTH     $content_length;
uwsgi_param  REQUEST_URI        $request_uri;
uwsgi_param  PATH_INFO          $document_uri;
uwsgi_param  DOCUMENT_ROOT      $document_root;
uwsgi_param  SERVER_PROTOCOL    $server_protocol;
uwsgi_param  REQUEST_SCHEME     $scheme;
uwsgi_param  HTTPS              $https if_not_empty;
uwsgi_param  REMOTE_ADDR        $remote_addr;
uwsgi_param  REMOTE_PORT        $remote_port;
uwsgi_param  SERVER_PORT        $server_port;
uwsgi_param  SERVER_NAME        $server_name;

文件保存之后重启一下nginx即可

2)、创建静态文件夹

打开django项目的settings.py文件,添加静态文件的路径,如下图:

然后保存退出并复制映射静态文件,命令为:python manage.py collectstatic

创建media文件夹:mkdir  media

最后输入命令查看静态文件夹是否配置正确:

第五步:建立uwsgi和nginx的管道通信

在uwsgi 中将http通信改为socket通信,修改命令为:uwsgi --socket :8001 --wsgi-file test.py

此时进入阻塞,在浏览器中输入IP地址:192.168.217.133:8000,发现可以打开,显示hello world成功。说明uesgi和nginx通信正常

进入nginx配置文件中:sudo nano /etc/nginx/sites-available/blog_nginx.conf

将文件中下面两行中的第二行注释掉,开启第一行,但是路径一定要正确,改使用管道通信

server unix:///home/python/myblog/blog.sock; # for a file socket

# server 127.0.0.1:8001; # for a web port socket (we'll use this first)

保存退出,重启nginx:sudo service nginx restart

将uwsgi参数套节字改为blog.sock

uwsgi --socket blog.sock --wsgi-file test.py

回到浏览器输入:192.168.217.133:8000得到502:如图

我们查看一下错误日志,发现是因为权限问题,解决办法,在命令行后面加入--chmod=666

uwsgi --socket blog.sock --wsgi-file test.py --chmod=666

运行之后发现没有问题,并且正常显示Hello World界面。

现在我们运行django项目,命令为:uwsgi --socket blog.sock --module blog.wsgi --chmod=666

刷新192.168.217.133:8000得到django的基础页面。

目前可以说明nginx和uwsgi管道通信正常。

第六步:将项目改为后台运行

创建一个uwsgi的配置文件:sudo nano blog_uwsgi.ini

写入一下内容,将其中的路径改为自己的项目路径

# mysite_uwsgi.ini file
[uwsgi]
# Django-related settings
# the base directory (full path)
chdir = /home/python/myblog/blog
# Django's wsgi file
module = blog.wsgi
# the virtualenv (full path)
home = /home/python/myblog
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 10
# the socket (use the full path to be safe
socket = /home/python/myblog/blog/mysite.sock
# ... with appropriate permissions - may be needed
chmod-socket = 664
# clear environment on exit
vacuum = true
# daemonize uwsgi and write messages into given log
daemonize = /home/python/myblog/blog/uwsgi.log

保存退出并且启动配置文件,命令为:uwsgi --ini blog_uwsgi.ini

我们可以查看一下后台进程,是否正常启动,输入:ps aux

最后回到nginx配置文件中,将监听端口改为80,重启nginx即可。在浏览器中输192.168.217.133得到django页面结果,表示项目运行正常。

总结

到此这篇关于用nginx+uwsgi部署自己的django项目的文章就介绍到这了,更多相关nginx+uwsgi部署django项目内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • nginx+uwsgi启动Django项目的详细步骤

    当我们在用django开发的web项目时,开发测试过程中用到的是django自带的测试服务器,由于其安全及稳定等性能方面的局限性,django官方并不建议将测试服务器用在实际生产. nginx+uwsgi+django是我们常用的django部署方式.nginx作为最前端的服务器,他负责接收所有的客户端请求,对于请求的静态文件,由nginx服务器自己完成,因为它具有很好处理静态文件的能力,性能进行过优化,支持高并发量:uWSGI服务器作为支持服务器,是用来服务nginx的,nginx将请求的动态

  • 详解Django+Uwsgi+Nginx的生产环境部署

    使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等,本篇文章总结归纳了一下基于uwsgi+Nginx下django项目生产环境的部署 准备条件: 1.确保有一个能够用runserver正常启动的django项目 2.项目已上传到linux 3.linux上已部署好python环境,且已安装好项目所需的模块 安装uwsgi uwsgi是python的一个模块,安装u

  • Django uwsgi Nginx 的生产环境部署详解

    配置生产环境 #setting.py 文件中 DEBUG = False # 生产环境 # 允许访问的域名,域名前加一个点表示允许访问该域名下的子域名,比如 www.zmrenwu.com. # test.zmrenwu.com 等二级域名同样允许访问.如果不加前面的点则只允许访问 zmrenwu.com ALLOWED_HOSTS = ["127.0.0.1",".blogzjl.site"] 创建Python虚拟环境 安装 virtualenv sudo pip

  • 解决nginx+uwsgi部署Django的所有问题(小结)

    最近,自己暑假写的小项目也算完毕了,想着投放到自己云服务器上,本来以为只要打开端口运行python3 manager runserver 0.0.0.0:80就搞定了,最后才知道这只适用于Django的开发模式,只支持单用户访问,既然如此,那么就得需要web服务器进行部署了.我便使用了nginx nginx? 为什么是nginx? 首先我觉得它小,很轻量级,用着简便,没有apache那么庞杂,并且网上都推荐nginx部署Django. 安装 这里直接略过,说一点Linux用户推荐大家源码安装,因

  • 一文教会你用nginx+uwsgi部署自己的django项目

    目录 第一步:换源 第二步:安装相关包 1.安装python3 2.安装openssh-server和net-tools 第三步:写入测试文件并测试运行 1.写入测试文件 2.测试运行 第四步:引入nginx 1.安装启动nginx 2.写入conf配置文件 3.创建uwsgi_params文件和静态文件夹配置 1).uwsgi_params 2).创建静态文件夹 第五步:建立uwsgi和nginx的管道通信 第六步:将项目改为后台运行 总结 第一步:换源 输入命令换掉Ubuntu的下载源 su

  • centos+nginx+uwsgi部署django项目上线

    目录 Python安装 django相关库的安装 nginx安装&配置(处理静态请求和代理动态请求到uwsgi) uwsgi安装&配置 标题关闭setting.py的DEBUG模式 上传完整django项目文件到服务器sftp ftp lrzsz都可以上传文件到服务器,看自己我django项目叫yunwei,主要app是rabc和web,整个项目放/opt/下如下: [root@test-code opt]# ls django_virt nginx redis redis-6.2.6 y

  • Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程

    具体环境: Ubuntu 14.04 Python 2.7.6 Django 1.7.1 Virtualenv name:test Nginx uwsgi 假设 项目文件夹位于 /data/www/ts 设置保存在 ./conf 复制代码 代码如下: virtualenv name = test domain name = example.com django+uwsgi的部署实在是太蛋疼了..网上已有的教程似乎有新版本的兼容问题.最后跑到uwsgi官网上找的教程终于跑通了.. 不过官网的教程似

  • 使用Nginx+uWsgi实现Python的Django框架站点动静分离

    由于: Django处理静态文件不太友好: 以后有可能需要处理php或者其他资源的请求: 所以考虑结合nginx,使用nignx做它擅长的路由分发功能:同时做动静分离,即Http请求统一由Nginx进行分发,静态文件由Nginx处理,并返回给客户端:而动态的请求,则分发到uWsgi,由uWsgi再分发给Django进行处理.即客户端 <-> nginx <-> socket <-> uwsgi <-> Django 一.环境 系统:centOS 6 pyth

  • 关于nginx+uWsgi配置遇到的问题的解决

    uWSGI 是在像 nginx . lighttpd 以及 cherokee 服务器上的一个部署的选择.更多选择见 FastCGI 和 独立 WSGI 容器 . 你会首先需要一个 uWSGI 服务器来用 uWSGI 协议来使用你的 WSGI 应用. uWSGI 是一个协议,同样也是一个应用服务器,可以提供 uWSGI .FastCGI 和 HTTP 协议. 1.使uwsgi服务器响应代码大于或等于300的响应重定向到nginx以使用error_page指令进行处理 uwsgi_intercept

  • pycharm部署django项目到云服务器的详细流程

    目录 前言 1-下载python3.8压缩包 2-解压缩安装包 3-安装依赖工具 4-安装python3.8 6-修改yum配置文件 7-配置python 8-检验配置结果 9-上传并部署Django项目 前言 大家想一想,如果要在一台电脑上运行python程序需要些什么工具呢? 显而易见,我们需要在电脑上安装python应用,配置python环境等等.那么如果我们需要在云服务器上运行python程序的话要怎么做呢?相信大家已经想到了,就是照葫芦画瓢,在云服务器上做相同的工作就好了. 1-下载p

  • Python开发之Nginx+uWSGI+virtualenv多项目部署教程

    1.新建独立运行环境,命名为env [root@vultr ~]# mkdir projects # 测试的项目总目录 [root@vultr ~]# pip3 install virtualenv [root@vultr ~]# cd projects [root@vultr projects]# virtualenv env --python=python3 --no-site-packages --python:指定Python版本 --no-site-packages:不复制系统已安装P

  • uwsgi+nginx部署Django项目操作示例

    本文实例讲述了uwsgi+nginx部署Django项目操作.分享给大家供大家参考,具体如下: uWSGI概述 uWSGI 是一个全功能的 HTTP 服务器,可以把 HTTP 协议转化成语言支持的网络协议. 安装uwsgi 使用pip安装即可 pip install uwsgi 安装完成后可测试 #vim test.py def application(env, start_response): start_response('200 OK', [('Content-Type','text/ht

  • Centos8下django项目部署 nginx+uwsgi的教程

    1.虚拟环境virtualenv安装 1.安装virtualenv pip3 install virtualenv 2.创建目录,把项目文件传过来 mkdir My  cd My 3.创建独立运行环境-命名 virtualenv --no-site-packages --python=python3  venv1   #创建独立的环境,并且指定解释器是python3 4.进入虚拟环境 source venv1/bin/activate   #此时进入虚拟环境(venv1) 5.在虚拟环境中安装第

随机推荐