wagtail-bakerydemo/readme.md

171 wiersze
7.5 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.
This project can be installed in one of three ways:
- Vagrant
- Docker
- Traditional/manual Django setup
If you're new to Python/Django, we suggest you run this project on a Virtual Machine using Vagrant or
via Docker, both of which help resolve common software dependency issues. Developers more familiar with
virtualenv and traditional Django app setup instructions should use the Local Setup instructions below.
Once you're familiar with the examples in this project and you want to start a real site, run
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 bakerydemo
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 with Docker
-----------------
### Dependencies
* [Docker](https://docs.docker.com/engine/installation/)
### Installation
Run the following commands:
```bash
git clone git@github.com:wagtail/bakerydemo.git
cd bakerydemo
docker-compose up --build -d
docker-compose run app /venv/bin/python manage.py load_initial_data
```
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``.
**Important:** This `docker-compose.yml` is configured for local testing only, and is not intended for production use.
### Debugging
To tail the logs from the Docker containers in realtime, run:
```bash
docker-compose logs -f
```
Local Setup
-----------
Don't want to set up a whole Vagrant VM or use Docker to try out Wagtail? No problem. You'll probably want to start
with a fresh virtualenv.
### Installation
With [PIP](https://github.com/pypa/pip) and [virtualenvwrapper](https://virtualenvwrapper.readthedocs.io/en/latest/)
installed, run:
mkvirtualenv wagtailbakerydemo
cd ~/dev [or your preferred dev directory]
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
To set up your database and load initial data, run 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 prevent the demo site from regenerating a new Django `SECRET_KEY` each time Heroku restarts your site, you should set
a `DJANGO_SECRET_KEY` environment variable in Heroku using the web interace or the [CLI](https://devcenter.heroku.com/articles/heroku-cli). If using the CLI, you can set a `SECRET_KEY` like so:
heroku config:set DJANGO_SECRET_KEY=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 or via Docker, you may want to perform some additional setup. Heroku uses an
[ephemeral filesystem](https://devcenter.heroku.com/articles/dynos#ephemeral-filesystem), and Docker-based hosting
environments typically work in the same manner. 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.
This demo site comes preconfigured with a production settings file that will enable S3 for uploaded media storage if
``AWS_STORAGE_BUCKET_NAME`` is defined in the shell environment. All you need to do is set the following environment
variables. If using Heroku, you will first need to install and configure the [Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli). Then, 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. If you're using a different hosting
environment, set the same environment variables there using the method appropriate for your environment.
Once Heroku restarts your application or your Docker container is refreshed, you should have persistent media storage!
### Sending email from the contact form
The following setting in `base.py` and `production.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.