如何在 Ubuntu 14.04 上使用 Postgres、Nginx 和 Gunicorn 设置 Django如何在 Ubuntu 14.04 上使用 Postgres、Nginx 和 Gunicorn 设置 Django如何在 Ubuntu 14.04 上使用 Postgres、Nginx 和 Gunicorn 设置 Django如何在 Ubuntu 14.04 上使用 Postgres、Nginx 和 Gunicorn 设置 Django
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Ubuntu 14.04 上使用 Postgres、Nginx 和 Gunicorn 设置 Django

介绍

Django 是一个功能强大的 Web 框架,可以帮助您启动 Python 应用程序或网站。 Django 包括一个简化的开发服务器,用于在本地测试您的代码,但对于任何与生产相关的东西,即使是轻微的生产相关,都需要一个更安全和更强大的 Web 服务器。

在本指南中,我们将演示如何在 Ubuntu 14.04 上安装和配置一些组件以支持和服务 Django 应用程序。我们将设置一个 PostgreSQL 数据库,而不是使用默认的 SQLite 数据库。我们将配置 Gunicorn 应用服务器以与我们的应用程序交互。然后我们将设置 Nginx 以反向代理 Gunicorn,使我们能够访问其安全和性能功能来为我们的应用程序提供服务。

先决条件和目标

为了完成本指南,您应该有一个新的 Ubuntu 14.04 服务器实例,其中非根用户配置了 sudo 权限。您可以通过我们的初始服务器设置指南了解如何设置它。

我们将在虚拟环境中安装 Django。将 Django 安装到特定于项目的环境中将允许单独处理项目及其需求。

一旦我们的数据库和应用程序启动并运行,我们将安装和配置 Gunicorn 应用程序服务器。这将作为我们应用程序的接口,将 HTTP 中的客户端请求转换为我们的应用程序可以处理的 Python 调用。然后,我们将在 Gunicorn 前面设置 Nginx,以利用其高性能连接处理机制和易于实现的安全功能。

让我们开始吧。

从 Ubuntu 存储库安装软件包

要开始这个过程,我们将从 Ubuntu 存储库下载并安装我们需要的所有项目。稍后我们将使用 Python 包管理器 pip 安装其他组件。

首先,更新本地包索引,然后下载并安装包:

sudo apt-get update
sudo apt-get install python-pip python-dev libpq-dev postgresql postgresql-contrib nginx

这将安装 pip、稍后构建 Gunicorn 所需的 Python 开发文件、Postgres 数据库系统和与之交互所需的库,以及 Nginx Web 服务器。

创建 PostgreSQL 数据库和用户

我们将直接进入并为我们的 Django 应用程序创建一个数据库和数据库用户。

要在默认配置下使用 Postgres,最好暂时更改为 postgres 系统用户。现在输入:

sudo su - postgres

当作为 postgres 用户操作时,您可以通过键入以下内容直接登录到 PostgreSQL 交互式会话而无需进一步的身份验证:

psql

您将看到一个 PostgreSQL 提示符,我们可以在其中设置我们的要求。

首先,为您的项目创建一个数据库:

CREATE DATABASE myproject;

每个命令都必须以分号结尾,因此如果您遇到问题,请检查您的命令是否以分号结尾。

接下来,为我们的项目创建一个数据库用户。确保选择安全密码:

CREATE USER myprojectuser WITH PASSWORD 'password';

现在,我们可以授予新用户访问权限来管理我们的新数据库:

GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;

完成后,键入以下命令退出 PostgreSQL 提示符:

\q

现在,通过键入以下命令退出 postgres 用户的 shell 会话以返回到普通用户的 shell 会话:

exit

为您的项目创建一个 Python 虚拟环境

现在我们已经准备好数据库,可以开始准备其余的项目需求了。我们将在虚拟环境中安装我们的 Python 需求,以便于管理。

为此,我们首先需要访问 virtualenv 命令。我们可以使用 pip 安装它:

sudo pip install virtualenv

安装了 virtualenv 后,我们就可以开始构建我们的项目了。创建一个您希望保存项目的目录,然后进入该目录:

mkdir ~/myproject
cd ~/myproject

在项目目录中,通过键入以下命令创建 Python 虚拟环境:

virtualenv myprojectenv

这将在您的 myproject 目录中创建一个名为 myprojectenv 的目录。在内部,它将安装一个本地版本的 Python 和一个本地版本的 pip。我们可以使用它为我们的项目安装和配置一个独立的 Python 环境。

在我们安装项目的 Python 要求之前,我们需要激活虚拟环境。您可以通过键入以下内容来做到这一点:

source myprojectenv/bin/activate

您的提示应更改为表明您现在正在 Python 虚拟环境中操作。它看起来像这样:(myprojectenv)user@host:~/myproject$。

在虚拟环境处于活动状态的情况下,使用 pip 的本地实例安装 Django、Gunicorn 和 psycopg2 PostgreSQL 适配器:

pip install django gunicorn psycopg2

创建和配置一个新的 Django 项目

安装我们的 Python 组件后,我们可以创建实际的 Django 项目文件。

创建 Django 项目

由于我们已经有了一个项目目录,我们将告诉 Django 在这里安装文件。它会创建一个带有实际代码的二级目录,这很正常,并在该目录下放置一个管理脚本。关键是末尾的点告诉 Django 在当前目录中创建文件:

django-admin.py startproject myproject .

调整项目设置

我们应该对我们新创建的项目文件做的第一件事是调整设置。在文本编辑器中打开设置文件:

nano myproject/settings.py

首先找到配置数据库访问的部分。它将以 DATABASES 开头。文件中的配置适用于 SQLite 数据库。我们已经为我们的项目创建了一个 PostgreSQL 数据库,所以我们需要调整设置。

使用您的 PostgreSQL 数据库信息更改设置。我们告诉 Django 使用我们通过 pip 安装的 psycopg2 适配器。我们需要给出数据库名称、数据库用户名、数据库用户名密码,然后指定数据库位于本地计算机上。您可以将 PORT 设置保留为空字符串:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'myproject',
        'USER': 'myprojectuser',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',
    }
}

接下来,向下移动到文件底部并添加一个指示静态文件应放置位置的设置。这是必要的,以便 Nginx 可以处理对这些项目的请求。以下行告诉 Django 将它们放在基础项目目录中名为 static 的目录中:

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

完成后保存并关闭文件。

完成初始项目设置

现在,我们可以使用管理脚本将初始数据库模式迁移到我们的 PostgreSQL 数据库:

cd ~/myproject
./manage.py makemigrations
./manage.py migrate

通过键入以下内容为项目创建管理用户:

./manage.py createsuperuser

您必须选择一个用户名,提供一个电子邮件地址,然后选择并确认一个密码。

我们可以通过键入以下内容将所有静态内容收集到我们配置的目录位置:

./manage.py collectstatic

您将必须确认该操作。然后静态文件将被放置在项目目录中名为 static 的目录中。

最后,您可以使用以下命令启动 Django 开发服务器来测试您的项目:

./manage.py runserver 0.0.0.0:8000

在您的网络浏览器中,访问您服务器的域名或 IP 地址,后跟 :8000:

http://server_domain_or_IP:8000

你应该看到默认的 Django 索引页面:

如果将 /admin 附加到地址栏中 URL 的末尾,系统将提示您输入使用 createsuperuser 命令创建的管理用户名和密码:

通过身份验证后,您可以访问默认的 Django 管理界面:

完成探索后,在终端窗口中按 CTRL-C 关闭开发服务器。

测试 Gunicorn 服务项目的能力

在离开我们的虚拟环境之前,我们要做的最后一件事是测试 Gunicorn 以确保它可以为应用程序提供服务。我们可以通过键入以下内容轻松地做到这一点:

cd ~/myproject
gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application

这将在运行 Django 开发服务器的同一界面上启动 Gunicorn。您可以返回并再次测试该应用程序。请注意,管理界面不会应用任何样式,因为 Gunicorn 不知道对此负责的静态内容。

我们通过指定 Django 的 wsgi.py 文件的相对目录路径将模块传递给 Gunicorn,这是我们应用程序的入口点,使用 Python 的模块语法。在该文件中,定义了一个名为application 的函数,用于与应用程序通信。要了解有关 WSGI 规范的更多信息,请单击此处。

完成测试后,在终端窗口中按 CTRL-C 以停止 Gunicorn。

我们现在已经完成了 Django 应用程序的配置。我们可以通过键入以下内容退出我们的虚拟环境:

deactivate

创建 Gunicorn Upstart 文件

我们已经测试过 Gunicorn 可以与我们的 Django 应用程序交互,但是我们应该实现一种更健壮的方式来启动和停止应用程序服务器。为此,我们将制作一个 Upstart 脚本。

在文本编辑器中使用 sudo 权限为 Gunicorn 创建并打开一个 Upstart 文件:

sudo nano /etc/init/gunicorn.conf

我们将从一个简单的描述字符串开始,说明我们的服务文件的用途。然后我们将继续定义应该自动启动该服务的系统运行级别。运行服务的正常运行级别是 2、3、4 和 5。当系统处于其中任何一个时,我们将运行我们的服务。我们将告诉它在任何其他运行级别时停止(例如当系统重新启动、关闭或处于单用户模式时):

description "Gunicorn application server handling myproject"

start on runlevel [2345]
stop on runlevel [!2345]

接下来,我们将告诉 Upstart 在失败时自动重启服务。我们还想指定运行的用户和组。我们将使用我们的普通用户,因为我们所有的文件都归该用户所有。我们将 Nginx 所属的 www-data 组作为组所有者。我们还需要切换到我们项目的目录,以便 Gunicorn 命令正确执行:

description "Gunicorn application server handling myproject"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
setuid user
setgid www-data
chdir /home/user/myproject

现在,我们只需要给出启动 Gunicorn 进程的命令。我们需要提供 Gunicorn 可执行文件的路径,它存储在我们的虚拟环境中。我们将告诉它使用 Unix 套接字而不是网络端口来与 Nginx 通信,因为这两种服务都将在此服务器上运行。这样更安全也更快。您也可以在此处为 Gunicorn 添加任何其他配置。例如,我们将指定我们需要 3 个工作进程:

description "Gunicorn application server handling myproject"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
setuid user
setgid www-data
chdir /home/user/myproject

exec myprojectenv/bin/gunicorn --workers 3 --bind unix:/home/user/myproject/myproject.sock myproject.wsgi:application

完成后,保存并关闭文件。

键入以下命令启动 Gunicorn 服务:

sudo service gunicorn start

配置 Nginx 代理传递给 Gunicorn

现在 Gunicorn 已设置,我们需要配置 Nginx 以将流量传递给该进程。

首先在 Nginx 的 sites-available 目录中创建并打开一个新的服务器块:

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

在里面,打开一个新的服务器块。我们将首先指定此块应在正常端口 80 上侦听,并且它应响应我们服务器的域名或 IP 地址:

server {
    listen 80;
    server_name server_domain_or_IP;
}

接下来,我们将告诉 Nginx 忽略查找图标的任何问题。我们还将告诉它在哪里可以找到我们在 ~/myproject/static 目录中收集的静态资产。所有这些文件都有一个标准的 URI 前缀“/static”,因此我们可以创建一个位置块来匹配这些请求:

server {
    listen 80;
    server_name server_domain_or_IP;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/user/myproject;
    }
}

最后,我们将创建一个 location/{} 块来匹配所有其他请求。在此位置内,我们将包含 Nginx 安装中包含的标准 proxy_params 文件,然后我们将流量传递到我们的 Gunicorn 进程创建的套接字:

server {
    listen 80;
    server_name server_domain_or_IP;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/user/myproject;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/user/myproject/myproject.sock;
    }
}

完成后保存并关闭文件。现在,我们可以通过将文件链接到 sites-enabled 目录来启用该文件:

sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled

键入以下命令测试 Nginx 配置是否存在语法错误:

sudo nginx -t

如果没有报告错误,请继续并通过键入以下内容重新启动 Nginx:

sudo service nginx restart

您现在应该能够转到服务器的域或 IP 地址来查看您的应用程序。

结论

在本指南中,我们在自己的虚拟环境中设置了一个 Django 项目。我们已经配置 Gunicorn 来翻译客户端请求,以便 Django 可以处理它们。之后,我们将 Nginx 设置为充当反向代理来处理客户端连接并根据客户端请求提供正确的项目。

Django 通过提供许多通用部分使创建项目和应用程序变得简单,让您专注于独特的元素。通过利用本文中描述的通用工具链,您可以轻松地为您从单个服务器创建的应用程序提供服务。

©2015-2025 艾丽卡 support@alaica.com