如何将本地的Django应用部署到VPS

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 如何将本地的Django应用部署到VPS

先决条件


本教程假设您已经使用您选择的操作系统(本教程使用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 文件中设置的目录中。

就是这样!您现在已经将您的应用部署到生产环境并准备就绪。


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
Web App开发 应用服务中间件 nginx
阿里云 部署django全攻略
1.登录root用户在系统下新建用户 useradd -m zhaozhao 2. 为新用户(zhaozhao)添加密码(默认创建的用户没有密码) passwd zhaozhao 3.
2388 0
|
负载均衡 应用服务中间件 nginx
34 Django高级 - 布署
34 Django高级 - 布署
27 0
|
开发工具 git Docker
Django进行docker服务器部署
Django进行docker服务器部署
254 0
|
安全 关系型数据库 MySQL
使用宝塔面板快速部署Django项目
1.开放宝塔端口 假设我们刚购买了一台新的Linux服务器,已经安装好Centos操作系统 在服务器供应商管理后台安全组里开放必要端口 国内的云服务器是把所有的端口给屏蔽了的,如果想使用的话需要自己在服务器提供商后台里的安全组里开放端口。比较常见的是阿里云、腾讯云、百度云等。大多数的服务器商是不需要做此操作的。需要开通的端口一般为:80、443、21、22、3306、8888,8888端口主要是用于访问宝塔的默认端口
856 0
使用宝塔面板快速部署Django项目
|
机器学习/深度学习 PyTorch TensorFlow
Django项目部署
使用阿里云部署基于Django的深度学习项目
Django项目部署
|
弹性计算 Linux 网络安全
云服务器搭建Django项目
第一次使用ECS,做一次连接的笔记,还请多多指教。
401 1
云服务器搭建Django项目
|
PHP
thinkphp虚拟主机部署,Laravel虚拟主机部署
thinkphp虚拟主机部署,Laravel虚拟主机部署
172 0
|
弹性计算 关系型数据库 MySQL
使用ecs服务器并运行django应用
来自“飞天加速计划·高校学生在家实践”,在ecs服务器上运行一个文言文字典和答题的应用。
257 0
使用ecs服务器并运行django应用
|
弹性计算 安全 Ubuntu
Pycharm远程ECS部署Django小项目
本文完成了一个简易的Django项目的部署,ECS上选用的系统是Ubuntu,所用的Django项目是笔者本科期间的课程设计,详见https://github.com/ztingz/NTCS
510 1
Pycharm远程ECS部署Django小项目
|
负载均衡 应用服务中间件 nginx
Django 布署6.5
Django 布署6.5
126 0
Django 布署6.5