用nginx 和 gunicorn 部署Django

本文介绍在linux (ubuntu20) 上用nginx 和 gunicorn 部署 Django 的方法。 我的原机上安装了LEMP上的wordpress, 参见 在ubuntu 20 上安装 wordpress lemp ,主页面是worpress 同时也安装了django的应用。当然 wordpress 不是必要的。

本文没有介绍 django 工程的建立,只是介绍其部署,当然在部署前还是需要验证django 应用的。

参考原文是 How To Set Up Django with Postgres, Nginx, and Gunicorn on Ubuntu 20.04  原文介绍得很多,也比较难看懂,但本文只是集中在django 的部署。

软件安装和工程准备

执行下面的安装命令:

sudo apt update
sudo apt install python3-pip python3-dev libpq-dev  nginx curl

libpq-dev 在我主机有点问题,就不安装他了,用下面命令:

sudo apt install python3-pip python3-dev  nginx curl

建立虚拟空间,先安装软件:

sudo -H pip3 install --upgrade pip
sudo -H pip3 install virtualenv

建立工程目录 :

mkdir ~/mysite
cd ~/mysite

建立虚拟空间:

virtualenv mysiteenv

激活虚拟空间:

source mysiteenv/bin/activate

界面是这样的:

leon@ubuntu-s-1vcpu-1gb-tor1-01:~$ source myproject/myprojectenv/bin/activate
(myprojectenv) leon@ubuntu-s-1vcpu-1gb-tor1-01:~$

这样提示行有虚拟环境名。

在虚拟环境里安装 Django gunicorn 。注意这里安装用pip 而不是pip3:

pip install django gunicorn 

建立django 和应用

建立工程,设置等等,这里就不多说。可以参看:python 的web框架 django 的入门教程 1

确保防火墙打开8000端口:

sudo ufw allow 8000

启动应用:

~/mysite/manage.py runserver 0.0.0.0:8000

验证,在浏览器输入你的应用名,比如:http://127.0.0.1:8000/polls/

或者:http://138.197.144.170/covid/

这里应该看到你的应用运行正常。

测试Gunicorn服务的功能

先看看工程mysite 目录下的内容:

leon@ubuntu-s-1vcpu-1gb-tor1-01:~/mysite/mysite$ ls
__init__.py  __pycache__  asgi.py  settings.py  urls.py  views.py  views.py.save  wsgi.py

我们用到 wsgi.py 这个文件

guniorn 的服务验证是这样的:

cd ~/mysite
gunicorn --bind 0.0.0.0:8000 mysite.wsgi
这样用gunicorn 启动django 应用服务。和上面启动django 应用效果一样的。

在浏览器输入你的应用名,比如:http://127.0.0.1:8000/polls/

或者:http://138.197.144.170/covid/

这里应该看到你的应用同样运行正常。

退出虚拟空间用下面命令:

deactivate

为Gunicorn创建systemd套接字和服务文件

sudo nano /etc/systemd/system/gunicorn.socket

在这里,我们将创建一个[Unit]节来描述套接字,一个[Socket]节来定义套接字位置,并创建一个[Install]节以确保在正确的时间创建了套接字:

[Unit]
Description=gunicorn socket

[Socket]
ListenStream=/run/gunicorn.sock

[Install]
WantedBy=sockets.target

接下来,在文本编辑器中创建并使用sudo权限打开Gunicorn的systemd service文件。service文件名应与socket文件名匹配,但扩展名不一样:

sudo nano /etc/systemd/system/gunicorn.service

从[Unit]部分开始,该部分用于指定元数据和相关性。 我们将在此处对我们的服务进行描述,并告诉init系统仅在达到网络目标后才启动此服务。 因为我们的服务依赖于套接字文件中的套接字,所以我们需要包含一个Re

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基本的 NginxGunicornDjango 和 DRF 示例,涵盖了常见的配置和设置: 1. 安装和配置 Nginx 在服务器上安装 Nginx,并创建一个新的站点配置文件。以下是一个示例配置文件,将所有请求转发到 Gunicorn: ``` server { listen 80; server_name yourdomain.com; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` 2. 安装和配置 GunicornDjango 项目的虚拟环境中安装 Gunicorn: ``` pip install gunicorn ``` 创建一个 Gunicorn 配置文件(比如 gunicorn_config.py),指定项目的 WSGI 应用程序和其他选项: ``` import multiprocessing bind = "127.0.0.1:8000" workers = multiprocessing.cpu_count() * 2 + 1 ``` 3. 安装和配置 Django 和 DRF 在 Django 项目的虚拟环境中安装 Django 和 DRF: ``` pip install django djangorestframework ``` 创建一个 Django 项目,并在 settings.py 中添加 DRF 的应用程序: ``` INSTALLED_APPS = [ ... 'rest_framework', ... ] ``` 在 urls.py 中添加 DRF 的路由: ``` from django.urls import path, include urlpatterns = [ ... path('api/', include('rest_framework.urls')), ... ] ``` 创建一个 DRF 视图(比如 views.py),实现一个简单的 API: ``` from rest_framework.views import APIView from rest_framework.response import Response class HelloWorldView(APIView): def get(self, request): return Response("Hello, World!") ``` 在 urls.py 中添加一个路由,将视图映射到 URL: ``` from django.urls import path from .views import HelloWorldView urlpatterns = [ ... path('api/hello/', HelloWorldView.as_view()), ... ] ``` 4. 启动应用程序 使用 Gunicorn 启动 Django 项目: ``` gunicorn myproject.wsgi:application -c gunicorn_config.py ``` 访问 http://yourdomain.com/api/hello/,应该会看到 "Hello, World!" 的响应。如果您遇到任何问题,请参阅 NginxGunicornDjango 和 DRF 的文档和教程,以获取更详细的说明和指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值