本教程假设您已经使用所选操作系统设置了虚拟专用服务器(本教程使用 Debian 7;Ubuntu 也可以)。如果您还没有这样做,您可以按照此操作tutorial。在开始之前,请确保您的云服务器已正确配置为托管 Django 应用程序,并已安装数据库服务器、Web 服务器和 virtualenv。如果您尚未执行此操作,请按照步骤 1 - 6 进行操作为 Django 设置服务器.
在做任何事情之前,最好确保通过 apt 管理的所有软件包或您选择的任何软件包管理器都是最新的。您可以通过 SSH 连接到您的 VPS 并运行以下命令来完成此操作:
sudo apt-get update
sudo apt-get upgrade
第一个命令下载通过 apt-get 管理的软件包的所有更新。第二个命令安装已下载的更新。运行上述命令后,如果有更新需要安装,系统可能会提示您是否要安装这些更新。如果发生这种情况,只需键入“y”,然后在出现提示时按“Enter”键。
如果您完成了先决条件,则应该已经设置完毕,您可以跳过此步骤。
现在我们需要设置 virtualenv 来存放我们的项目文件和 Python 包。如果您不使用 virtualenv,则只需创建 Django 项目所在的目录并转到第三步。
要创建虚拟环境,请运行以下命令。请记住将路径替换为您的项目项目在虚拟专用服务器上所需的路径:
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@你的服务器”。如果是这样,请运行此命令来创建数据库,确保将“mydb”替换为您所需的数据库名称:
createdb mydb
现在使用以下命令创建数据库用户:
createuser -P
现在您将看到一系列六个提示。第一个将询问您新用户的名称(使用您想要的任何名称)。接下来的两个提示是输入密码和确认新用户的密码。对于最后三个提示,只需输入“n”并按“enter”即可。这可确保您的新用户只能访问您授予其访问权限的内容,而不能访问其他内容。现在激活 PostgreSQL 命令行界面,如下所示:
psql
最后,使用以下命令授予该新用户对新数据库的访问权限:
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
现在您已设置了一个数据库和访问该数据库的用户。接下来,我们可以配置我们的网络服务器来提供静态文件!
我们需要为我们的站点创建一个新的配置文件。本教程假设您使用 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 中!
我们这里有几个选项:FTP、SFTP、SCP、Git、SVN 等。我们将介绍如何使用 Git 将本地项目文件传输到虚拟专用服务器。
找到您设置 virtualenv 或您希望项目所在的目录。使用以下命令更改到此目录:
cd /opt/myproject
到达那里后,创建一个新目录来存放您的项目文件。您可以使用以下命令来执行此操作:
mkdir myproject
拥有两个同名的目录似乎是多余的;但是,它使您的 virtualenv 名称和项目名称相同。
现在使用以下命令更改到新目录:
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,首先激活您的 virtualenv:
source /opt/myproject/bin/activate
当您的 virtualenv 处于活动状态后,运行以下命令来安装 Gunicorn:
pip install gunicorn
现在 Gunicorn 已安装,请将您的域或 IP 请求绑定到端口 8001:
gunicorn_django --bind yourdomainorip.com:8001
现在您可以点击“ctrl + z”,然后输入“bg”将进程置于后台(如果您愿意)。 Gunicorn 的更高级配置和设置可以在步骤 9 中找到本教程.
现在您已准备好进行最后一步!
最后一步是配置您的应用程序以进行生产。我们需要做的所有改变都在你的“设置.py” Django 项目的文件。使用以下命令打开该文件:
sudo nano /opt/myproject/myproject/settings.py
设置文件的路径可能会有所不同,具体取决于项目的设置方式。相应修改上面命令中的路径。
打开设置文件后,将 DEBUG 设置更改为False:
DEBUG = False
这将使错误以 404 或 500 错误页面的形式向用户显示,而不是向他们提供带有调试信息的堆栈跟踪。
现在编辑您的数据库设置,如下所示,使用您的数据库名称、用户和密码,而不是如下所示:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'mydb', # Or path to database file if using sqlite3.
# The following settings are not used with sqlite3:
'USER': 'myuser',
'PASSWORD': 'password',
'HOST': '', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
'PORT': '', # Set to empty string for default.
}
}
现在编辑您的静态文件设置:
STATIC_ROOT = '/opt/myproject/static/'
STATIC_URL = '/static/'
保存并退出文件。现在我们需要做的就是收集静态文件。切换到您的“管理.py” 脚本并运行以下命令:
python manage.py collectstatic
该命令会将所有静态文件收集到我们在中设置的目录中设置.py上面的文件。
就是这样!您现在已将应用程序部署到生产环境并准备就绪。