kopia lustrzana https://github.com/wagtail/bakerydemo
147 wiersze
6.4 KiB
Markdown
147 wiersze
6.4 KiB
Markdown
Wagtail demo project
|
|
=======================
|
|
|
|
This is a demonstration project for [Wagtail CMS](http://wagtail.io).
|
|
|
|
*We do __not__ recommend using this project to start your own site*. This project is only to provide some examples of
|
|
implementing common features, it is not an exemplar of Django or Wagtail best practice.
|
|
|
|
If you're reasonably new to Python/Django, we suggest you run this project on a Virtual Machine using Vagrant, which
|
|
helps resolve common software dependency issues. However for more experienced developers, instructions to start this
|
|
project without Vagrant follow below.
|
|
|
|
Once you're familiar with the examples in this project and you want to start a real site, we strongly recommend running
|
|
the ``wagtail start`` command in a fresh virtual environment, explained in the
|
|
[Wagtail CMS Documentation](http://wagtail.readthedocs.org/en/latest/getting_started/).
|
|
|
|
Setup with Vagrant
|
|
------------------
|
|
|
|
### Dependencies
|
|
* [VirtualBox](https://www.virtualbox.org/)
|
|
* [Vagrant 1.5+](http://www.vagrantup.com)
|
|
|
|
### Installation
|
|
Run the following commands:
|
|
|
|
```bash
|
|
git clone git@github.com:wagtail/bakerydemo.git
|
|
cd wagtaildemo
|
|
vagrant up
|
|
vagrant ssh
|
|
# then, within the SSH session:
|
|
./manage.py runserver 0.0.0.0:8000
|
|
```
|
|
|
|
The demo site will now be accessible at [http://localhost:8000/](http://localhost:8000/) and the Wagtail admin
|
|
interface at [http://localhost:8000/admin/](http://localhost:8000/admin/).
|
|
|
|
Log into the admin with the credentials ``admin / changeme``.
|
|
|
|
Setup without Vagrant
|
|
-----
|
|
Don't want to set up a whole VM to try out Wagtail? No problem.
|
|
|
|
### Dependencies
|
|
* [PIP](https://github.com/pypa/pip)
|
|
|
|
### Installation
|
|
|
|
With PIP installed run the following commands:
|
|
|
|
git clone git@github.com:wagtail/bakerydemo.git
|
|
cd wagtaildemo
|
|
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
|
|
|
|
Log into the admin with the credentials ``admin / changeme``.
|
|
|
|
### Note on demo search:
|
|
|
|
Because we can't (easily) use ElasticSearch for this demo, we use wagtail's native DB search.
|
|
However, native DB search can't search specific fields in our models on a generalized `Page` query.
|
|
So for demo purposes ONLY, we hard-code the model names we want to search into `search.views`, which is
|
|
not ideal. In production, use ElasticSearch and a simplified search query, per
|
|
[http://docs.wagtail.io/en/v1.8.1/topics/search/searching.html](http://docs.wagtail.io/en/v1.8.1/topics/search/searching.html).
|
|
|
|
### Heroku deployment:
|
|
|
|
If you need to deploy your demo site to a publicly accessible server [Heroku](https://heroku.com)
|
|
provides a one-click deployment solution:
|
|
|
|
[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/wagtail/bakerydemo)
|
|
|
|
If you do not have a Heroku account, clicking the above button will walk you through the steps
|
|
to generate one. After which, you will be presented with a screen to configure your app. For our purposes,
|
|
we will accept all of the defaults and click `Deploy`. The status of the deployment will dynamically
|
|
update in the browser. Once finished, click `View` to see the public site.
|
|
|
|
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.
|