在Ubuntu上部署Django应用程序
#python #django #devops #ubuntu

本文最初由Muhammed AliHoneybadger Developer Blog上撰写。

使用像Heroku或Netlify这样的PaaS很酷,但是使用此类工具以灵活性为代价。您可以选择所需的防火墙,所有数据都将存储在PAAS提供商的数据库中。此外,PAAS提供商可能无法为特定工具提供支持。

有一种方法可以具有灵活性,安全性,并增加了与其他工具的兼容性和集成:将应用程序部署到服务器。

在本教程中,我将向您展示如何从Linode获取Linux服务器,使用安全配置进行设置,然后部署Django应用程序。您将为本教程构建潜在客户管理应用程序,但是如果您已经有一个应用程序,则可以跳过此步骤。

您可以在GitHub上找到最终产品。

先决条件

  • 对基本Linux命令的理解。
  • 对Django的基本理解。

构建Django应用程序

我们将主要使用Django管理员,因此潜在客户管理应用程序只有一个模型。对于身份验证,我们将使用内置的Django身份验证系统。

为您的项目创建一个文件夹,并使用cd进入该文件夹。要开始一个项目和Django应用程序,请输入以下命令:

django-admin startproject lead . && python3 manage.py startapp app

现在,在settings.py文件中更新INSTALLED_APPS以包括您刚创建的应用程序。

INSTALLED_APPS = [
     
    'app',
]

Lead模型将具有您在以下代码中看到的名称,电子邮件,Lead_owner和其他一些字段。 Lead_owner文件将具有Django用户身份验证模型的外键。因此,如果我们创建超级用户,我们将能够使用它来创建新的潜在客户并测试应用程序。打开文件app/models.py并粘贴以下代码:

from django.db import models
from django.contrib.auth.models import User

class Lead(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField(max_length=100, unique=True)
    details = models.CharField(max_length=500, blank=False)
    lead_owner = models.ForeignKey(
        User, related_name="lead", on_delete=models.CASCADE, null=True)
    created_at = models.DateTimeField(auto_now_add=True)

接下来,您将需要更新admin.py文件,以便您可以访问刚在管理面板中创建的模型。您可以通过将以下代码粘贴到app/admin.py
来做到这一点

from django.contrib import admin
from .models import Lead

admin.site.register(Lead)

从Linode获取20.04服务器

Linode是Linux Cloud Solutions and Services的最受欢迎的提供商之一。我们将获得本教程所需的Ubuntu 20.04服务器。如果您没有帐户,请继续创建一个帐户,您将获得50美元的信用来开始他们的服务。

身份验证后,单击“ 创建linode ”按钮。

现在,根据需求选择服务器配置,但请确保分发是Ubuntu 20.04。 Vultr有一个有关如何generate SSH keys的教程。然后,单击创建Linode “按钮。

您的服务器将在一分钟内运行,您将获得有关如何访问它的详细信息。

Linux server running

我们将连接到刚刚使用Secure Shell(SSH)创建的服务器。 SSH协议提供了通过网络连接到其他服务器的安全方法。

要访问远程服务器,请运行以下命令。用Linode给出的IP地址替换root@178.79.130.101

ssh root@178.79.130.101

当被问到时,您确定要继续连接(是/否/[指纹])?键。

将DJANGO应用程序部署到远程服务器

部署,在这种情况下,仅表示我们将DJANGO应用程序文件夹复制到远程服务器上的文件夹。我们将使用scp(安全复制)命令来安全地复制包含整个应用程序的文件夹的内容(django-linode-ubuntu)。在本地计算机上,运行下面的命令将应用程序复制到远程服务器。不要忘记将下面命令中的178.79.130.101更改为远程服务器的IP地址。

scp -r django-linode-ubuntu root@178.79.130.101:project

上面的命令首先在远程服务器中创建一个名为project的新目录,然后粘贴django-linode-ubuntu的内容。

在Ubuntu服务器上设置已部署的应用程序

在本节中,您将尽一切努力使您的应用程序在远程服务器上正常工作。然后,您将能够在浏览器上访问该应用程序。您将首先设置用于网络安全的防火墙,使用NGINX将主机反向主机转换为远程服务器的IP地址,然后在服务器上运行您的应用程序。

为网络安全设置防火墙

在服务器上设置防火墙为您的服务器网络提供保护,并设置了向服务器的传入和发出请求的规则。我们将在本教程中使用Uncomplicated Firewall(UFW);它很容易设置,您不需要在服务器上安装任何新的。

ufw默认情况下带有Ubuntu,但其活动已禁用。您可以通过运行以下命令在服务器上启用UFW:

注意:确保您将SSH带入远程服务器。

ufw enable

通过运行下面的命令允许所有传出端口。您可以允许所有发出的请求,因为它不会从外部来源构成威胁。

ufw default allow outgoing

运行下面的命令,以防止外界访问服务器。

ufw default deny incoming

运行上面的命令时,您还会阻止SSH请求。要继续使用SSH访问我们的服务器,必须启用SSH。为此,运行以下命令:

ufw allow ssh

允许http/tcp防火墙上的流量,以便您的浏览器可以访问您的应用。

sudo ufw allow http/tcp

将NGINX设置为反向代理

在本节中,您将需要NGINX进行反向代理,这允许您的服务器收听运行的应用程序,然后将请求重定向到您的远程IP地址。

为此,通过运行以下命令来安装nginx:

apt-get install nginx

删除NGINX安装提供的默认配置文件,以便我们可以创建自己的。

rm /etc/nginx/sites-enabled/default

运行nano /etc/nginx/sites-enabled/project以创建和打开一个新的Nginx配置文件,并粘贴下面的Nginx脚本;然后,保存文件。下面的代码将在http://localhost:8000上将请求发送到您的IP地址,因为它是您的应用程序运行的主机。如果您有域名,则可以替换脚本中的IP地址。

    server{
        listen 80;
        server_name 178.79.130.101;

        location / {
                proxy_pass http://localhost:8000;
                include /etc/nginx/proxy_params;
                proxy_redirect off;
            }
    }

现在,重新启动nginx以设置您刚创建的新配置。

sudo systemctl restart nginx

运行应用程序

接下来,您需要将IP地址添加到settings.py文件中的ALLOWED_HOSTS中,以便Django可以识别它。我们将通过运行下面的命令在服务器中执行此操作,以打开settngs.py文件,编辑ALLOWED_HOSTS,然后保存。

nano project/lead/settings.py

Editing settings.py file

django尚未在服务器上安装,但是您可以通过运行以下命令来安装它:

pip install django==3.2

现在,运行迁移命令,以便您可以创建一个超级用户并开始使用为应用程序创建的模型。确保已将cd插入项目的根源(/project)。

python3 manage.py makemigrations && python3 manage.py migrate

通过运行下面的命令并填写提示:
来创建超级用户

python3 manage.py createsuperuser

现在,您可以使用上面输入的凭据来访问应用程序的管理员(http://178.79.130.101/admin/)。完成此操作后,您可以通过运行此命令来运行应用程序:

python3 manage.py runserver

您现在可以使用服务器的IP地址访问您的应用程序。

Django application running

结论

在本教程中,您构建了潜在客户管理应用程序。然后,您了解了如何从Linode获取Linux服务器,设置安全配置,使用NGINX设置反向代理并在服务器上运行Django应用程序。

您可以通过通过Django deployment checklist并试图找到对每个项目的解决方案来构建本教程中所学到的知识。