|
@@ -51,7 +51,16 @@ With PIP installed run the following commands:
|
|
|
|
|
|
git clone git@github.com:wagtail/bakerydemo.git
|
|
|
cd wagtaildemo
|
|
|
- pip install -r requirements/base.txt
|
|
|
+ pip install -r requirements.txt
|
|
|
+
|
|
|
+Next, we'll set up our local environment variables. We use [django-dotenv](https://github.com/jpadilla/django-dotenv)
|
|
|
+to help with this. It reads environment variables located in a file name .env in the top level directory of the project. The only variable we need to start is `DJANGO_SETTINGS_MODULE`:
|
|
|
+
|
|
|
+ $ cp bakerydemo/settings/local.py.example bakerydemo/settings/local.py
|
|
|
+ $ echo "DJANGO_SETTINGS_MODULE=bakerydemo.settings.local" > .env
|
|
|
+
|
|
|
+Execute the following commands:
|
|
|
+
|
|
|
./manage.py migrate
|
|
|
./manage.py load_initial_data
|
|
|
./manage.py runserver
|
|
@@ -82,6 +91,56 @@ 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
|
|
|
+
|
|
|
+The following setting in `base.py` and `heroku.py` ensures that live email is not sent by the demo contact form.
|
|
|
+
|
|
|
+`EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'`
|
|
|
|
|
|
+In production on your own site, you'll need to change this to:
|
|
|
|
|
|
+`EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'`
|
|
|
|
|
|
+and configure [SMTP settings](https://docs.djangoproject.com/en/1.10/topics/email/#smtp-backend) appropriate for your email provider.
|