前提条件
此教程假设您已经用您选择的操作系统设置了您的虚拟私有服务器( 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 文件中设置的目录中。
你现在已经部署了你的应用程序进入生产,并准备好去。