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

前提条件


本教程假定您已经在 Debian 7 或类似的 Linux 发行版(如 Ubuntu)上设置了 VPS(Dropplet)。

为了方便,我已经把这个教程分成两个部分。第一部分(步骤1 - 6)只涵盖安装。如果你是一个更先进的Django用户,只需要帮助安装东西,你可以停止在步骤6中。如果你已经安装了一切,只想知道如何配置一切,然后跳到步骤7中。

步骤一:更新包


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

《sudo apt-get update》

《Sudo apt-get upgrade》

第一个命令下载了通过 apt-get 管理的包的任何更新。第二个命令安装了已下载的更新。在运行上述命令后,如果有更新要安装,您可能会被提示是否想要安装更新。

步骤二:安装和创建 Virtualenv


安装 virtualenv 非常简单. 只需运行下面的命令:

sudo apt-get install python-virtualenv

That's all there is to it! 现在让我们创建我们的virtualenv,以便我们可以在里面安装Django和其他Python包:

「Sudo VirtualV /opt / myenv」

请注意,在/opt目录中创建了一个新的目录myenv。这就是我们的virtualenv将居住的地方。请确保用/opt/myenv替换到你想要你的virtualenv安装的地方的路径。我通常会把我的 env 放在 /opt 中,但这是严格的偏好。有些人在VPS的根源上创建了一个名为webapps的目录。选择任何方法对你来说都是最有意义的。

步骤三:安装Django


现在我们需要激活我们的virtualenv,以便当我们安装Python包时,它们会安装到我们的virtualenv。

源 /opt/myenv/bin/activate 可用

您现在应该看到(myenv)已附加到您的终端提示的开始,这将帮助您知道您的 virtualenv 是活跃的,并且哪个 virtualenv 是活跃的,如果您在 VPS 上有多个 virtualenv。

有了你的virtualenv,我们现在可以安装Django。 要做到这一点,我们将使用Pip,一个Python包管理器,类似于easy_install。

pip install django

你现在已经在你的virtualenv中安装了Django!现在让我们开始使用我们的数据库服务器。

步骤四:安装PostgreSQL


大多数Django用户更喜欢使用PostgreSQL作为他们的数据库服务器,它比MySQL更强大,Django ORM与PostgreSQL比MySQL,MSSQL或其他人更好地工作。

由于我们不需要这个部分的 virtualenv 活跃,请运行以下命令来禁用:

deactivate

这将始终禁用当前活跃的 virtualenv. 现在我们需要安装 PostgreSQL 依赖程序以使用此命令与 Django 合作:

「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 來安裝它。

源 /opt/myenv/bin/activate 可用

请确保您在终端提示的开头看到添加的myenv

《PIP INSTALL GUNICORN》

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

如果你想要的只是安装所有东西,请在这里停下来,否则,请继续寻找如何配置所有东西一起工作,并让你的应用程序可访问其他人在网络上。

步骤七:配置 PostgreSQL


使用 PostgreSQL,我们需要创建数据库,创建用户,并允许我们创建的用户访问我们创建的数据库。

「突然」 - 後台

您的终端提示现在应该说postgres@yourserver。如果是这样的情况,然后运行此命令来创建您的数据库:

创建Mydb

您的数据库现在已经创建,如果您没有更改命令,则将其命名为mydb

《创作家P》

你现在会遇到一系列的6个提示,第一个会问你新用户的名字,使用任何你想要的名字,接下来的两个提示是你的密码和新用户的密码确认。 对于最后3个提示,只需输入n并点击enter。 这只会确保你的新用户只能访问你给它访问的内容,而不是其他任何东西。现在就这样激活PostgreSQL命令行界面:

《psql》

最后,使用此命令授予该新用户访问您的新数据库:

向 myuser 授予 mydb 数据库上的所有特权;

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

步骤八:创建一个Django项目


为了走得更远,我们需要一个Django项目来测试,这将使我们能够看到我们正在做的事情是否有效。

「CD / Opt / Myenv」

现在,请确保您的 virtualenv 是活跃的. 如果您不确定,请运行以下命令,以确保您已被激活:

源 /opt/myenv/bin/activate 可用

有了你的 virtualenv 现在活跃,运行以下命令开始一个新的 Django 项目:

「jango-admin.py startproject myproject」的首页

你应该看到一个名为myproject的新目录在你的virtualenv目录中. 这是我们的新的Django项目文件活着的地方。

为了让Django能够与我们的数据库交谈,我们需要安装PostgreSQL的后端。 确保您的virtualenv是活跃的,并执行以下命令来做到这一点:

《PIP 安装 Psycopg2》

更改目录到新的myproject目录,然后进入它的子目录,也称为myproject如下:

「cd /opt/myenv/myproject/myproject」的功能

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

《Nano settings.py》

查找数据库设置并编辑它们以看起来像这样:

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

现在将一个目录移动到你的主要 Django 项目目录(/opt/myenv/myproject)中。

「cd /opt/myenv/myproject」的功能

如果您还没有使用以下命令,请激活 virtualenv:

源 /opt/myenv/bin/activate 可用

随着 virtualenv 活动,运行以下命令,以便 Django 可以将其初始配置和其他表添加到您的数据库中:

「Python 管理.py syncdb」

您应该看到一些输出描述了哪些表被安装,然后是一个提示询问您是否想要创建一个超级用户。

步骤九:配置 Gunicorn


Gunicorn 配置是非常具体的应用程序需求. 我会简要谈论运行 Gunicorn 在这里与一些不同的设置.

首先只允许运行 Gunicorn 与默认设置。

gunicorn_django --bind yourdomainorip.com:8001

请务必用您的域名替换yourdomainorip.com,或者如果您喜欢的话,请将您的VPS的IP地址替换为yourdomainorip.com。现在请访问您的Web浏览器,访问 yourdomainorip.com:8001并查看您获得的内容。

但是,如果你仔细观察上述命令的输出,你会注意到只有一个Gunicorn工人启动了。如果你在大型VPS上启动大型应用程序,会怎么样?不要害怕!我们所需要做的就是这样修改命令:

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

现在你会注意到 3 名工人被启动,而不是 1 名工人。

由于我们运行了启动 Gunicorn 作为根的命令,所以 Gunicorn 现在正在运行作为根. 如果你不想这样做,怎么办? 再次,我们可以稍微改变上面的命令来适应:

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

如果您想为 Gunicorn 设置更多选项,那么最好设置一个配置文件,您可以在运行 Gunicorn 时调用。

您可以将 gunicorn 配置文件放置在您想要的任何地方。为了方便,我们将其放置在我们的 virtualenv 目录中。

「CD / Opt / Myenv」

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

《Sudo Nano gunicorn_config.py》

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

1command = '/opt/myenv/bin/gunicorn'
2    pythonpath = '/opt/myenv/myproject'
3    bind = '127.0.0.1:8001'
4    workers = 3
5    user = 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需要你在自己的屏幕会话中运行Gunicorn(如果你熟悉使用屏幕),或者你通过打击ctrl + z来背景这个过程,然后在运行Gunicorn命令后直接键入bgenter。这将背景这个过程,以便它即使在当前会话关闭后仍在运行。这也带来了需要手动启动或重新启动Gunicorn的问题,如果你的VPS重新启动或由于某种原因而崩溃。 为了解决这个问题,大多数人使用Supervisord来管理Gunicorn并根据需要启动/重新启动它。 安装和配置Supervisord已被另一个文章所涵盖。

最后,这绝不是Gunicorn配置选项的完整列表,请阅读Gunicorn文件,以了解有关此主题的更多信息。

步骤十:配置 NGINX


在我们走得太远之前,让我们先开始 NGINX 这样:

「Sudo 服務 nginx 開始」

由于我们只设置 NGINX 来处理静态文件,我们首先需要决定我们的静态文件将存储在哪里。 打开您的 Django 项目的 settings.py 文件,并编辑 STATIC_ROOT 行,看起来像这样:

1STATIC_ROOT = "/opt/myenv/static/"

但是为了清洁,我通常把它放在我的Django项目文件夹外面,但在我的virtualenv目录中。

现在你已经设置了你的静态文件的位置,让我们配置NGINX来处理这些文件。用以下命令打开一个新的NGINX配置文件(你可以用你所选择的编辑器代替nano):

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

您可以将文件命名为任何您想要的,但标准通常是将其命名为与您正在配置的网站相关的东西。

 1server {
 2        server_name yourdomainorip.com;
 3
 4        access_log off;
 5
 6    	location /static/ {
 7        	alias /opt/myenv/static/;
 8    	}
 9
10    	location / {
11                proxy_pass http://127.0.0.1:8001;
12                proxy_set_header X-Forwarded-Host $server_name;
13                proxy_set_header X-Real-IP $remote_addr;
14                add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
15        }
16    }

保存和退出文件. 上面的配置已经设置了NGINX来服务您在您的Domainorip.com/static/ 所要求的任何东西,从我们为我们的Django项目设置的静态目录中。 您在您的Domainorip.com 所要求的任何东西都会向 localhost 提供代理服务,在端口 8001 上,这就是我们告诉Gunicorn要运行的地方。 其他行确保请求的主机名和IP地址传递给Gunicorn。

现在我们需要在 /etc/nginx/sites-enabled 目录中设置一个符号链接,该目录指向此配置文件。

「cd /etc/nginx/sites-enabled」的功能

一旦到达,请运行此命令:

sudo ln -s.. / 网站可用 / myproject

这将创建我们需要的象征链接,以便NGINX知道如何尊重我们网站的新配置文件。

此外,删除默认 nginx 服务器封锁:

《sudo rm default》

我们需要重新启动NGINX,以便它知道如何寻找我们的更改。

「sudo 服務 nginx 重新啟動」

你现在已经安装了Django并与PostgreSQL合作,你的应用程序是可访问的,NGINX提供静态内容和Gunicorn作为你的应用程序服务器。

Published At
Categories with 技术
comments powered by Disqus