

AWS Elastic Beanstalkにpython3.4,django1.7で作ったプロジェクトを公開しようとしています。

デプロイが成功しブラウザでアクセスできたのですが、静的なファイルを置いているディレクトリが403エラーとなっている状況です。  
以下にフォルダ構成と関連する設定の抜粋を記します。

どなたか解決策をお分かりの方ご教示願いないでしょうか。

[code]

    ├──myapp
    │   ├── myapp
    │   │   ├── settings.py
    │   │   └── wsgi.py
    │   ├── manage.py
    │   ├── static       # CSS/JS/画像など静的なファイル
    │   │   ├── img
    │   │   ├── js
    │   │   └── sass
    │   └── web
    ├── requirements.txt
    ├── .elasticbeanstalk
    │   └── config.yml
    └── .ebextensions
        ├── 00_pkg.config
        └── 01-web.config
    
[/code]

settings.py

[code]

    STATIC_URL = '/static/'
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static'),
    )
    
[/code]

01-web.config

[code]

    container_commands:
        01_migrate:
            command: "django-admin.py migrate"
            leader_only: true
    option_settings:
        "aws:elasticbeanstalk:application:environment":
            DJANGO_SETTINGS_MODULE: "myapp.settings"
            PYTHONPATH: "/opt/python/ondeck/app/myapp:/opt/python/current/app/myapp:$PYTHONPATH"
        "aws:elasticbeanstalk:container:python":
            WSGIPath: myapp/myapp/wsgi.py
            NumProcesses: 3
            NumThreads: 20
        "aws:elasticbeanstalk:container:python:staticfiles":
            "/static/": "myapp/static/"
    
[/code]

何卒よろしくお願いします。


CC BY-SA 3.0
2015-12-01T12:20:58.337
19520
2020-07-13T05:30:03.280
2020-07-13T05:30:03.280
754
13475
question
python aws django aws-elasticbeanstalk
AWS Elastic Beanstalk でDjangoアプリをデプロイした時にstaticディレクトリが見れません


自己解決したので結果を記します。

Elastic Beanstalkのデプロイの設定は質問欄の内容で問題はありませんでした。  
問題は他に２点ありました。

一つはパーミッションです。  
デプロイするプロジェクト内の静的なファイルのパーミッションに640が多々含まれていました。ローカルでテストする分には正常に見れたのですが、パーミッションエラーのログが残っていました。

/var/log/httpd/error_log

[code]

    [Sun Nov 29 23:38:36.263454 2015] [core:error] [pid 18065] (13)Permission denied: [client 172.31.31.43:40497] AH00132: file permissions deny server access: /opt/python/current/app/myapp/static/img/hogehoge.jpg, referer: http://myapp.elasticbeanstalk.com/
    
[/code]

ローカルのプロジェクト内のパーミッションを644にして改めて"eb
deploy"することでパーミッションエラーは解決したのですが、一応デプロイの設定に以下を追記して念を入れておきました。

[code]

    container_commands:
        99_staticdir_permission:
            command: find dirrent/static/ -type d -print | xargs chmod 755
        99_staticfile_permission:
            command: find dirrent/static/ -type f -print | xargs chmod 644
    
[/code]

二つ目の問題はシンボリックリンクでした。  
staticディレクトリの下にbootstrapなどのサブディレクトリを配置しているのですが、bootstrapのディレクトリ名にバージョン名が含まれていて、それをシンボリックリンクを作って呼び出していました。

[code]

    myapp/static/
    ├── bootstrap -> bootstrap-3.3.5
    ├── bootstrap-3.3.5
    
[/code]

これをdjangoのテンプレートで呼び出し

[code]

    <link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap.min.css' %}" />
    <script type="text/javascript" src="{% static 'bootstrap/js/bootstrap.min.js' %}"></script>
    
[/code]

しかし"eb
deploy"でデプロイするとシンボリックリンクは反映されないようで、リモートにログインして該当ディレクトリを見てもシンボリックリンクはありませんでした。  
なので、テンプレートのbootstrap呼び出し箇所を実体のディレクトリ名に変更することで正常に表示されるようになりました。

以上で本問題は解決しました。  
今回は自己解決できましたが、この場を提供しているStackoverflowおよびコミュニティの皆様に感謝します。


CC BY-SA 3.0
2015-12-01T21:06:17.913
19528
2015-12-01T21:06:17.913
13475
19520
answer