如何将本地 Django 应用程序部署到 VPS

2023-11-18

先决条件


本教程假设您已经使用所选操作系统设置了虚拟专用服务器(本教程使用 Debian 7;Ubuntu 也可以)。如果您还没有这样做,您可以按照此操作tutorial。在开始之前,请确保您的云服务器已正确配置为托管 Django 应用程序,并已安装数据库服务器、Web 服务器和 virtualenv。如果您尚未执行此操作,请按照步骤 1 - 6 进行操作为 Django 设置服务器.

第一步:更新包


在做任何事情之前,最好确保通过 apt 管理的所有软件包或您选择的任何软件包管理器都是最新的。您可以通过 SSH 连接到您的 VPS 并运行以下命令来完成此操作:

sudo apt-get update
sudo apt-get upgrade

第一个命令下载通过 apt-get 管理的软件包的所有更新。第二个命令安装已下载的更新。运行上述命令后,如果有更新需要安装,系统可能会提示您是否要安装这些更新。如果发生这种情况,只需键入“y”,然后在出现提示时按“Enter”键。

第二步:设置你的 Virtualenv


如果您完成了先决条件,则应该已经设置完毕,您可以跳过此步骤。

现在我们需要设置 virtualenv 来存放我们的项目文件和 Python 包。如果您不使用 virtualenv,则只需创建 Django 项目所在的目录并转到第三步。

要创建虚拟环境,请运行以下命令。请记住将路径替换为您的项目项目在虚拟专用服务器上所需的路径:

virtualenv /opt/myproject

现在您已经设置了 virtualenv,您可以激活 virtualenv 并使用 pip 安装 Django 和您可能需要的任何其他 Python 包。下面是如何激活 virtualenv 并使用 pip 安装 Django 的示例:

source /opt/myproject/bin/activate
pip install django

现在我们准备为我们的项目创建一个数据库!

第三步:创建数据库


本教程假设您使用 PostgreSQL 作为数据库服务器。如果没有,您将需要查看有关如何为您选择的数据库服务器创建数据库的文档。

要使用 PostgreSQL 创建数据库,请首先运行以下命令:

sudo su - postgres

您的终端提示现在应该显示“postgres@你的服务器”。如果是这样,请运行此命令来创建数据库,确保将“mydb”替换为您所需的数据库名称:

createdb mydb

现在使用以下命令创建数据库用户:

createuser -P

现在您将看到一系列六个提示。第一个将询问您新用户的名称(使用您想要的任何名称)。接下来的两个提示是输入密码和确认新用户的密码。对于最后三个提示,只需输入“n”并按“enter”即可。这可确保您的新用户只能访问您授予其访问权限的内容,而不能访问其他内容。现在激活 PostgreSQL 命令行界面,如下所示:

psql

最后,使用以下命令授予该新用户对新数据库的访问权限:

GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

现在您已设置了一个数据库和访问该数据库的用户。接下来,我们可以配置我们的网络服务器来提供静态文件!

第四步:配置您的 VPS

我们需要为我们的站点创建一个新的配置文件。本教程假设您使用 NGINX 作为云服务器。如果不是这种情况,您将需要检查所选 Web 服务器的文档才能完成此步骤。

对于 NGINX,运行以下命令来创建和编辑站点的 Web 服务器配置文件,确保将命令末尾的“myproject”替换为您的项目名称:

sudo nano /etc/nginx/sites-available/myproject

现在,在打开的编辑器中输入以下代码行:

server {
    server_name yourdomainorip.com;

    access_log off;

    location /static/ {
        alias /opt/myenv/static/;
    }

    location / {
        proxy_pass http://127.0.0.1:8001;
        proxy_set_header X-Forwarded-Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
    }
}

保存并退出文件。上面的配置已设置 NGINX 来提供任何请求yourdomainorip.com/static/来自我们为 Django 项目设置的静态目录。如有任何要求,请访问yourdomainorip.com将代理到端口 8001 上的本地主机,我们将在该端口告诉 Gunicorn(或您选择的应用程序服务器)运行。其他行确保请求的主机名和 IP 地址传递到 Gunicorn。如果没有这个,每个请求的IP地址都会变成127.0.0.1,主机名就是你的VPS主机名。

现在我们需要在 /etc/nginx/sites-enabled 目录中设置一个指向该配置文件的符号链接。这就是 NGINX 知道该站点处于活动状态的方式。将目录更改为 /etc/nginx/sites-enabled ,如下所示:

cd /etc/nginx/sites-enabled

到达那里后,运行以下命令:

sudo ln -s ../sites-available/myproject

现在使用以下命令重新启动 NGINX,您应该已完成设置:

sudo service nginx restart

重新启动后您可能会看到以下错误:

server_names_hash, you should increase server_names_hash_bucket_size: 32

您可以通过编辑“/etc/nginx/nginx.conf”来解决此问题

打开文件并取消注释以下行:

server_names_hash_bucket_size 64;

现在让我们将项目文件推送到我们的 Droplet 中!

第五步:将本地 Django 项目移至 Droplet


我们这里有几个选项:FTP、SFTP、SCP、Git、SVN 等。我们将介绍如何使用 Git 将本地项目文件传输到虚拟专用服务器。

找到您设置 virtualenv 或您希望项目所在的目录。使用以下命令更改到此目录:

cd /opt/myproject

到达那里后,创建一个新目录来存放您的项目文件。您可以使用以下命令来执行此操作:

mkdir myproject

拥有两个同名的目录似乎是多余的;但是,它使您的 virtualenv 名称和项目名称相同。

现在使用以下命令更改到新目录:

cd myproject

如果您的项目已经在 Git 存储库中,只需确保您的代码全部提交并推送即可。您可以通过在本地计算机上的终端(适用于 Mac)或命令提示符(适用于 PC)中运行以下命令来检查是否存在这种情况:

git status

如果您在输出中没有看到任何文件,那么您应该可以开始了。现在通过 SSH 连接到 Droplet 并使用以下命令安装 Git:

sudo apt-get install git

请务必通过输入“y”并按“Enter”键对任何提示回答“是”。安装 Git 后,使用以下命令将项目文件拉入项目目录:

git clone https://webaddressforyourrepo.com/path/to/repo .

如果您使用 Github 或 Bitbucket 进行 Git 托管,则有一个clone您可以使用按钮来获取此命令。请务必添加“.”在最后。如果我们不这样做,Git 将在您的项目目录中创建一个具有存储库名称的目录,这是您不希望看到的。

如果您不使用 Git,则使用 FTP 或其他传输协议将文件传输到在上述步骤中创建的项目目录。

现在剩下的就是设置您的应用程序服务器了!

第六步:安装和配置应用服务器


如果您完成了先决条件,则应该已经设置完毕,您可以跳过此步骤。

现在我们需要安装应用程序服务器并确保它在端口 8001 上侦听对 Django 应用程序的请求。在本例中我们将使用 Gunicorn。要安装 Gunicorn,首先激活您的 virtualenv:

source /opt/myproject/bin/activate

当您的 virtualenv 处于活动状态后,运行以下命令来安装 Gunicorn:

pip install gunicorn

现在 Gunicorn 已安装,请将您的域或 IP 请求绑定到端口 8001:

gunicorn_django --bind yourdomainorip.com:8001

现在您可以点击“ctrl + z”,然后输入“bg”将进程置于后台(如果您愿意)。 Gunicorn 的更高级配置和设置可以在步骤 9 中找到本教程.

现在您已准备好进行最后一步!

第七步:配置您的应用程序


最后一步是配置您的应用程序以进行生产。我们需要做的所有改变都在你的“设置.py” Django 项目的文件。使用以下命令打开该文件:

sudo nano /opt/myproject/myproject/settings.py

设置文件的路径可能会有所不同,具体取决于项目的设置方式。相应修改上面命令中的路径。

打开设置文件后,将 DEBUG 设置更改为False:

DEBUG = False

这将使错误以 404 或 500 错误页面的形式向用户显示,而不是向他们提供带有调试信息的堆栈跟踪。

现在编辑您的数据库设置,如下所示,使用您的数据库名称、用户和密码,而不是如下所示:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'mydb',                      # Or path to database file if using sqlite3.
        # The following settings are not used with sqlite3:
        'USER': 'myuser',
        'PASSWORD': 'password',
        'HOST': '',                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        'PORT': '',                      # Set to empty string for default.
    }
}

现在编辑您的静态文件设置:

STATIC_ROOT = '/opt/myproject/static/'

STATIC_URL = '/static/'

保存并退出文件。现在我们需要做的就是收集静态文件。切换到您的“管理.py” 脚本并运行以下命令:

python manage.py collectstatic

该命令会将所有静态文件收集到我们在中设置的目录中设置.py上面的文件。

就是这样!您现在已将应用程序部署到生产环境并准备就绪。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将本地 Django 应用程序部署到 VPS 的相关文章

  • Django 查询:“datetime + delta”作为表达式

    好吧 我的问题如下 假设我有下一个模型 这是一个简单的情况 class Period models Model name CharField field specs here start date DateTimeField field s
  • 无法在 Google Cloud Run 上部署 Ubuntu 20.04 Docker 容器

    我正在尝试通过 Google Cloud Run 部署一个基于 Ubuntu 20 04 的简单的基于 Python 的 Docker 容器 我已经成功构建了映像 但是当我尝试部署 Cloud Run 服务时 出现以下错误 省略了项目详细信
  • Django 手动检查 CSRF 令牌

    我正在实现一个可与 API 密钥或 CSRF 令牌配合使用的 API 目标是使其可由 Web 应用程序 受 CSRF 保护 或第三方应用程序 受 API 密钥保护 使用 基本上 对于每个请求 全部通过 POST 我都会检查是否有 API 密
  • 操作错误:尝试在 ubuntu 服务器中写入只读数据库

    我正在使用 FlaskApp 运行mod wsgi and apache2在 Ubuntu 服务器上 我尝试运行烧瓶应用程序localhost成功 然后部署到ubuntu服务器上 但是当我尝试更新数据库时 出现错误 Failed to up
  • Django 子应用程序和模块结构

    我正在开发一个 Django 应用程序 这是一个大型系统 需要多个子应用程序来保持整洁 因此 我有一个顶级目录 它是 Django 应用程序 因为它有一个空的models py文件 和多个子目录 它们本身也是应用程序 我以这种方式布局应用程
  • 如何正确自定义 Django LoginView

    我试图弄清楚如何根据用户当天是否第一次登录来自定义 django LoginView 我当前已设置 LoginView 使其默认为 settings py 文件中的 LOGIN REDIRECT URL book author 这工作完美无
  • 模型元中的“可交换”是什么?

    看着艰难的 django auth 模型代码 我遇到了这段代码 class User AbstractUser class Meta AbstractUser Meta swappable AUTH USER MODEL 很明显 这和新的有
  • 第一次从按钮提交时,只有单击两次后才会打开模态框

    我有一个模式弹出窗口可以通过单击按钮打开 不幸的是 当第一次在浏览器中提交时 我只能在单击两次后才能看到弹出窗口 但是 一旦弹出窗口打开并关闭 我就可以在下一次尝试中单击一次来打开模式 如果我刷新浏览器也会发生同样的情况 这看起来很奇怪 任
  • Django 模型字段默认基于另一个模型字段

    我使用 Django Admin 构建一个管理站点 有两张表 一张是ModelA其中有数据 另一个是ModelB里面什么也没有 如果一个模型字段b b in ModelB为None 可以显示在网页上 值为ModelA的场a b 我不知道该怎
  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • React 错误:目标容器不是 DOM 元素

    我刚刚开始使用 React 所以这可能是一个非常简单的错误 但我们开始吧 我的html代码非常简单 load staticfiles
  • 更新到 1.11:TypeError build_attrs() 最多接受 2 个参数(给定 3 个)

    我从 1 10 7 更新到 1 11 0 在查看表单时收到以下错误 我根本无法理解我的形式有什么问题 其他形式的工作方式相同 我怀疑这可能是与任何一个的相互作用select2 https github com applegrew djang
  • 错误请求 400:nginx/gunicorn

    我已经遵循了这个教程 http blog wercker com 2013 11 25 django 16 part3 html http blog wercker com 2013 11 25 django 16 part3 html我现
  • 如何将变量传递给 django 中的所有模板? [复制]

    这个问题在这里已经有答案了 我正在尝试将变量 浏览器变量 传递给我的应用程序中的所有模板 关于如何让它发挥作用有什么建议吗 View def browser request primary cat list Categories objec
  • Django + nginx + uwsgi 无法登录

    我有非常简单的登录逻辑 类似于官方 Django 解决方案 class Login FormView template name login html form class AuthenticationForm def get self a
  • Rails/Nginx 中的超时——最佳实践

    我正在开发一个应该在 Nginx 服务器上运行的 Rails 应用程序 根据输入 应用程序可能需要很长时间来处理请求 或者在出现错误时挂起 因此我想防止进程永远运行 除了确保客户端收到超时信号的 Nginx 配置之外 我想我可能仍然需要确保
  • django orm:select_lated,用假外键欺骗反向外键除了模型之外,会出现什么问题?

    我正在尝试学习如何使用 Django 的 ORM 进行更高级的查询 而不是使用原始 sql select related进行连接以减少数据库命中 原则上它可以进行我手动执行的连接 但有一个问题 它不使用反向外键关系来制作sql 对于我的架构
  • 在 Linux 上更快地分叉大型进程?

    在现代 Linux 上达到与 Linux 相同效果的最快 最好的方法是什么 fork execve combo 从一个大的过程 我的问题是进程分叉大约 500MByte 大 并且一个简单的基准测试只能从进程中实现约 50 个分叉 秒 比较最
  • 跨应用程序使用 Django 模型?

    因此 在我的 Django 项目中 我有几个不同的应用程序 每个应用程序都有自己的模型 视图 模板等 让这些应用程序进行通信的好方法 Django 方式 是什么 一个具体的例子是一个会议应用程序 它有一个会议模型 我有一个家庭应用程序 我想
  • 如何使用基于类的视图处理表单(通过 get 或 post)?

    我正在尝试学习基于类的视图 因为详细信息或列表视图并不那么复杂 我有一个搜索表单 我只想看看是否发送查询来显示结果 这是函数代码 不是我的 来自 django 书籍 def search page request form SearchFo

随机推荐

  • 如何在树莓派上安装和使用 Docker

    Docker 是一个容器化平台 允许您快速构建 测试和部署应用程序作为可移植 自给自足的容器 几乎可以在任何地方运行 在本教程中 我们将解释如何在 Raspberry Pi 上安装 Docker 并探索基本的 Docker 概念和命令 先决
  • 如何在 Ubuntu 18.04 上使用 Apache 安装和配置 Nextcloud

    下一云是一个开源 自托管的文件共享和协作平台 类似于 Dropbox 它捆绑了媒体播放器 日历和联系人管理 Nextcloud 可通过应用程序进行扩展 并拥有适用于所有主要平台的桌面和移动客户端 在本教程中 我们将向您展示如何在 Ubunt
  • 了解 /etc/passwd 文件

    Linux 系统上可以使用多种不同的身份验证方案 最常用和标准的方案是针对 etc passwd and etc 影子 files etc passwd是一个基于纯文本的数据库 包含系统上所有用户帐户的信息 这是owned第 644 章权限
  • 如何在 Debian 9 上使用 UFW 设置防火墙

    Debian 包含多个软件包 这些软件包提供了用于管理防火墙的工具 其中 iptables 作为基本系统的一部分安装 对于初学者来说 学习如何使用 iptables 工具正确配置和管理防火墙可能很复杂 但 UFW 简化了它 UFW Unco
  • 如何在 Ubuntu 14.04 服务器上安装 ISPConfig3

    介绍 尽管命令行是一个功能强大的工具 可以让您在许多情况下快速轻松地工作 但在某些情况下 可视化界面会很有帮助 如果您要在一台计算机上配置许多不同的服务 或者为客户端管理系统的某些部分 则可以使用诸如ISP配置可以使这个任务变得更加简单 I
  • 如何在 CentOS 7 上安装 Git

    介绍 版本控制已成为现代软件开发中不可或缺的工具 版本控制系统允许您在源代码级别跟踪您的软件 您可以跟踪更改 恢复到之前的阶段以及从基本代码分支以创建文件和目录的替代版本 最流行的版本控制系统之一是git 许多项目在 Git 存储库中维护其
  • 什么是 Kubernetes?

    介绍 Kubernetes 是一个功能强大的开源系统 最初由 Google 开发 并得到云原生计算基金会 CNCF 的支持 用于在集群环境中管理容器化应用程序 它旨在提供更好的方法来管理跨不同基础设施的相关分布式组件和服务 要了解有关 Ku
  • 使用 Debian 9 进行初始服务器设置

    介绍 当您首次创建新的 Debian 9 服务器时 您应该尽早执行一些配置步骤作为基本设置的一部分 这将提高服务器的安全性和可用性 并为您后续的操作奠定坚实的基础 第一步 以 root 身份登录 要登录您的服务器 您需要知道您的服务器的公共
  • 如何使用 DigitalOcean 云服务器创建虚荣或品牌名称服务器

    介绍 托管提供商或经销商特别感兴趣 拥有品牌或 虚荣域名服务器为客户提供了更专业的外观 它 无需要求您的客户将其域名指向另一个域名 公司的域名服务器 本教程将概述两种创建方法 自定义域名服务器 i 虚荣和 ii 品牌 Types 虚荣名称服
  • 如何在 Ubuntu 18.04 上安装 MySQL

    本教程的先前版本由以下人员编写榛子维尔多 介绍 MySQL是一个开源数据库管理系统 通常作为流行的一部分安装LAMP Linux Apache MySQL PHP Python Perl 堆栈 它使用关系数据库和 SQL 结构化查询语言 来
  • 如何使用 passwd 和 adduser 在 Linux VPS 上管理密码

    介绍 密码和身份验证是每个用户在 Linux 环境中工作时必须处理的概念 这些主题涵盖许多不同的配置文件和工具 在本指南中 我们将探索一些基本文件 例如 etc passwd 和 etc shadow 以及用于配置身份验证的工具 例如名称恰
  • 如何在 VPS 上安装和使用 Logwatch 日志分析器和报告器

    介绍 应用程序创建所谓的 日志文件 来跟踪在任何给定时间发生的活动 这些文件远非简单的文本输出 浏览起来可能非常复杂 特别是当所管理的服务器很繁忙时 当需要参考日志文件时 例如 在发生故障 数据丢失等情况下 利用所有可用的帮助变得至关重要
  • 如何修改 DOM 中的属性、类和样式

    介绍 在本教程之前的教程中series 如何更改 DOM 我们介绍了如何使用内置方法从文档对象模型 DOM 中创建 插入 替换和删除元素 通过提高操作 DOM 的熟练程度 您可以更好地利用 JavaScript 的交互功能并修改 Web 元
  • 如何在 Ubuntu 22.04 上的 PostgreSQL 中静态加密数据库

    介绍 PostgreSQL是一个数据库管理系统 自 1996 年以来一直存在 就像其他数据库系统一样 SQL MySQL Oracle等 PostgreSQL的主要目的是为用户提供一种创建数据库用于存储和数据检索的方式 其突出的功能之一包括
  • 如何在 Ubuntu 12.04 上使用 Iptables 设置防火墙

    Status 已弃用 本文介绍不再受支持的 Ubuntu 版本 如果您当前运行的服务器运行 Ubuntu 12 04 我们强烈建议您升级或迁移到受支持的 Ubuntu 版本 升级到Ubuntu 14 04 从 Ubuntu 14 04 升级
  • Java 中的死锁示例

    java中的死锁是两个或多个线程永远被阻塞的一种编程情况 Java 死锁情况发生在至少两个线程和两个或更多资源的情况下 这里我写了一个简单的程序 该程序会导致java死锁场景 然后我们将看到如何分析它 Java 中的死锁 Let s hav
  • 深入探讨 Iptables 和 Netfilter 架构

    介绍 防火墙是一个重要的工具 可以配置它来保护您的服务器和基础设施 在Linux生态系统中 iptables是一种广泛使用的防火墙工具 与内核一起工作netfilter数据包过滤框架 由于复杂的语法和涉及的相互关联部分的数量 创建可靠的防火
  • 如何使用 Dovecot 设置 Postfix 电子邮件服务器:动态 Maildirs 和 LMTP

    Preface 本教程基于如何使用 Dovecot 设置 Postfix 电子邮件服务器并从第一部分结束的地方开始 请先阅读该教程 在本文中 我们将使用 dovecot 的 LMTP 服务器作为传递机制将邮箱与系统帐户分离 并使用 post
  • Java ArrayList 的数组、ArrayList 的 Array

    今天我们将学习如何创建Java数组ArrayList 我们还将学习如何创建数组元素的 ArrayList Java ArrayList 的数组 Creating array of list in java is not complex Be
  • 如何将本地 Django 应用程序部署到 VPS

    先决条件 本教程假设您已经使用所选操作系统设置了虚拟专用服务器 本教程使用 Debian 7 Ubuntu 也可以 如果您还没有这样做 您可以按照此操作tutorial 在开始之前 请确保您的云服务器已正确配置为托管 Django 应用程序