ECS部署Django之旅

引言:

在完成了一个基于Django的博客系统后,我目前着手将我的博客系统部署到阿里云的ECS服务器上。

之所以选择云服务器,在我还在lab的时候,还是学生所以比较便宜一年100软妹币的样子,性价比极高,所以买了这样一个服务器用以学习。

概述

一旦您的网站完成(或完成“足够”开始公开测试),您将需要将其托管在比您的个人开发计算机更公开和可访问的地方。

到目前为止,您一直在开发环境中工作,使用Django开发Web服务器将您的站点共享到本地浏览器/网络,并使用暴露调试和其他私人信息的(不安全)开发设置运行您的网站。在您可以从外部托管网站之前,您首先必须:

  • 对你的项目设置(project settings)做一定的修改
  • 选择一个用来托管Django app的环境
  • 选择一个用来托管所有静态文件的环境
  • 设置一个产品级的设施来为你的网站服务

本教程为您选择托管站点提供了一些指导,简要概述了为了让您的Django应用程序可用于生产需要做什么以及如何将博客网站安装到阿里云托管上服务。

什么是生产环境?

生产环境是一个由服务器电脑提供的环境,你将在这里运行你的网站,为外部使用提供服务。生产环境包括:

  • 网站运行所需要的电脑硬件
  • 操作系统 (例如 Linux, Windows).
  • 编程语言运行库和框架库,在其上编写您的网站。
  • 用于提供页面和其他内容的Web服务器(例如Nginx,Apache)。
  • 在 Django 网站和 Web 服务器之间,传递“动态”请求的应用程序服务器。
  • 您的网站所依赖的数据库。

注意: 根据您的生产配置方式,您可能还有反向代理,负载均衡器等。

服务器计算机可以位于您的场所,并通过快速链接连接到 Internet,但使用托管“在云中”的计算机更为常见。这实际上意味着,您的代码在托管公司的数据中心的某台远程计算机(或可能是“虚拟”计算机)上运行。远程服务器通常会以特定价格,提供一些保证级别的计算资源(例如CPU,RAM,存储器等)和互联网连接。

这种可远程访问的计算/网络硬件,称为基础架构即服务(IaaS)。许多IaaS供应商,提供预安装特定操作系统的选项,您必须在其上安装生产环境的其他组件。其他供应商允许您选择功能更全面的环境,可能包括完整的 Django ,和 Web 服务器设置。

注意: 预构建环境可以使您的网站设置变得非常简单,因为它们会减少配置,但可用选项可能会限制您使用不熟悉的服务器(或其他组件),并且可能基于较旧版本的操作系统。通常最好自己安装组件,以便获得所需的组件,当您需要升级系统的某些部分时,您就知道从哪里开始!

其他托管服务提供商,支持 Django 作为平台即服务(PaaS)产品的一部分。在这种托管中,您不必担心大多数生产环境(Web 服务器,应用程序服务器,负载平衡器),因为主机平台会为您处理这些(以及为了扩展您的应用程序,而需要做的大部分工作)。这使得部署非常简单,因为您只需要专注于 Web 应用程序,而不是所有其他服务器的基础结构。

相对于 PaaS,一些开发人员会选择 IaaS 所提供的更高灵活性,而其他开发人员,则欣赏 PaaS 降低的维护开销,和更轻松地扩展。当您开始使用时,在 PaaS 系统上设置您的网站,要容易得多,因此我们将在本教程中这么做。

提示: 如果您选择一个 Python/Django 友好的托管服务提供商,他们应该提供有关如何使用不同配置的网络服务器,应用服务器,反向代理等设置 Django 网站的说明(如果您选择 PaaS,这就没有关系了)。例如,Digital Ocean Django 社区文档 中的各种配置,有许多手把手指南。

选择托管服务提供商S

已知有超过100个托管服务提供商,积极支持或与 Django 合作(您可以在 Djangofriendly hosts 主机上,找到相当广泛的列表)。这些供应商提供不同类型的环境(IaaS,PaaS),以及不同价格、不同级别的计算和网络资源。

选择主机时需要考虑的一些事项:

  • 您的网站可能有多忙,以及满足该需求,所需的数据和计算资源的成本。
  • 水平扩展(添加更多机器)和垂直扩展(升级到更强大的机器)的支持级别,以及这样做的成本。
  • 供应商的数据中心位于何处,因此访问可能是最快的。
  • 主机的历史正常运行时间,和停机时间的表现。
  • 用于管理站点的工具 - 易于使用且安全(例如 SFTP 相比于 FTP)。
  • 用于监控服务器的内置框架。
  • 已知限制。有些主机会故意阻止某些服务(例如电子邮件)。其他在某些价格层中,仅提供一定时数的“实时时间”,或者仅提供少量存储空间。
  • 额外的好处。一些提供商将提供免费域名和 SSL 证书支持,否则您将不得不为此支付费用。
  • 您所依赖的“免费”等级,是否会随着时间的推移而过期,以及迁移到更昂贵等级的成本,是否意味着,您最好一开始就使用其他服务!

当你刚开始时,好消息是,有很多网站提供了 “免费” 的 “评估”、“开发者” 或 “爱好者” 计算环境。这些始终是资源相当受限/有限的环境,您需要注意,它们可能会在广告期限后过期。然而,它们非常适合在真实环境中,测试低流量站点,并且可以在您的站点变得更加繁忙时,付费取得更多资源,并轻松迁移。此类别中的热门选择包括HerokuPython AnywhereAmazon Web ServicesMicrosoft Azure 等。

许多提供商还有“基本”层,可提供更多有用的计算能力和更少的限制。Digital Ocean 和 Python Anywhere ,就是流行的托管服务提供商的例子,提供相对便宜的基本计算等级(每月 5 美元到 10 美元不等)。

注意: 请记住,价格不是唯一的选择标准。如果您的网站成功,可能会发现,可扩展性是最重要的考虑因素。

让您的网站准备好发布

使用 django-admin 和 manage.py 工具创建的 Django 骨架网站,是为了使开发更容易而配置的。出于安全性或性能原因,许多 Django 项目设置(在settings.py中指定),在生产应该是不同的。

提示: 通常有一个单独的 settings.py 文件用于生产环境,并从单独的文件或环境变量,导入敏感设置。即使其他源代码在公共存储库中可用,也应保护此文件。

您必须检查的关键设置是:

  • DEBUG. 这应该在生产环境中设置为 FalseDEBUG = False)。这将停止显示敏感/机密调试跟踪和变量信息。
  • SECRET_KEY. 这是用于CRSF保护等的大随机值。重要的是,生产中使用的密钥,不应在源代码管理中、或在生产服务器外部可访问。 Django文档表明,可能最好从环境变量加载,或从仅供服务的文件中读取。
    1 # Read SECRET_KEY from an environment variable
    2 import os
    3 SECRET_KEY = os.environ['SECRET_KEY']
    4 
    5 #OR
    6 
    7 #Read secret key from a file
    8 with open('/etc/secret_key.txt') as f:
    9     SECRET_KEY = f.read().strip()

     

让我们更改 bolg 应用程序,以便我们从环境变量中,读取SECRET_KEY 和 DEBUG变量(如果已定义),否则使用配置文件中的默认值。

打开 /locallibrary/settings.py,禁用原始的SECRET_KEY配置,并加入如下以粗体显示的几行。在开发过程中,不会为密钥指定环境变量,因此将使用默认值(在此处使用的密钥,或密钥“泄漏”无关紧要,因为您不会在生产环境中使用它)。

1 # SECURITY WARNING: keep the secret key used in production secret!
2 # SECRET_KEY = 'cg#p$g+j9tax!#a3cup@1$8obt2_+&k3q+pmu)5%asj6yjpkag'
3 import os
4 SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', 'cg#p$g+j9tax!#a3cup@1$8obt2_+&k3q+pmu)5%asj6yjpkag')

 

然后注释掉现有的DEBUG设置,并如下所示,添加新的一行。

1 # SECURITY WARNING: don't run with debug turned on in production!
2 # DEBUG = True
3 DEBUG = bool( os.environ.get('DJANGO_DEBUG', True) )

 

默认情况下,DEBUG的值为True,但如果DJANGO_DEBUG环境变量的值,设置为空字符串,则为False,例如, DJANGO_DEBUG='' 。

注意: 如果我们可以直接将DJANGO_DEBUG环境变量设置为TrueFalse,而不是分别使用“any string”或“empty string”,那将更直观。不幸的是,环境变量值存储为 Python 字符串,计算结果为 False 的唯一字符串,是空字符串(例如bool('')==False)。

部署清单(Django文档)中,提供了您可能要更改的完整设置清单。您还可以使用下面的终端命令,列出其中的一些:

1 python3 manage.py check --deploy

 

 

 

以下是我的ECS基本配置:

后面将会记录,我一步一步部署django的过程:

1.centos7 python环境的创建

2.nginx安装与配置

3.mysql(mariadb)安装与部署

 

to be continued...

 

posted @ 2018-09-23 17:17  YanceDev  阅读(576)  评论(0编辑  收藏  举报