使用预配置的Docker容器进行Elastic Beanstalk Django部署

时间:2014-11-26 04:52:06

标签: django amazon-web-services docker elastic-beanstalk

我正在尝试将django应用程序部署到弹性beanstalk。我正在使用amazon的预配置Python 3.4 docker容器和新的Awsebcli v3命令行工具进行部署。当我运行eb deploy时,我收到了ERROR: Timed out while waiting for command to Complete消息,但在运行eb logs时,我看不到任何错误迹象。当我导航到为环境提供的CNAME时,它只是说Internal Server Error

在Amazon使用docker预配置的python容器部署到EB的示例中,他们使用了一个烧瓶应用程序并使用名为application.py的文件运行应用程序...我没有这样的application.py文件,我认为可能导致问题。我将在application.py文件中放置什么来运行我的django应用程序,以及应用程序所需的任何命令(如果数据库需要同步,则为collectstatic,syncdb,否则makemigrations和migrate等)

我正在使用Django 1.7和Python 3.4

谢谢

1 个答案:

答案 0 :(得分:2)

您的容器是否已成功在本地运行?如果没有,我会在您尝试部署到Elastic Beanstalk之前执行此操作。我也处于这个过程的中间,并没有发现它特别容易!但是,我已经解决了你提到的问题。

我的application.py文件如下所示:

import os
import sys

sys.path.insert(0, '/var/app')

os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings'

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

然后我有:

/var/app
    |
    | project/
        settings.py
    | myapp/
        views/
        templates/
        ...

这使我得到一个正在运行的应用程序,但不提供我的静态文件,除非我在开​​发模式下运行。我认为这意味着容器的Apache(或者它是Nginx)实例没有提供我的/ var / app / static目录,但我还没想到它。

至于collectstaticsyncdb - 到目前为止,我只是手动运行它们。我以为它们可以作为CMD条目添加到Dockerfile中,但是Docker will only execute the last of those entries,所以它不起作用。

我遇到的另一个问题是,是否可以在Beanstalk上运行两个容器(我将Postgres放在一个容器中,将Django放在另一个容器中)。我不确定eb deploy能否应对此问题。