【问题标题】:Best Practice for AWS Elastic Beanstalk PermissionAWS Elastic Beanstalk 权限的最佳实践
【发布时间】:2016-03-08 08:53:37
【问题描述】:

我是 AWS Elastic Beanstalk 的新手,并且仍在学习它。请分享您知道的最佳实践。

eb deploy”将 Django 应用程序上传到 AWS。但是,“./manage makemigrations”会出现 permission denied 像这样的错误

Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/opt/python/run/venv/local/lib/python3.4/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
    utility.execute()
  File "/opt/python/run/venv/local/lib/python3.4/site-packages/django/core/management/__init__.py", line 330, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/opt/python/run/venv/local/lib/python3.4/site-packages/django/core/management/base.py", line 390, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/opt/python/run/venv/local/lib/python3.4/site-packages/django/core/management/base.py", line 441, in execute
    output = self.handle(*args, **options)
  File "/opt/python/run/venv/local/lib/python3.4/site-packages/django/core/management/commands/makemigrations.py", line 143, in handle
    self.write_migration_files(changes)
  File "/opt/python/run/venv/local/lib/python3.4/site-packages/django/core/management/commands/makemigrations.py", line 172, in write_migration_files
    with open(writer.path, "wb") as fh:
PermissionError: [Errno 13] Permission denied: '/opt/python/bundle/3/app/myproj/myapp/migrations/0001_initial.py'

注意用户是 ec2-user,他只拥有对“/opt/python/bundle/3/app/myproj/myapp/migrations/”的读取权限。使用 root 用户可以成功执行迁移,但是存在安全问题。

另一个类似的问题是, ec2-user 没有对“/var/log/”的 WRITE 访问权限,日志文件应存储在哪里?存储在/home/ec2-user 中?如果环境终止,主目录将被清除,对吗?

【问题讨论】:

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


    【解决方案1】:

    您不应该在您的 EB 实例上调用 makemigrations。 makemigrations 是您在开发过程中调用的东西,然后将所有生成的文件(如“0001_initial.py”)置于版本控制之下,并作为eb deploy 的一部分进行部署。

    在您的 .ebextensions 上,您只需要调用仅写入数据库的“迁移”(同时进行数据的实际迁移):

    container_commands:
       01_migrate:
         command: "django-admin.py migrate --noinput"
         leader_only: true
    

    那里的一些示例还建议在您的 .ebextensions 上调用 collectstatics,但我建议不要这样做。假设您正在使用 django-storages 之类的东西并将所有静态数据存储在 S3(或更好的 CloudFront)上,那么最好在您自己的本地机器上调用 collectstatics 作为开发的一部分。例如

    python manage.py collecstatics
    eb deploy
    

    我对日志问题没有真正的疑问。我只是使用 eb 日志,所以我只需将我想看到的内容打印到控制台,EB 会处理这些日志。但我确实知道您有权写入 /tmp 以便它可以成为日志的位置。

    【讨论】:

      猜你喜欢
      • 2021-05-30
      • 2015-06-02
      • 2016-11-02
      • 2014-12-30
      • 2013-04-28
      • 2015-01-20
      • 2021-08-03
      • 1970-01-01
      • 2010-09-21
      相关资源
      最近更新 更多