Sfoglia il codice sorgente

Merge pull request #44 from wagtail/27-s3-media

Add documentation to discuss how to serve media on S3
David Ray 8 anni fa
parent
commit
413c3fec5a
1 ha cambiato i file con 41 aggiunte e 0 eliminazioni
  1. 41 0
      readme.md

+ 41 - 0
readme.md

@@ -91,6 +91,47 @@ Log into the admin with the credentials ``admin / changeme``.
 
 To learn more about Heroku, read [Deploying Python and Django Apps on Heroku](https://devcenter.heroku.com/articles/deploying-python).
 
+### Storing Wagtail Media Files on AWS S3
+
+If you have deployed the demo site to Heroku, you may want to perform some additional setup.  Heroku uses an
+[ephemeral filesystem](https://devcenter.heroku.com/articles/dynos#ephemeral-filesystem).  In laymen's terms, this means
+that uploaded images will disappear at a minimum of once per day, and on each application deployment.  To mitigate this,
+you can host your media on S3.
+
+This documentation assumes that you have an AWS account, an IAM user, and a properly configured S3 bucket. These topics
+are outside of the scope of this documentation; the following [blog post](https://wagtail.io/blog/amazon-s3-for-media-files/)
+will walk you through those steps.
+
+Next, you will need to add `django-storages` and `boto3` to `requirements/heroku.txt`.
+
+Then you will need to edit `settings/heroku.py`:
+
+    INSTALLED_APPS.append('storages')
+
+You will also need to add the S3 bucket and access credentials for the IAM user that you created.
+
+    AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME', 'changeme')
+    AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID', 'changeme')
+    AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY', 'changeme')
+    AWS_S3_CUSTOM_DOMAIN = '{}.s3.amazonaws.com'.format(AWS_STORAGE_BUCKET_NAME)
+
+Next, you will need to set these values in the Heroku environment.  The next steps assume that you have
+the [Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli) installed and configured. You will
+execute the following commands to set the aforementioned environment variables:
+
+    heroku config:set AWS_STORAGE_BUCKET_NAME=changeme
+    heroku config:set AWS_ACCESS_KEY_ID=changeme
+    heroku config:set AWS_SECRET_ACCESS_KEY=changeme
+
+Do not forget to replace the `changeme` with the actual values for your AWS account.
+
+Finally, we need to configure the `MEDIA_URL` as well as inform Django that we want to use `boto3` for the storage
+backend:
+
+    MEDIA_URL = 'https://{}/'.format(AWS_S3_CUSTOM_DOMAIN)'
+    DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
+
+Commit these changes and push to Heroku and you should now have persistent media storage!
 
 ### Sending email from the contact form