当前位置: 首页 > news >正文

如何安装和配置 Django 与 Postgres、Nginx 和 Gunicorn

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

先决条件


本教程假设您已经在Debian 7或类似的Linux发行版(如Ubuntu)上设置了您的droplet(VPS)。如果您还没有这样做,请按照此处的设置droplet的教程进行操作。

为方便起见,我将本教程分为两个部分。第一部分(步骤1-6)仅涵盖安装过程。如果您是一个更高级的Django用户,只需要帮助安装东西,您可以在第6步停下来。如果您已经安装了所有内容,只想知道如何配置一切,那么可以直接跳到第7步。如果您觉得需要从头到尾获得帮助,那么请按顺序进行步骤,您应该不会遇到问题。让我们开始吧!

第一步:更新软件包


在我们做任何事情之前,我们需要确保我们的VPS上安装的所有软件包都是最新的。为了做到这一点,通过SSH连接到您的VPS,并运行以下命令:

sudo apt-get update
sudo apt-get upgrade

第一条命令下载通过apt-get管理的软件包的任何更新。第二条命令安装下载的更新。运行上述命令后,如果有更新可供安装,您可能会被提示是否要安装更新。如果发生这种情况,只需输入“y”,然后在提示时按“enter”。

第二步:安装并创建Virtualenv


安装virtualenv非常简单。只需运行以下命令:

sudo apt-get install python-virtualenv

就是这样!现在让我们创建我们的virtualenv,这样我们就可以在其中安装Django和其他Python软件包:

sudo virtualenv /opt/myenv

注意,在“/opt”目录中创建了一个名为“myenv”的新目录。这就是我们的virtualenv所在的位置。请确保用您想要安装virtualenv的路径替换“/opt/myenv”。我通常将我的env放在/opt中,但这纯粹是个人偏好。有些人在VPS的根目录下创建一个名为“webapps”的目录。选择对您来说最合理的方法。

第三步:安装Django


现在我们需要激活我们的virtualenv,这样当我们安装Python软件包时,它们会安装到我们的virtualenv中。这是如何激活您的virtualenv:

source /opt/myenv/bin/activate

现在您应该看到您的终端提示的开头附加了“(myenv)”。这将帮助您知道您的virtualenv何时处于活动状态,以及如果您在VPS上有多个virtualenv,则哪个virtualenv处于活动状态。

在您的virtualenv处于活动状态时,我们现在可以安装Django。为此,我们将使用pip,这是一个类似于easy_install的Python软件包管理器。以下是您将运行的命令:

pip install django

现在您已经在您的virtualenv中安装了Django!现在让我们启动我们的数据库服务器。

第四步:安装PostgreSQL


大多数Django用户更喜欢使用PostgreSQL作为他们的数据库服务器。它比MySQL更强大,而且Django ORM与PostgreSQL的兼容性比与MySQL、MSSQL或其他数据库更好。

由于我们不需要我们的virtualenv处于活动状态,因此运行以下命令以取消激活:

deactivate

这将始终取消激活当前处于活动状态的任何virtualenv。现在我们需要安装与Django一起使用的PostgreSQL的依赖项,使用以下命令:

sudo apt-get install libpq-dev python-dev

现在您已经完成了这一步,可以这样安装PostgreSQL:

sudo apt-get install postgresql postgresql-contrib

PostgreSQL现在已安装在您的计算机上并准备就绪。

第五步:安装NGINX


NGINX是一个非常快速和轻量级的Web服务器。我们将使用它来为我们的Django应用程序提供静态文件服务。只需运行以下命令即可安装它:

sudo apt-get install nginx

请记住,您仍然需要启动NGINX,但我们将在开始配置我们的VPS时进行介绍。

第六步:安装Gunicorn


Gunicorn是一个非常强大的Python WSGI HTTP服务器。由于它是一个Python软件包,我们需要首先激活我们的virtualenv来安装它。以下是我们如何做到这一点:

source /opt/myenv/bin/activate

确保您在终端提示的开头看到了添加的“myenv”。现在您的virtualenv已经处于活动状态,请运行以下命令:

pip install gunicorn

Gunicorn现在已在您的virtualenv中安装。

如果您只是想安装所有内容,请随时在此处停止。否则,请继续阅读有关如何配置一切以使您的应用程序与网络上的其他人可访问的说明。

第七步:配置 PostgreSQL


让我们从配置 PostgreSQL 开始。使用 PostgreSQL,我们需要创建一个数据库,创建一个用户,并授予我们创建的用户访问我们创建的数据库的权限。首先运行以下命令:

sudo su - postgres

您的终端提示现在应该显示为 “postgres@yourserver”。如果是这种情况,那么运行以下命令来创建您的数据库:

createdb mydb

您的数据库现在已经创建,如果您没有更改命令,则其名称为 “mydb”。您可以根据需要为您的数据库命名。现在使用以下命令创建您的数据库用户:

createuser -P

现在您将会看到一系列6个提示。第一个将要求您输入新用户的名称。使用您想要的任何名称。接下来的两个提示是要求您输入新用户的密码和确认密码。对于最后的3个提示,只需输入 “n”,然后按 “enter”。这只是确保您的新用户只能访问您给予它访问权限的内容,而不会访问其他内容。现在这样激活 PostgreSQL 命令行界面:

psql

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

GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

现在您有了一个 PostgreSQL 数据库和一个用于访问该数据库的用户。现在我们可以安装 Django 并设置它来使用我们的新数据库。

第八步:创建一个 Django 项目


为了进一步进行,我们需要一个 Django 项目进行测试。这将使我们能够查看我们所做的工作是否有效。像这样更改目录到您的虚拟环境目录(在我的情况下是 /opt/myenv):

cd /opt/myenv

现在确保您的虚拟环境处于活动状态。如果您不确定,只需运行以下命令以确保您已激活:

source /opt/myenv/bin/activate

现在您的虚拟环境已经激活,请运行以下命令以开始一个新的 Django 项目:

django-admin.py startproject myproject

您应该会在您的虚拟环境目录中看到一个名为 “myproject” 的新目录。这是我们的新 Django 项目文件所在的地方。

为了使 Django 能够与我们的数据库通信,我们需要安装一个用于 PostgreSQL 的后端。确保您的虚拟环境处于活动状态,并运行以下命令以执行此操作:

pip install psycopg2

更改目录到新的 “myproject” 目录,然后进入它的子目录,也称为 “myproject”,像这样:

cd /opt/myenv/myproject/myproject

使用您选择的编辑器编辑 settings.py 文件:

nano settings.py

找到数据库设置并将其编辑为如下所示:

	DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_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': 'localhost',                      # Empty for localhost through domain sockets or 			'127.0.0.1' for localhost through TCP.'PORT': '',                      # Set to empty string for default.}}

保存并退出文件。现在向上移动一个目录,这样您就在您的主 Django 项目目录中了(/opt/myenv/myproject)。

cd /opt/myenv/myproject

如果您还没有激活您的虚拟环境,请使用以下命令激活:

source /opt/myenv/bin/activate

在您的虚拟环境处于活动状态时,运行以下命令,以便 Django 可以将其初始配置和其他表添加到您的数据库中:

python manage.py syncdb

您应该会看到一些输出,描述安装了哪些表,然后会提示您是否要创建超级用户。这是可选的,取决于您是否将使用 Django 的身份验证系统或 Django 管理界面。

第九步:配置 Gunicorn


Gunicorn 的配置非常特定于您的应用程序的需求。我将简要介绍在这里使用一些不同设置运行 Gunicorn。

首先,让我们仅仅介绍使用默认设置运行 Gunicorn。以下是仅运行默认 Gunicorn 的命令:

gunicorn_django --bind yourdomainorip.com:8001

确保用您的域名或者 VPS 的 IP 地址替换 “yourdomainorip.com”。现在转到您的网络浏览器,访问 yourdomainorip.com:8001,看看您会得到什么。您应该会看到 Django 的欢迎界面。

然而,如果您仔细观察上述命令的输出,您会注意到只有一个 Gunicorn 工作进程启动了。如果您在一个大型 VPS 上启动一个大规模应用程序,该怎么办呢?不用担心!我们只需要稍微修改命令,像这样:

gunicorn_django --workers=3 --bind yourdomainorip.com:8001

现在您会注意到启动了3个工作进程,而不是只有1个工作进程。您可以根据需要更改此数字。

由于我们以 root 用户身份运行了启动 Gunicorn 的命令,Gunicorn 现在正在以 root 用户身份运行。如果您不希望如此,我们可以稍微修改上述命令以适应:

gunicorn_django --workers=3 --user=nobody --bind yourdomainorip.com:8001

如果您想为 Gunicorn 设置更多选项,那么最好设置一个配置文件,以便在运行 Gunicorn 时调用它。这将导致一个更短和更容易阅读/配置的 Gunicorn 命令。

您可以将 gunicorn 的配置文件放在任何您喜欢的地方。为简单起见,我们将其放在我们的虚拟环境目录中。像这样导航到您的虚拟环境目录:

cd /opt/myenv

现在使用您喜欢的编辑器打开您的配置文件(在下面的示例中使用了 nano):

sudo nano gunicorn_config.py

将以下内容添加到文件中:

	command = '/opt/myenv/bin/gunicorn'pythonpath = '/opt/myenv/myproject'bind = '127.0.0.1:8001'workers = 3user = nobody

保存并退出文件。这些选项的作用是设置 gunicorn 二进制文件的路径,将您的项目目录添加到您的 Python 路径中,将域和端口绑定到 Gunicorn,设置 gunicorn 工作进程的数量,并设置 Gunicorn 将以哪个用户身份运行。

为了运行服务器,这次我们需要一个稍长一点的命令。在您的提示符中输入以下命令:

/opt/myenv/bin/gunicorn -c /opt/myenv/gunicorn_config.py myproject.wsgi

您会注意到在上述命令中,我们传递了 “-c” 标志。这告诉 gunicorn 我们有一个要使用的配置文件,我们在 “-c” 标志之后传递了它。最后,我们传递了一个 Python 点符号引用我们的 WSGI 文件,以便 Gunicorn 知道我们的 WSGI 文件在哪里。

以这种方式运行 Gunicorn 需要您在自己的 screen 会话中运行 Gunicorn(如果您熟悉使用 screen),或者在运行 Gunicorn 后立即按 “ctrl + z” 并输入 “bg” 和 “enter” 将进程放入后台,以便它在当前会话关闭后继续运行。这也带来了一个问题,即如果您的 VPS 被重新启动或因某种原因崩溃,您需要手动启动或重新启动 Gunicorn。为了解决这个问题,大多数人使用 supervisord 来管理 Gunicorn 并根据需要启动/重新启动它。安装和配置 supervisord 已在另一篇文章中进行了介绍,可以在这里找到。

最后,这绝不是 Gunicorn 的配置选项的详尽列表。请阅读 gunicorn.org 上找到的 Gunicorn 文档以获取更多信息。

第十步:配置 NGINX


在我们继续之前,让我们首先启动 NGINX,命令如下:

sudo service nginx start

由于我们只是设置 NGINX 来处理静态文件,我们需要首先决定静态文件的存储位置。打开你的 Django 项目的 settings.py 文件,并编辑 STATIC_ROOT 行,使其如下所示:

	STATIC_ROOT = "/opt/myenv/static/"

这个路径可以放在任何你喜欢的地方。但为了整洁起见,我通常将其放在 Django 项目文件夹的外部,但在虚拟环境目录内部。

现在,你已经设置了静态文件的存放位置,让我们配置 NGINX 来处理这些文件。使用以下命令打开一个新的 NGINX 配置文件(你可以将 “nano” 替换为你喜欢的编辑器):

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 来从我们为 Django 项目设置的静态目录中提供在 yourdomainorip.com/static/ 请求的任何内容。在 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 知道要遵守我们的新配置文件来为我们的站点提供服务。

另外,删除默认的 nginx 服务器块:

sudo rm default

我们需要重新启动 NGINX,以便它知道要查找我们的更改。要做到这一点,请运行以下命令:

sudo service nginx restart

就是这样!现在你已经安装了 Django,并且与 PostgreSQL 配合工作,你的应用程序通过 NGINX 提供静态内容,并且 Gunicorn 作为你的应用程序服务器。如果你有任何问题或进一步的建议,请务必在评论区留言。

相关文章:

如何安装和配置 Django 与 Postgres、Nginx 和 Gunicorn

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 先决条件 本教程假设您已经在Debian 7或类似的Linux发行版(如Ubuntu)上设置了您的droplet(VPS&#…...

Graphwalker基于模型的自动化测试

Graphwalker 基于模型的自动化测试 基于模型的自动化测试(Model-Based Testing,MBT)作为一种创新的测试方法,正逐渐受到广泛关注。Graphwalker 作为一款强大的基于模型的自动化测试工具,为我们提供了一种高效、全面的…...

Macbook M1 Fusion安装Debian/Linux

背景 本人主力工作电脑已经迁移到苹果芯片m1的macbook上,曾经尝试使用Fusion安装CentOS、OpenEuler、Ubuntu的一些版本,都没有安装成功。最近开始研究Linux/Unix系统编程,迫切需要通过VMware Fusion安装一台Linux操作系统的虚拟机。 Linux安…...

ERP收费模式是怎样的?SAP ERP是如何收费的?

一、购置SAP ERP系统的费用组成 1、软件费用 传统的ERP系统大多为许可式,即企业在购买ERP服务时付清所有费用,将ERP系统部署于自己的服务器中。根据所购买ERP系统品牌的不同,价格上也有一定的差异。采购ERP系统许可后,后续维护、…...

如何实现免交互

如何实现免交互 一、免交互 交互:我们发出指令控制程序的运行,程序在接收到指令之后按照指令的效果做出对应的反应 免交互:间接的通过第三方的方式把指令传送给程序,不用直接的下达指令 Here Document免交互:这是命…...

浏览器userAgent大全及JS判断当前APP

文章目录 userAgent 检测PC/Mobile 浏览器 userAgent 大全Mobile APP userAgent 大全JS 判断当前 APP userAgent 检测 https://useragent.buyaocha.com/ PC/Mobile 浏览器 userAgent 大全 系统浏览器User-Agent字符串MacChromeMozilla/5.0 (Macintosh; Intel Mac OS X 10_12…...

11.异常(java版)

异常的概念 在日常开发时 代码在程序运行过程中 难免会出现一些其奇奇怪怪的问题 有时通过代码很难去控制 比如:数据格式不对、网络不流畅、内存报警等 在Java中 将程序执行过程中发生的不正常行为称为异常 比如我们之前写代码时经常会遇到的: 1.算术…...

单片机学习记录

一,单片机及开发板介绍 1,基本介绍 单片机,英文Micro Controller Unit,简称MCU内部集成了CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能单片机的任务是信息采集(依靠传感器)、处理(依靠CPU)和硬件设备(…...

flask的基本使用1

【 一 】Flask介绍 python 界的web框架 -Django:大而全,使用率较高 :https://github.com/django/django -FastAPI:新项目选择使用它:https://github.com/tiangolo/fastapi -flask:公司一些小项目使用它&a…...

如何编写时区源文件

0、背景 ① 修改TZ环境变量改变时区不能立即生效。要求设置时区后立即生效,只能用修改/etc/localtime方式。 ② 原文作者 Bill Seymour,想要查看原文,点击官网地址https://www.iana.org/time-zones下载 zic 源码,源码目录中的 tz…...

植物大战僵尸杂交版v2.1最新整合版,附PC端+安卓端+iOS端安装包+修改器+安装教程!

嘿,大家好,我是阿星,今天要跟大家聊聊一款游戏,它不是那种让人眼花缭乱的大制作,也不是那种能让人回味无穷的艺术作品,但它在阿星心里,绝对是神作中的佼佼者。没错,它就是《植物大战…...

【5G射频基本架构】

平台框架 平台演进及搭配 5G NR频谱 NSA/SA/ENDC...

4.任务调度

1.基本知识 2.任务的状态 FreeRTOS中任务共存在4种状态:Running 运行态 当任务处于实际运行状态称之为运行态,即CPU的使用权被这个任务占用(同一时间仅一个任务处于运行态)。Ready 就绪态 处于就绪态的任务是指那些能够运行&…...

Github 2024-06-27 Go开源项目日报Top10

根据Github Trendings的统计,今日(2024-06-27统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Ollama: 本地大型语言模型设置与运行 创建周期:248 天开发语言:Go协议类型:MIT LicenseStar数量:42421 个Fork数量:2724 次关注人…...

【D3.js in Action 3 精译】1.2.2 可缩放矢量图形(一)

译注 由于 1.2.2 小节介绍 SVG 的篇幅过多,为了方便查阅,后续将分多个小节依次进行翻译。为了确保整个 1.2.2 小节的完整性,特意将上一篇包含的 SVG 小节的内容整理出来重新编排。敬请留意。 1.2.2 SVG - 可缩放矢量图形 可伸缩矢量图形&…...

「C系列」C 排序算法

文章目录 一、C 排序算法二、C 排序算法-应用场景1. 冒泡排序(Bubble Sort)2. 选择排序(Selection Sort)3. 插入排序(Insertion Sort)4. 快速排序(Quick Sort)5. 归并排序&#xff0…...

Power BI可视化表格矩阵如何保持样式导出数据?

故事背景: 有朋友留言询问:自己从Power BI可视化矩阵表格中导出数据时,导出的表格样式会发生改变,需要线下再手动调整,重新进行透视组合成自己想要的格式。 有没有什么办法让表格导出来跟可视化一样? Po…...

《UDS协议从入门到精通》系列——图解0x35:请求上传

《UDS协议从入门到精通》系列——图解0x35:请求上传 一、简介二、数据包格式2.1 服务请求格式2.2 服务响应格式2.2.1 肯定响应2.2.2 否定响应 三、通信示例 Tip📌:本文描述中但凡涉及到其他UDS服务的,将陆续提供链接跳转方式以便快…...

Tailwindcss 扩展默认配置来自定义颜色

背景 项目里多个Tab标签都需要设置同样的背景颜色#F1F5FF,在集成tailwindcss之前就是重复该样式,如下图: .body {background-color: #f1f5ff; }集成tailwindcss时,我们希望在class中直接设置该背景色,但是默认的tai…...

C++设计模式---享元模式

1、介绍 原理: 享元模式是一种主要用于减少创建对象的数量,以减少内存占用和提高性能的结构型设计模式。它通过共享多个对象所共有的相同状态,使得在有限的内存容量中能够载入更多的对象。具体来说,享元模式将对象的状态分为内部…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...

push [特殊字符] present

push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...