不修改 Django 的 AWS ElasticBeanstalk 更新 wsgi.conf
AWS ElasticBeanstalk update without modifing Django wsgi.conf
我使用自动缩放在 AWS EB 中部署了一个 django 应用程序。
此应用程序使用带有令牌身份验证的 Django Rest。
为了让它工作,我必须在 etc/httpd/conf.d/wsgi.conf 文件中添加以下行:
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
WSGIPassAuthorization On
问题是:当 AWS 进行自动缩放或 ElasticBeanstalk 环境升级时,wsgi.conf 文件被更新并且自定义设置被删除。
我怎样才能避免这种情况?
提前致谢
为避免 ElasticBeanstalk 在自动缩放或重新初始化环境中的任何实例时擦除您的自定义设置,您应该使用 .ebextensions
脚本对 ec2 实例的 config
文件进行任何持久修改。
(在使用 eb ssh
测试这些修改后 'manually')
在这种情况下,您可以使用 sed command
来编辑您的 wsgi.conf
文件。
将以下 container_command 添加到您的 yaml Elastic Beanstalk 配置文件中(即:.ebextension/yourapp.config
):
03_wsgipass:
command: 'sed -i -f .ebextensions/wsgi_update.sed ../wsgi.conf'
它应该看起来像这样:
container_commands:
01_migrate:
command: "django-admin.py migrate --noinput"
leader_only: true
02_collectstatic:
command: "django-admin.py collectstatic --noinput"
03_wsgipass:
command: 'sed -i -f .ebextensions/wsgi_update.sed ../wsgi.conf'
在 .ebextensions
文件夹的 wsgi_update.sed
中创建一个新文件,内容如下:
/<Virtual/ a\
RewriteEngine On\
RewriteCond %{HTTP:Authorization} ^(.*)\
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
/<\/Virtual/ a\
WSGIPassAuthorization On
这是一个小的 sed program 示例,它将在您的 <VirtualHost>
块中添加 apache mod_rewrite
规则,并在结束标记 [=24] 之后添加 WSGIPassAuthorization
行=] 在您的 wsgi.conf
文件中
它将在每个应用程序部署到您的环境中通过自动缩放创建的任何现有或新实例时执行。
这是行不通的我已经尝试了所有选项,但似乎对 ebs 不起作用。我真的不知道还能尝试什么。
我使用自动缩放在 AWS EB 中部署了一个 django 应用程序。 此应用程序使用带有令牌身份验证的 Django Rest。 为了让它工作,我必须在 etc/httpd/conf.d/wsgi.conf 文件中添加以下行:
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
WSGIPassAuthorization On
问题是:当 AWS 进行自动缩放或 ElasticBeanstalk 环境升级时,wsgi.conf 文件被更新并且自定义设置被删除。
我怎样才能避免这种情况?
提前致谢
为避免 ElasticBeanstalk 在自动缩放或重新初始化环境中的任何实例时擦除您的自定义设置,您应该使用 .ebextensions
脚本对 ec2 实例的 config
文件进行任何持久修改。
(在使用 eb ssh
测试这些修改后 'manually')
在这种情况下,您可以使用 sed command
来编辑您的 wsgi.conf
文件。
将以下 container_command 添加到您的 yaml Elastic Beanstalk 配置文件中(即:.ebextension/yourapp.config
):
03_wsgipass:
command: 'sed -i -f .ebextensions/wsgi_update.sed ../wsgi.conf'
它应该看起来像这样:
container_commands:
01_migrate:
command: "django-admin.py migrate --noinput"
leader_only: true
02_collectstatic:
command: "django-admin.py collectstatic --noinput"
03_wsgipass:
command: 'sed -i -f .ebextensions/wsgi_update.sed ../wsgi.conf'
在 .ebextensions
文件夹的 wsgi_update.sed
中创建一个新文件,内容如下:
/<Virtual/ a\
RewriteEngine On\
RewriteCond %{HTTP:Authorization} ^(.*)\
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
/<\/Virtual/ a\
WSGIPassAuthorization On
这是一个小的 sed program 示例,它将在您的 <VirtualHost>
块中添加 apache mod_rewrite
规则,并在结束标记 [=24] 之后添加 WSGIPassAuthorization
行=] 在您的 wsgi.conf
文件中
它将在每个应用程序部署到您的环境中通过自动缩放创建的任何现有或新实例时执行。
这是行不通的我已经尝试了所有选项,但似乎对 ebs 不起作用。我真的不知道还能尝试什么。