如何在 Amazon EC2 主机上设置 Django 网站?

Posted

技术标签:

【中文标题】如何在 Amazon EC2 主机上设置 Django 网站?【英文标题】:How do I set up a Django website on Amazon EC2 hosting? 【发布时间】:2010-12-10 23:00:43 【问题描述】:

有人可以就如何使用 Amazon 的 EC2 托管服务来实现基于 Django 的网站的托管提供具体步骤吗?

这可能吗?

我的网站源代码可以在here找到。

我搜索发现this article。

但在做任何事情之前,我只想了解有关 Amazon EC2 托管的一些基本想法。

【问题讨论】:

如果您阅读找到的文章,您有哪些问题没有得到解答? 读完那篇文章后,我觉得 EC2 不像 FTP 那样简单地将我的网站托管到某个文件夹,我必须遵循很多步骤才能使其正常工作。只是想从高层次了解为什么我需要执行这些步骤,而不是简单地将我的网站和数据库上传到主机。 Django 代码永远不会是“只是简单地上传我的网站”。它不是那样工作的。任何主机都需要大量的设置和配置。 Django 不是 php,抱歉。 尝试在 ec2 上部署而不是使用类似 Elastic Beanstalk 的任何具体原因?后者会容易得多。 【参考方案1】:

这当然是可能的,但听起来 EC2 不是您的最佳选择。有关这样做的人的示例,请参见例如 this 或 this。

从非常简单的意义上说,EC2 只是您可以按小时租用的服务器。你可以让它运行 Windows 或 Linux,然后像往常一样安装 Python 和 Django。事实上,可能有一个图像已经预先配置了 Django。

您应该了解,那里有各种不同类型的主机。在一种极端情况下,您可以为自己的物理服务器付费,安装自己的操作系统(如 Windows 或 Linux),安装自己的 Python,拥有自己的 Web 服务器(如 Apache 或 IIS),自己的 Django 库,自己的数据库(如mysql)等,然后将您的网站上传到该网站。在另一个极端,您可以为共享托管服务上的帐户付费,其他人已经完成了操作系统、Python、Web 服务器等的所有设置,您需要做的就是上传您的网站代码。 EC2 更接近第一个极端,对你来说可能是矫枉过正。我认为在您的情况下,您应该寻找一个更受管理的解决方案。 我会查看这个网页,其中列出了许多不同的 Django 托管公司: Django hosting

【讨论】:

补充一点,如果他们不知道如何管理服务器,我建议他们使用托管解决方案。他们可能会花更少的时间拔头发,网络会享受农场里没有另一个机器人的乐趣。 我是 django 和 python 方面的新手。我想尝试在 EC2 上运行一个开源网站,只是因为我相信 EC2 是我可以使用的最便宜的网站。我可以在本地机器上运行我的 django 网站。只想把它发布到互联网上。 EC2 远非您可以使用的最便宜的。如果您需要专用 VPS,请尝试 slicehost.com。否则,请查看其中一种托管解决方案。 很有趣,因为这个页面现在是“django ec2”的第一名。 :) 这不就是限制使用的免费年吗?也许这对精益开发非常有用,在第一年与一群用户一起测试产品,然后在必要时进行迁移。【参考方案2】:

如果您不想从头开始设置服务器,另一个选择是使用BitNami Django Stack Amazon image。我是一名 BitNami 开发人员,致力于为多个 Python 应用程序创建堆栈。 BitNami Django Stack 已经包含 MySQL 5.1、Apache 2.2(带有 mod_wsgi)和安装了 MarkDown、html5lib 和 python-openid 的 Python。它还包括 django 1.3。

您需要安装 Django 调试工具栏,创建数据库并将文件复制到 /opt/bitnami/apps/django/django_projects 并运行 python manage.py 命令。之后,如果您想在生产中使用(而不是 django 服务器),您将需要配置 apache 来为您的项目服务。

在尝试直接在云中部署应用程序之前,您可以使用本机安装程序并在本地计算机上测试部署。

我们还有一个cost estimation tool。这只是为了对简单的 EC2/EBS 设置有一个粗略的了解,亚马逊并不总是像您预期的那样昂贵,尽管它取决于很多因素。 (尽管根据您的 cmets,您似乎已经了解了成本)。

【讨论】:

【参考方案3】:

我在 AWS EC2 t2.micro 实例(AWS 免费套餐)上托管了我自己的 django 网站。我在这个项目中使用了 Django 1.9,并使用 MySQL 作为数据库。 为您的实例建立 SSH 隧道并按照以下步骤操作:

    在您的实例上安装 apache2 和 libapache2-mod-wsgi:

    sudo apt-get install apache2 libapache2-mod-wsgi

    在您的实例上安装 django:

    sudo pip install django

    安装mysql:

    sudo apt-get install mysqldb

    sudo pip install mysql-python

    sudo apt-get install libmysqlclient-dev

(如果您没有安装 pip:sudo apt-get install python-pip

    为您的 django 项目配置 mysql。将您的 django 项目导入到/var/www/html。 (使用 git 是最好的方法)。

    编辑/etc/apache2/sites-available/000-default.conf:

    <VirtualHost *:80>
        Alias /static /path_to_my_static_folder
    
        <Directory /path_to_my_project_folder_containing_wsgi.py>
            <Files wsgi.py>
                Require all granted
            </Files>
        </Directory>
    
        WSGIDaemonProcess project_name python-path=/path_to/lib/python2.7/site-packages
    
        WSGIProcessGroup project_name
        WSGIScriptAlias / /path_to_wsgi.py
    </VirtualHost>
    

    运行迁移以同步数据库:

    python manage.py migrate

    重启apache2:

    sudo service apache2 reload

我希望您没有在 settings.py 中对模板和静态路径进行硬编码,如果是,则将其更改为动态路径,或者进行相应的编辑。

就是这样! 访问您的公共 IP 或 DNS 以访问托管在 AWS EC2 实例上的 Django 网站。

如有错误请在下方评论。

【讨论】:

你能解释一下使用 gunicorn 和 nginx 作为反向代理吗?如果您可以在答案中添加这些步骤,那就太好了。这种网络服务器鸡尾酒对于生产级部署是必不可少的。 一切执行都没有错误。但是访问公共 IP 什么也没显示【参考方案4】:

假设您在您的实例上使用 Apache 服务器,Django 网站上的官方说明比许多博客文章效果更好。这是我从链接中复制的内容: https://docs.djangoproject.com/en/1.5/howto/deployment/wsgi/modwsgi/

编辑以下代码并将其添加到 /etc/apache2/apache2.conf 即可。

WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonPath /path/to/mysite.com

<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Order deny,allow
Require all granted
</Files>
</Directory>

【讨论】:

以上是关于如何在 Amazon EC2 主机上设置 Django 网站?的主要内容,如果未能解决你的问题,请参考以下文章

如何在亚马逊免费云主机amazon ec2安装lnmpa来搭建网站

如何通过 ssh 在 amazon ec2 上使用虚拟主机从 symfony 中删除 app_dev.php / app.php?

如何把WordPress安装到Amazon EC2云主机

如何在 Amazon EC2 上使用 Gunicorn 设置 Nginx 代理缓冲?

如何在 Amazon EC2 Ubuntu 服务器上设置 GUI

通过SecureCRT访问亚马逊Amazon EC2主机