如何从 Amazon Elastic Beanstalk 中删除一些 Apache 设置?
Posted
技术标签:
【中文标题】如何从 Amazon Elastic Beanstalk 中删除一些 Apache 设置?【英文标题】:How to remove some Apache settings from Amazon Elastic Beanstalk? 【发布时间】:2016-02-23 17:27:49 【问题描述】:我对 Elastic Beanstalk 有一个奇怪的问题。我将一个 Django 项目部署到一个自动扩展的 EC2 实例。
在.ebextensions
目录中,我有一个python.config
文件,最后有以下几行:
option_settings:
"aws:elasticbeanstalk:application:environment":
DJANGO_SETTINGS_MODULE: "myapp.settings_eb_staging"
"PYTHONPATH": "/opt/python/current/app/django-myapp:$PYTHONPATH"
"aws:elasticbeanstalk:container:python":
WSGIPath: myapp/wsgi.py
NumProcesses: 3
NumThreads: 20
"aws:elasticbeanstalk:container:python:staticfiles":
"/static/": "myapp/static/"
"/favicon.ico": "myapp/static/site/img/favicon.ico"
当我部署项目时
$ eb deploy
部署过程创建了这个 Apache 配置,可以在 /etc/httpd/conf.d/wsgi.conf
找到:
Alias /favicon.ico /opt/python/current/app/myapp/static/site/img/favicon.ico
<Directory /opt/python/current/app/myapp/static/site/img/favicon.ico>
Order allow,deny
Allow from all
</Directory>
这显然是错误的,因为favicon.ico
是一个文件,而不是一个目录。
所以我尝试从python.config
文件中删除最后一行:
"/favicon.ico": "myapp/static/site/img/favicon.ico"
然后重新部署项目。
问题在于 Apache 指令仍然存在。我也尝试手动删除该指令,但在下一次部署后它再次出现。我什至尝试重建环境,但它仍然创建了错误的 Apache 配置指令。
我怎样才能摆脱它?
【问题讨论】:
【参考方案1】:原来wsgi.conf
配置文件可以被.ebextensions/python.config
文件覆盖。这就是我所做的:
通过eb ssh
SSH 到EC2 实例,并通过cat /etc/httpd/conf.d/wsgi.conf
获取wsgi.conf
的内容。
创建一个文件.ebextensions/wsgi.conf
并将上一步的内容复制到那里。删除关于静态目录和 favicon 的 Apache 指令。
修改.ebextensions/python.config
并添加命令将wsgi.conf
复制到/tmp/
目录(部署过程中可能会用到):
container_commands:
01_refresh_apache_conf:
command: "cp .ebextensions/wsgi.conf /tmp/wsgi.conf"
02_migrate:
command: "source /opt/python/run/venv/bin/activate && python manage.py migrate --noinput"
leader_only: true
03_collectstatic:
command: "source /opt/python/run/venv/bin/activate && python manage.py collectstatic --noinput"
option_settings:
"aws:elasticbeanstalk:application:environment":
DJANGO_SETTINGS_MODULE: "myapp.settings_eb_staging"
"PYTHONPATH": "/opt/python/current/app/django-myapp:$PYTHONPATH"
"aws:elasticbeanstalk:container:python":
WSGIPath: myapp/wsgi.py
NumProcesses: 3
NumThreads: 20
"aws:elasticbeanstalk:container:python:staticfiles":
"/static/": "myapp/static/"
提交到 git 并使用 eb deploy
进行部署。
附:要显示静态目录中的网站图标,我必须在 base.html
模板中添加其完整路径:
<link rel="shortcut icon" href=" STATIC_URL site/img/favicon.ico" />
【讨论】:
【参考方案2】:您可以将自己的 wsgi.conf (httpd conf) 复制到父目录,这样您的文件将被使用而不是默认文件。
container_commands:
03_wsgireplace:
command: 'cp . ebextensions/wsgi.conf ../wsgi.conf'
【讨论】:
以上是关于如何从 Amazon Elastic Beanstalk 中删除一些 Apache 设置?的主要内容,如果未能解决你的问题,请参考以下文章
无法从 Elastic Beanstalk 连接到 Amazon SimpleDB
Amazon Elastic Beanstalk 如何采用自定义 python 命令?
如何在 Amazon 的 Elastic Beanstalk 上安装 Python 脚本?