如何在 VPS 上部署本地 Django 应用程序

前提条件


此教程假设您已经用您选择的操作系统设置了您的虚拟私有服务器( Debian 7 用于此教程; Ubuntu 也将工作) 。 尚未做到的,可按此[训 (https://www.digitalocean.com/community/articles/how-to-create-your-first-digitalocean-droplet-virtual-server). 在开始前, 请确保您的云端服务器被恰当配置为主机 Django 应用程序, 并安装了数据库服务器、 网络服务器和虚拟env 。 如果您还没有这样做,请跟随步骤1 - 6 有关[为Django设置服务器] (https://www.digitalocean.com/community/articles/how-to-install-and-configure-django-with-postgres-nginx-and-gunicorn).

第一步:更新包


在做任何事情之前,始终是良好的做法,确保通过apt管理的所有包,或者您所选择的包管理器,都是最新的。

1sudo apt-get update
1sudo apt-get upgrade

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

步骤二:设置您的虚拟网络


如果您完成了前提条件,则此前应该已设置,您可以跳过此步骤。

现在我们需要设置我们的virtualenv,在那里我们的项目文件和Python包将生活. 如果您不使用virtualenv,然后简单地创建您的Django项目将生活的目录,并移动到第三步。

要创建您的 virtualenv,运行以下命令. 请记住,在虚拟私人服务器上用您所需的项目项目路径替换路径:

1virtualenv /opt/myproject

现在你已经安装了 virtualenv,你可以激活你的 virtualenv 并安装 Django 和任何其他 Python 包,你可能需要使用 pip. 下面是如何激活你的 virtualenv 和使用 pip 来安装 Django 的例子:

1source /opt/myproject/bin/activate
1pip install django

现在我们准备为我们的项目创建一个数据库!

步骤三:创建数据库


本教程假设您使用PostgreSQL作为您的数据库服务器,否则您需要查看如何为您选择的数据库服务器创建数据库的文档。

若要使用 PostgreSQL 创建数据库,请运行以下命令:

1sudo su - postgres

您的终端提示现在应该说postgres@yourserver。如果是这样,请运行此命令来创建您的数据库,确保用您想要的数据库名称取代mydb:

1createdb mydb

现在使用以下命令创建您的数据库用户:

1createuser -P

你现在会遇到一系列的六个提示,第一个会问你新用户的名字(使用任何你想要的名字)。接下来的两个提示是你的密码和新用户的密码确认。 对于最后三个提示,只需输入n并打击 enter。 这确保你的新用户只能访问你给它访问的内容,而不是其他任何东西。

1psql

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

1GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

您现在已经设置了一个数据库和一个用户来访问该数据库,接下来,我们可以配置我们的Web服务器来服务我们的静态文件!

第四步:配置您的VPS

我们需要为我们的网站创建一个新的配置文件。本教程假定你正在使用NGINX作为你的云服务器. 如果不是这样,你需要检查你所选择的Web服务器的文档,以完成此步骤。

对于 NGINX,运行以下命令来创建和编辑您的网站的Web服务器配置文件,确保在命令的末尾用您的项目名称取代myproject:

1sudo 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上要求的任何东西都会代理到8001端口的本地主机,我们将在那里告诉Gunicorn(或您选择的应用服务器)运行. 其他线路确保请求的主机名和IP地址被传递给Gunicorn. 没有这个,每个请求的IP地址会变为127.0.0.1,而主机名仅仅是你的VPS主机名.

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

1cd /etc/nginx/sites-enabled

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

1sudo ln -s ../sites-available/myproject

现在用下面的命令重新启动NGINX,你应该设置:

1sudo service nginx restart

您可能会在重新启动时看到以下错误:

1server_names_hash, you should increase server_names_hash_bucket_size: 32

您可以通过编辑 /etc/nginx/nginx.conf来解决此问题。

打开文件并不评论下面的行:

1server_names_hash_bucket_size 64;

现在让我们把我们的项目文件推向我们的滴滴!

第五步:将本地Django项目移动到Droplet


我们在这里有几个选项:FTP,SFTP,SCP,Git,SVN等我们将使用Git将您的本地项目文件传输到您的虚拟私人服务器。

尋找您設定 virtualenv 的目錄或您希望您的項目存活的地方. 使用以下命令變更到此目錄:

1cd /opt/myproject

一旦在那里,创建一个新的目录,在那里你的项目文件将活着. 你可以用以下命令做到这一点:

1mkdir myproject

具有相同名称的两个目录可能似乎是多余的;然而,它使您的虚拟v 名称和项目名称相同。

现在用以下命令切换到新目录:

1cd myproject

如果您的项目已经在 Git 复制中,只需确保您的代码已全部承诺和推移,您可以通过在终端(Mac)或命令提示(PC)上本地运行以下命令来检查:

1git status

如果你在输出中看不到任何文件,那么你应该好好去 SSH 到你的 dropplet 并用以下命令安装 Git:

1sudo apt-get install git

请确保通过输入y并点击enter来回答任何提示,一旦安装了Git,使用它以以下命令将您的项目文件拖入您的项目目录:

1git clone https://webaddressforyourrepo.com/path/to/repo .

如果你使用Github或Bitbucket为Git托管,你可以使用一个 克隆 按钮来获取这个命令. 请确保在末尾添加`。

如果您不使用Git,则使用FTP或其他传输协议将文件传输到上面的步骤创建的项目目录。

现在剩下的就是设置你的应用服务器!

第六步:安装和配置应用服务器


如果您完成了前提条件,则此前应该已设置,您可以跳过此步骤。

现在我们需要安装我们的应用服务器,并确保它在端口8001上听到我们Django应用程序的请求。

1source /opt/myproject/bin/activate

一旦您的 virtualenv 已激活,请运行以下命令来安装 Gunicorn:

1pip install gunicorn

现在Gunicorn已安装,请将您的域或 ip 请求绑定到端口 8001:

1gunicorn_django --bind yourdomainorip.com:8001

现在你可以点击)。 更先进的配置和设置Gunicorn可以找到在步骤九的 这个教程

现在你已经准备好迈出最后一步了!

步骤七:设置您的应用程序


最后一步是将您的应用程序配置为生产。我们需要做的所有更改都在您的 Django 项目的 settings.py 文件中。

1sudo nano /opt/myproject/myproject/settings.py

到您的设置文件的路径可能因项目的设置而有所不同. 相应地修改上面的命令中的路径。

打开设置文件时,更改 DEBUG 设置为 False:

1DEBUG = False

这将使错误向用户显示为404或500错误页面,而不是给他们一堆调试信息。

现在,编辑您的数据库设置以显示如下,使用您的数据库名称、用户名和密码,而不是下面的设置:

 1DATABASES = {
 2    'default': {
 3        'ENGINE': 'django.db.backends.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': '',                      # 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}

现在编辑您的静态文件设置:

1STATIC_ROOT = '/opt/myproject/static/'
2
3STATIC_URL = '/static/'

现在我们需要做的就是收集我们的静态文件. 转到你的manage.py脚本所在的目录,然后运行以下命令:

1python manage.py collectstatic

此命令会将所有静态文件收集到我们在上面的 settings.py 文件中设置的目录中。

你现在已经部署了你的应用程序进入生产,并准备好去。

Published At
Categories with 技术
comments powered by Disqus