引言:

在完成了一个基于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文档表明,可能最好从环境变量加载,或从仅供服务的文件中读取。
     # Read SECRET_KEY from an environment variable
    import os
    SECRET_KEY = os.environ['SECRET_KEY'] #OR #Read secret key from a file
    with open('/etc/secret_key.txt') as f:
    SECRET_KEY = f.read().strip()

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

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

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

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

 # SECURITY WARNING: don't run with debug turned on in production!
# DEBUG = True
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文档)中,提供了您可能要更改的完整设置清单。您还可以使用下面的终端命令,列出其中的一些:

 python3 manage.py check --deploy

以下是我的ECS基本配置:

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

1.centos7 python环境的创建

2.nginx安装与配置

3.mysql(mariadb)安装与部署

to be continued...

ECS部署Django之旅的更多相关文章

  1. 部署 Django

    补充说明:关于项目部署,历来是开发和运维人员的痛点.造成部署困难的主要原因之一是大家的Linux环境不同,这包括发行版.解释器.插件.运行库.配置.版本级别等等太多太多的细节.因此,一个成功的部署案例 ...

  2. Python3.6+nginx+uwsgi部署Django程序到阿里云Ubuntu16.04系统

    Python3.6+nginx+uwsgi部署Django程序到阿里云Ubuntu16.04系统 这个是写好的Django程序在本地机运行的情况,一个查询接口. 准备工作 1.首先购买一台阿里云的EC ...

  3. #阿里云#云服务器部署Django(基础篇)

    前言 本人能力有限,本文只是简单介绍基础部署流程,没有过多考虑系统安全等因素,请谅解.初学者参考了解,大神勿喷. 纯测试部署,采用阿里云ECS,系统Ubuntu 16.04 64位,部署采用nginx ...

  4. 阿里云部署django实现公网访问

    本博的主要目的是对阿里云部署django实现公网访问进行一次简单的记录,方便日后查询. 内容目录: (1)申请阿里云服务器及安全组配置 (2)实现ssh远程控制 (3)实现ftp文件传输 (4)安装p ...

  5. 第六章:Django 综合篇 - 19:部署 Django

    补充说明:关于项目部署,历来是开发和运维人员的痛点.造成部署困难的主要原因之一是大家的Linux环境不同,这包括发行版.解释器.插件.运行库.配置.版本级别等等太多太多的细节.因此,一个成功的部署案例 ...

  6. mac osx 上面部署Django项目 apache+mysql+mod_wsgi

    1.安装Xcode command line tools 首先,编译mysql和Homebrew需要用到Xcode command line tools,所以首先安装command line tool ...

  7. Ubuntu上通过nginx部署Django笔记

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式.今天在Ubuntu上使用Nginx部署Django服务,虽然不是第一次搞这个了,但是发现还是跳进了好多坑,g ...

  8. Apache2.4部署django出现403 Forbidden错误解决办法

    前言:Apache2.4部署django出现403 Forbidden错误最好要结合apache中的错误日志来观察出现何种错误导致出现403错误 下午百度了一下午没找到解决办法,试了n种方法,简直坑爹 ...

  9. 五步教你实现使用Nginx+uWSGI+Django方法部署Django程序

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...

随机推荐

  1. c# 取本地ip地址

    public static System.Net.IPAddress[] GetIpAddress() { string hostName = System.Net.Dns.GetHostName() ...

  2. WPF中添加Winform用户自定义控件

    过程:创建WPF工程->创建Winform用户自定义控件工程->WPF中引用控件->添加到Xaml页面 1.首先在WPF工程的解决方案上右击选择添加新建项目: 选择Windows窗体 ...

  3. python操作mysql数据库的常用方法使用详解

    python操作mysql数据库 1.环境准备: Linux 安装mysql: apt-get install mysql-server 安装python-mysql模块:apt-get instal ...

  4. 转载:Linux内核参数的优化(1.3.4)《深入理解Nginx》(陶辉)

    原文:https://book.2cto.com/201304/19615.html 由于默认的Linux内核参数考虑的是最通用的场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改 ...

  5. jquery实现星级评分

    项目中遇到到实现星级评分,就用了这个插件 http://www.jq22.com/jquery-info291

  6. vue系列之webstrom开发vue,无法热更新

    用vue-cli构建了项目之后在webstorm开发,用npm run dev跑本地服务,经常修改之后在浏览器刷新没反应,偶尔才会有刷新,需要重新跑一遍npm run dev才会更新,这是怎么回事呢? ...

  7. visual studio 2017 installer 安装包制作过程出现的问题---无法注册模块 HRESULT -2147024769 请与您的技术支持人员联系

    使用visual studio 2017 installer制作打包程序时如果用到了外部控件需要按以下方式操作: 1.将应用程序及应用程序所用到的所有DLL拷贝到打包目录,加入打包程序之中. 2.将应 ...

  8. raindi python魔法函数(一)之__repr__与__str__

    __repr__和__str__都是python中的特殊方法,都是用来输出实例对象的,如果没有定义这两个方法在打印的时候只会输出实例所在的内存地址 这种方式的输出没有可读性,并不能直观的体现实例.py ...

  9. tsconfig.json配置

    什么工具看什么官网-一般都会有说明的 https://www.tslang.cn/docs/handbook/tsconfig-json.html 概述 如果一个目录下存在一个tsconfig.jso ...

  10. Redis Windows上下载安装

    其它的默认就可. public class RedisTest { public static void main(String[] args) { Jedis jedis = RedisPool.g ...