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

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异&#xff…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​:下载安装 ​​De…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”

案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...

rm视觉学习1-自瞄部分

首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...