【问题标题】:Elastic Beanstalk Django Deployment With Preconfigured Docker Container使用预配置 Docker 容器的 Elastic Beanstalk Django 部署
【发布时间】:2015-01-24 08:00:51
【问题描述】:

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

在亚马逊提供的使用 docker 预配置 python 容器部署到 EB 的示例中,他们使用烧瓶应用程序并使用名为 application.py 的文件运行应用程序...我没有这样的 application.py 文件,我认为可能是导致问题的原因。我会在 application.py 文件中放入什么来运行我的 django 应用程序,以及应用程序所需的任何命令(collectstatic,如果 DB 需要同步,则为 syncdb,否则进行迁移和迁移等)

我正在使用 Django 1.7 和 Python 3.4

谢谢

【问题讨论】:

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


    【解决方案1】:

    您的容器是否在本地成功运行?如果没有,我会在您尝试部署到 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 是否可以应付。

    【讨论】:

    • 容器在本地也没有成功运行。我不知道如何在本地容器中设置我的环境变量,我认为这是问题的原因。我该怎么做?
    • 我想第一件事是——数据库在运行吗?可以连接吗?
    • 嗯,到目前为止,我一直在本地机器上进行开发,没有使用任何 docker 容器,并且数据库运行良好。现在我突然想到我可能必须在容器中启动数据库并将其链接到我的应用程序的容器,不是吗?
    猜你喜欢
    • 2015-06-20
    • 2014-12-13
    • 2021-09-10
    • 2016-02-02
    • 2015-08-22
    • 2021-08-30
    • 2016-09-20
    • 2019-09-24
    • 2016-10-16
    相关资源
    最近更新 更多