如何安装和配置 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 作为你的应用程序服务器。如果你有任何问题或进一步的建议,请务必在评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/861519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 整合 JSP

Spring Boot 是一个开源的 Java 框架,用于创建独立、生产级的基于 Spring 框架的应用程序。它简化了基于 Spring 的应用程序的创建和部署过程。JSP(JavaServer Pages)是一种动态网页技术,允许开发者在 HTML 中嵌入 Java 代码。将 …

时间戳转换日期格式 filters实现

filters: { time: function time(value) { const now new Date(value) const y now.getFullYear() const m now.getMonth() 1 const d now.getDate() return ${y}-${m < 10 ? 0${m} : m}-${d < 10 ? 0${d} : d} ${now .toTimeString() .substr(0, 8)} } …

简单的springboot整合activiti5-serviceImpl部分(1)

简单的springboot整合activiti5.22.0-serviceImpl部分(1) 原来的流程serviceImpl部分代码过多&#xff0c;所以此处单独记录一下&#xff0c;此处记录的是serviceImpl第一部分代码 package cn.git.workflow.service.impl;import cn.git.cache.api.BaseCacheApi; import cn.gi…

CSS|03 尺寸样式属性文本与字体属性

尺寸样式属性 height:元素高度height的值&#xff1a;auto 自动length 使用px定义高度% 基于包含它的块级对象的百分比高度 width&#xff1a;元素的宽度width的值与height一样span标签可以设置宽度、高度吗&#xff1f; 答&#xff1a;不可以&#xff0c;因为span标签是一个行…

A-8 项目开源 qt1.0

A-8 2024/6/26 项目开源 由于大家有相关的需求&#xff0c;就创建一个项目来放置相关的代码和项目 欢迎交流&#xff0c;QQ&#xff1a;963385291 介绍 利用opencascade和vulkanscene实现stp模型的查看器打算公布好几个版本的代码放在不同的分支下&#xff0c;用qt实现&am…

科技赋能·创领未来丨智合同和百胜中国就Contract AI Studio项目达成合作

#智合同 #百胜中国 #AIGC #NLP #LLM #Contract AI Studio 近期&#xff0c;国内AIGC和LLM大语言模型发展可谓是如火如荼&#xff0c;其迅速崛起为社会和产业发展起到了非常重要的作用。人们利用AI技术&#xff08;AIGC、LLM大语言模型、NLP等&#xff09;将其赋能到企业生…

华为仓颉编程语言

目录 一、引言 二、仓颉编程语言概述 三、技术特征 四、应用场景 五、社区支持 六、结论与展望 一、引言 随着信息技术的快速发展&#xff0c;编程语言作为软件开发的核心工具&#xff0c;其重要性日益凸显。近年来&#xff0c;华为公司投入大量研发资源&#xff0c;成功…

记录待办事项的便签软件哪个好用?

在快节奏的现代生活中&#xff0c;我们经常需要处理各种各样的待办事项&#xff0c;为了更好地管理时间&#xff0c;许多人选择使用便签软件来记录自己的待办事项。那么&#xff0c;记录待办事项的便签软件哪个好用&#xff1f;市面上众多的便签软件中&#xff0c;哪一个才是最…

强引用、软引用、弱引用、幻象引用有什么区别?

强引用:我们平常典型编码Object obj new Object()中的obj就是强引用。通过关键字new创建的对象所关联的引用就是强引用。 当JVM内存空间不足,JVM宁愿抛出OutOfMemoryError运 行时错误(OOM),使程序异常终止,也不会靠随意回收具有强引用的“存活”对象来解决内存不足的问题。对于…

红队py项目-AWVSsqlmapXray

免责声明:内容仅供参考... 目录 AWVS自动添加任务字典 AWVS环境: SQLmap api 自动扫描 Xray 扫描漏洞发现报告 AWVS自动添加任务字典 AWVS13批量脚本_111111111115-CSDN博客 import requests, json# https://blog.csdn.net/wy_97/article/details/106872773 # 创建任务…

【C++题解】1715. 输出满足条件的整数5

问题&#xff1a;1715. 输出满足条件的整数5 类型&#xff1a;简单循环 题目描述&#xff1a; 有这样一个四位数,其千位和百位之和为偶数&#xff0c;十位和个位之和为奇数&#xff0c;且前两位之和大于后两位之和&#xff0c;且含有因数 8 &#xff0c;请输出满足上述条件的…

如何确保日常安全运维中的数据加密符合等保2.0标准?

等保2.0标准下的数据加密要求 等保2.0标准是中国信息安全等级保护制度的升级版&#xff0c;它对信息系统的安全保护提出了更为严格的要求。在日常安全运维中&#xff0c;确保数据加密符合等保2.0标准&#xff0c;主要涉及以下几个方面&#xff1a; 数据加密技术的选择&#xff…

49-3 内网渗透 - MSI安 装策略提权

靶场环境搭建: 这里还是用我们之前的windows2012虚拟机进行搭建 1)打开一些设置让靶场存在漏洞 打开组策略编辑器(gpedit.msc) 使用运行命令打开: 按下 Win + R 组合键来打开运行对话框。输入 gpedit.msc,然后按下 Enter 键。使用搜索打开: 点击任务栏上的搜索框(W…

【Docker】安装和加速

目录 1.安装 2.了解 docker 信息 3.查询状态 4. 重新启动Docker 1.安装 yum install –y docker 2.了解 docker 信息 cat /etc/redhat-release 3.查询状态 systemctl status docker 4.支持 1.12 的 docker 镜像加速 sudo mkdir -p /etc/docker sudo tee /etc/docke…

Nuxt 项目的默认目录结构(三)

这个目录结构是 Nuxt.js 默认提供的&#xff0c;但开发者可以根据项目需求进行调整。例如&#xff0c;可以在 pages/ 目录下创建更多的页面文件或目录来定义应用程序的路由&#xff0c;或者在 components/ 目录下添加更多的 Vue 组件。此外&#xff0c;Nuxt.js 也支持自定义目录…

临床试验中样本量估算的若干问题

一、什么是脱落率&#xff1f; 脱落&#xff1a;是指临床试验的受试者由于任何原因不能继续按研究方案进行到所要求的最后一次随访。 &#xff08;ICH E9&#xff09; 根据定义&#xff0c;只要没有按照试验要求完成所有访视即为脱落&#xff0c;计算脱落率是基于试验总结页“…

Unity之Hololens2开发MRTK Profile详解

前言 配置 MRTK 的主要方式之一是使用基础包中的配置文件。 场景中的主要 MixedRealityToolkit 对象具有活动配置文件 - 一个 ScriptableObject。 顶级 MRTK 配置配置文件包含主核心系统的每个核心的子配置文件数据,每个主核心系统都旨在配置其相应子系统的行为。 此外,这些…

cmake add_subdirectory 详解

在 CMake 中&#xff0c;add_subdirectory 命令用于向当前项目添加一个子目录&#xff0c;并且使得 CMake 在构建过程中进入该子目录继续处理其中的 CMakeLists.txt 文件。这个命令通常用于管理项目中的多个模块或子项目。 基本语法 add_subdirectory(source_dir [binary_dir]…

RK3568平台(音频篇)RT5651解码芯片Codec驱动分析

一.Audio Codec的必要性 在理想状况下&#xff0c;对于录音过程&#xff0c;只需要将麦克风获取到的analog信号通过ADC转换为digital信号并存储即可&#xff0c;对于播放音过程&#xff0c;只需要将digital信号通过DAC转换为analog并输出到speaker播放即可。 但在实际的过程中…

ES6新特性 面试高频题1

var、let 和 const 的区别 作用域 var是函数作用域&#xff0c;如果在一个代码块&#xff08;如 if 语句或 for 循环&#xff09;中声明&#xff0c;它仍然可以在整个函数内访问。 let const是块级作用域&#xff0c; 这意味着它们只在声明它们的代码块内可见。可变性 var 和 …