先决条件
本教程假设您已经使用您选择的操作系统(本教程使用Debian 7;Ubuntu也可以)设置了您的虚拟专用服务器。如果您还没有这样做,可以按照本教程进行操作。在开始之前,请确保您的云服务器已经正确配置,可以托管带有数据库服务器、Web 服务器和virtualenv的Django应用程序。如果您还没有进行此操作,请按照有关为Django设置服务器的步骤1-6进行操作。
步骤一:更新软件包
在进行任何操作之前,最好的做法是确保通过apt或您选择的软件包管理器管理的所有软件包都是最新的。您可以通过SSH连接到您的VPS并运行以下命令来实现:
sudo apt-get update
sudo apt-get upgrade
第一个命令会下载通过apt-get管理的软件包的任何更新。第二个命令会安装下载的更新。在运行上述命令后,如果有更新可供安装,您可能会被提示是否要安装这些更新。如果出现这种情况,只需输入“y”,然后在提示时按“Enter”。
步骤二:设置您的Virtualenv
如果您已完成先决条件,则应已设置好,可以跳过此步骤。
现在,我们需要设置我们的virtualenv,其中我们的项目文件和Python软件包将存放。如果您不使用virtualenv,则只需创建Django项目所在的目录,然后转到第三步。
要创建您的virtualenv,请运行以下命令。请记住用您的虚拟专用服务器上项目的所需路径替换路径:
virtualenv /opt/myproject
现在,您已经设置好了您的virtualenv,可以激活您的virtualenv并使用pip安装Django和您可能需要的任何其他Python软件包。以下是激活您的virtualenv并使用pip安装Django的示例:
source /opt/myproject/bin/activate
pip install django
现在我们准备为我们的项目创建一个数据库!
步骤三:创建数据库
本教程假设您使用PostgreSQL作为您的数据库服务器。如果不是,则您需要查阅有关如何为您选择的数据库服务器创建数据库的文档。
要使用PostgreSQL创建数据库,请首先运行以下命令:
sudo su - postgres
现在,您的终端提示应该显示为“postgres@yourserver”。如果是这样,请运行以下命令来创建您的数据库,确保用您想要的数据库名称替换“mydb”:
createdb mydb
现在使用以下命令创建您的数据库用户:
createuser -P
现在,您将会看到一系列六个提示。第一个将要求您输入新用户的名称(使用您想要的任何名称)。接下来的两个提示是为新用户的密码和确认密码。对于最后三个提示,只需输入“n”,然后按“Enter”。这样可以确保您的新用户只能访问您给予它访问权限的内容,而不会访问其他内容。现在像这样激活PostgreSQL命令行界面:
psql
最后,使用以下命令将这个新用户授予对您的新数据库的所有权限:
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
现在,您已经设置了一个数据库和一个用户来访问该数据库。接下来,我们可以开始配置我们的Web服务器以提供静态文件!
步骤四:配置您的VPS
我们需要为我们的站点创建一个新的配置文件。本教程假设您正在使用NGINX作为您的云服务器。如果不是这种情况,您将需要查阅您选择的Web服务器的文档,以完成此步骤。
对于NGINX,请运行以下命令来创建和编辑您站点的Web服务器配置文件,确保用命令末尾的“myproject”替换为您项目的名称:
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以提供在yourdomainorip.com/static/请求的任何内容,从我们为Django项目设置的静态目录中提供。在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,您应该设置好了:
sudo service nginx restart
在重新启动时,您可能会看到以下错误:
server_names_hash, you should increase server_names_hash_bucket_size: 32
您可以通过编辑’/etc/nginx/nginx.conf’来解决此问题。
打开文件并取消以下行的注释:
server_names_hash_bucket_size 64;
现在让我们将我们的项目文件推送到我们的droplet!
第五步:将本地 Django 项目迁移到 Droplet
在这里我们有几个选项:FTP、SFTP、SCP、Git、SVN 等。我们将讨论使用 Git 将本地项目文件传输到您的虚拟专用服务器。
找到您设置虚拟环境的目录或者您希望项目存放的目录。使用以下命令切换到该目录:
cd /opt/myproject
一旦进入该目录,创建一个新的目录,用于存放项目文件。您可以使用以下命令来完成:
mkdir myproject
可能会觉得有两个同名的目录有些多余;然而,这样做可以使您的虚拟环境名称和项目名称相同。
现在使用以下命令切换到新目录:
cd myproject
如果您的项目已经在 Git 仓库中,只需确保您的代码已经提交并推送。您可以在本地计算机的终端(Mac)或命令提示符(PC)中运行以下命令来检查是否已经完成这一步:
git status
如果输出中没有文件,则应该一切就绪。现在 SSH 到您的 droplet 并使用以下命令安装 Git:
sudo apt-get install git
确保对任何提示都回答“y”并按“enter”。一旦安装了 Git,使用以下命令将项目文件拉取到项目目录中:
git clone https://webaddressforyourrepo.com/path/to/repo .
如果您使用 Github 或 Bitbucket 进行 Git 托管,那么可以使用 clone 按钮来获取这个命令。请确保在末尾添加“.”。如果不这样做,Git 将在您的项目目录中创建一个与仓库名称相同的目录,这是不希望看到的。
如果您不使用 Git,则可以使用 FTP 或其他传输协议将文件传输到上述步骤中创建的项目目录。
现在只剩下设置您的应用服务器了!
第六步:安装和配置应用服务器
如果您已经完成了先决条件,这一步应该已经设置好,您可以跳过这一步。
现在我们需要安装我们的应用服务器,并确保它监听在端口 8001 上以响应对我们 Django 应用的请求。在本例中,我们将使用 Gunicorn。要安装 Gunicorn,首先激活您的虚拟环境:
source /opt/myproject/bin/activate
一旦您的虚拟环境激活,运行以下命令安装 Gunicorn:
pip install gunicorn
现在 Gunicorn 已经安装好了,将您的域名或 IP 的请求绑定到端口 8001:
gunicorn_django --bind yourdomainorip.com:8001
现在您可以按下“ctrl + z”,然后输入“bg”将进程放到后台(如果需要的话)。有关更高级的 Gunicorn 配置和设置,可以在本教程的第九步中找到。
现在您已经准备好进行最后一步了!
第七步:配置您的应用
最后一步是为生产环境配置您的应用。我们需要做的所有更改都在您 Django 项目的 “settings.py” 文件中。使用以下命令打开此文件:
sudo nano /opt/myproject/myproject/settings.py
根据您的项目设置的不同,您的设置文件路径可能会有所不同。请相应地修改上述命令中的路径。
打开您的设置文件后,将 DEBUG 设置更改为 False:
DEBUG = False
这将使错误显示为 404 或 500 错误页面,而不是向用户显示带有调试信息的堆栈跟踪。
现在编辑您的数据库设置,使其如下所示,使用您的数据库名称、用户和密码,而不是下面显示的内容:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.psycopg2', # 添加 'postgresql_psycopg2'、'mysql'、'sqlite3' 或 'oracle'。 'NAME': 'mydb', # 或者如果使用 sqlite3,则是数据库文件的路径。 # 以下设置在使用 sqlite3 时不会被使用: 'USER': 'myuser', 'PASSWORD': 'password', 'HOST': '', # 通过域套接字连接到本地主机为空,或者通过 TCP 连接到本地主机为 '127.0.0.1'。 'PORT': '', # 设置为空字符串使用默认值。 } }
现在编辑您的静态文件设置:
STATIC_ROOT = '/opt/myproject/static/' STATIC_URL = '/static/'
保存并退出文件。现在我们只需要收集静态文件。切换到包含您的 “manage.py” 脚本的目录,并运行以下命令:
python manage.py collectstatic
此命令将所有静态文件收集到我们在上面的 settings.py 文件中设置的目录中。
就是这样!您现在已经将您的应用部署到生产环境并准备就绪。