在 CentOS VPS 上托管您的 Django 网站
如果在部署时没有采取适当的步骤,在实时服务器上托管任何网站/Web 应用程序有时会变得困难。主要有3种不同类型的托管:
- 共享主机– 通常用于流量有限的小型(单页)网站。
- VPS 托管– VPS(虚拟专用服务器)托管用于具有大量内容和中高流量的网站。
- 专用主机– 这种主机通常用于内容多、流量大的大型商业网站。
在本文中,我们将主要讨论 VPS 托管。
虚拟专用网
VPS 或虚拟专用服务器是许多用户使用的单个物理机。世界上某处配备虚拟化的物理服务器作为单独的专用系统为用户提供服务。它在不同的用户之间分配可用资源,对于每个用户,看起来好像他们在使用单独的专用机器。
托管前要记住的要点:
- 确保服务器操作系统已更新,并且它使用的所有其他软件都是最新的。
- 检查本地环境包和库的版本是否与 VPS 上的相同。
- 如果版本不同,请确保卸载现有版本并在服务器上安装所需的相同版本。
- 选择一个将在您的 VPS 操作系统上运行的服务器来为您的网站文件提供服务。 (在本文中,我们将使用 Nginx)。
- 始终检查您的托管服务提供商是否为其客户提供良好的支持。
根访问和 SSH
当您购买 VPS 时,您将获得 root 登录凭据。有一些托管服务提供商具有内置终端,可用于 root 访问。在这种情况下,通常不需要 SSH。
SSH(Secure Shell)是用于管理 VPS 的命令行界面。它可以帮助您安全地连接到 VPS shell。对于 SSH 访问,如果未启用,您可能需要联系托管服务提供商。如果已启用,则您可以继续进行。
油灰
这是一个免费的开源终端模拟器,可帮助您从本地系统使用 SSH 访问 VPS 的外壳。使用官方网站在本地系统上下载 PuTTY:https://www.putty.org/
要使用 PuTTY,首先您需要拥有公钥和私钥对。这些密钥对可以使用 PuTTYgen 生成,也可以使用托管界面(如 WHM)创建。创建公私钥对后,您可以将相同的私钥下载到本地系统,打开 PuTTY 后,您可以通过以下方式上传私钥文件:Connection -> SSH -> Auth 如下图所示:
上传后,转到会话选项卡并输入您服务器的 IP 地址,如下图所示:
然后单击打开,您将被重定向到具有服务器 ssh 访问权限的终端。您可以从该终端管理您的服务器。该终端与在您的 VPS 机器上使用终端几乎相同。
注意:有很多方法可以使用 ssh 连接到您的服务器。上面提到的只是一种方法。
准备部署
通过使用本地环境验证它们的版本来安装所有必需的包和库。还要下载运行您的网站所需的软件。
- 启用 EPEL 存储库
$ sudo yum install epel-release
- 安装所需的包
$ sudo yum install
现在,您可以通过 PuTTY 使用安全副本 (scp) 将您的网站文件从本地系统传输到您的 VPS,或者您可以在 github 上创建您网站的存储库,然后您可以从那里将其克隆到您的 VPS。
我建议将您的网站文件上传到目录 /var/www/
对于 Django 网站,现在必须创建一个虚拟环境,因为它使您可以在同一台机器上运行单独的项目,而不会相互冲突。因此,首先创建一个环境,激活它并确保在环境中为您的网站安装所有依赖项。
注意:本文假设您在本地主机上已准备好用于托管的网站,因此我们不会执行创建新网站的步骤。
完成安装依赖项和移动网站文件后,您需要在 VPS 上创建一个数据库服务器。在这里,我们将使用 PostgreSQL。
在您的 VPS 上设置您的网站数据库
- 使用 psql 为网站创建数据库和新角色(数据库用户)并相应地更新 settings.py 文件。
- 在您的 ssh 终端上运行以下命令为您的数据库创建迁移:
(project_env) $ python manage.py makemigrations
- 确保正确创建了所有迁移,并且在创建迁移时不会发生错误。现在迁移数据库:
(project_env) $ python manage.py migrate
在本地系统上重置迁移历史记录
- 使用命令查看当前迁移:
(local_project_env) $ python manage.py showmigrations
- 重复此步骤以清除您网站/项目中所有应用程序的迁移历史记录:
(注意:此处应将 my-app 替换为您的应用程序名称。)
(local_project_env) $ python manage.py migrate --fake my-app zero
- 通过导航到每个应用程序的迁移文件夹并删除该文件夹中除 __init__.py 文件之外的所有内容来删除实际的迁移文件。注意不要删除 __init__.py 文件。
- 创建初始迁移并伪造它们:
(local_project_env) $ python manage.py makemigrations
(local_project_env) $ python manage.py migrate --fake-initial
将现有数据库迁移到 VPS 上的 PostgreSQL
- 转储本地系统上的现有数据:
(local_project_env) $ python manage.py dumpdata > dump.json
- 使用 github 或安全副本 (scp) 将 dump.json 文件从本地系统移动到 VPS。
- 运行Python shell 并删除 contenttype 数据:
(注意:在服务器的终端(ssh)上运行以下命令)
(project_env) $ python manage.py shell
>>> from django.contrib.contenttypes.models import ContentType
>>> ContentType.objects.all().delete()
>>> quit
- 将 dump.json 文件加载到您的数据库:
(project_env) $ python manage.py loaddata dump.json