Update instructions for latest version of cookiecutter

This commit is contained in:
Harry 2016-04-25 17:24:41 +01:00
parent 0e979f3470
commit 55faf7fd2c

View File

@ -1,5 +1,5 @@
Deployment on Heroku
====================
Deployment on PythonAnywhere
============================
.. index:: PythonAnywhere
@ -7,17 +7,23 @@ Deployment on Heroku
Overview
--------
* Push your code up to a code-sharing site like Bitbucket or Github
Full instructions follow, but here's a high-level view.
* Pull your code down to PythonAnywhere using a *Bash console* and create a virtualenv
**First time config**:
* Set your config environment variables in the *postactivate* script
1. Pull your code down to PythonAnywhere using a *Bash console* and setup a virtualenv
* Run the *manage.py* ``migrate`` and ``collectstatic`` commands
2. Set your config variables in the *postactivate* script
* Add an entry to the PythonAnywhere *Web tab*
3. Run the *manage.py* ``migrate`` and ``collectstatic`` commands
4. Add an entry to the PythonAnywhere *Web tab*
5. Set your config variables in the PythonAnywhere *WSGI config file*
Once you've been through this one-off config, future deployments are just `git pull` and then hit the "Reload" button :)
* Future deployments are just `git pull` and then hit the "Reload" button
Getting your code and dependencies installed on PythonAnywhere
@ -29,7 +35,7 @@ Make sure your project is fully commited and pushed up to Bitbucket or Github or
git clone <my-repo-url> # you can also use hg
cd my-project-name
mkvirtualenv --python=/usr/bin/python3.4 my-project-name # or python2.7, etc
mkvirtualenv --python=/usr/bin/python3.5 my-project-name # or python2.7, etc
pip install -r requirements/production.txt # may take a few minutes
@ -51,7 +57,7 @@ Set environment variables via the virtualenv "postactivate" script (this will se
vi $VIRTUAL_ENV/bin/postactivate
**TIP:** If you don't like vi, you can also edit this file via the PythonAnywhere "Files" menu; look in the *.virtualenvs* folder.
**TIP:** *If you don't like vi, you can also edit this file via the PythonAnywhere **Files** menu; look in the ".virtualenvs" folder.*
Add these exports
@ -59,21 +65,22 @@ Add these exports
export DJANGO_SETTINGS_MODULE='config.settings.production'
export DJANGO_SECRET_KEY='<secret key goes here>'
export SENDGRID_USERNAME='<sendgrid username>'
export SENDGRID_PASSWORD='<sendgrid password>'
export DJANGO_ALLOWED_HOSTS='<www.your-domain.com>'
export DJANGO_ADMIN_URL='<not admin/>'
export DJANGO_MAILGUN_API_KEY='<mailgun key>'
export DJANGO_MAILGUN_SERVER_NAME='<mailgun server name>'
export DJANGO_AWS_ACCESS_KEY_ID=
export DJANGO_AWS_SECRET_ACCESS_KEY=
export DJANGO_AWS_STORAGE_BUCKET_NAME=
export DATABASE_URL='<see below>'
TODO: replace sendgrid with mailgun
**NOTE:** The AWS details are not required if you're using whitenoise or the built-in pythonanywhere static files service, but you do need to set them to blank, as above
**NOTE:** *The AWS details are not required if you're using whitenoise or the built-in pythonanywhere static files service, but you do need to set them to blank, as above.*
Database setup:
---------------
Go to the PythonAnywhere databases tab and configure your database.
Go to the PythonAnywhere **Databases tab** and configure your database.
* For Postgres, setup your superuser password, then open a Postgres console and run a `CREATE DATABASE my-db-name`. You should probably also set up a specific role and permissions for your app, rather than using the superuser credentials. Make a note of the address and port of your postgres server.
@ -84,20 +91,15 @@ Go to the PythonAnywhere databases tab and configure your database.
Now go back to the *postactivate* script and set the ``DATABASE_URL`` environment variable:
.. code-block:: bash
vi $VIRTUAL_ENV/bin/postactivate
.. code-block:: bash
export DATABASE_URL='postgres://<postgres-username>:<postgres-password>@<postgres-address>:<postgres-port>/<database-name>'
# or
export DATABASE_URL='mysql://<pythonanywhere-username>:<mysql-password>@mysql.server/<database-name>'
export DATABASE_URL='mysql://<pythonanywhere-username>:<mysql-password>@<mysql-address>/<database-name>'
# or
export DATABASE_URL='sqlite:////absolute/path/to/db.sqlite'
export DATABASE_URL='sqlite:////home/yourusername/path/to/db.sqlite'
If you're using MySQL, you may need to run ``pip install MySQLdb``, and maybe add ``MySQLdb`` to *requirements/production.txt* too.
If you're using MySQL, you may need to run ``pip install mysqlclient``, and maybe add ``mysqlclient`` to *requirements/production.txt* too.
Now run the migration, and collectstatic:
@ -114,9 +116,11 @@ Now run the migration, and collectstatic:
Configure the PythonAnywhere Web Tab
------------------------------------
Go to the PythonAnywhere **Web** tab, hit **Add new web app**, and choose **Manual Config**, and then the version of Python you used for your virtualenv.
Go to the PythonAnywhere **Web tab**, hit **Add new web app**, and choose **Manual Config**, and then the version of Python you used for your virtualenv.
When you're redirected back to the web app config screen, set the path to your virtualenv. If you used virtualenvwrapper as above, you can just enter its name.
**NOTE:** *If you're using a custom domain (not on \*.pythonanywhere.com), then you'll need to set up a CNAME with your domain registrar.*
When you're redirected back to the web app config screen, set the **path to your virtualenv**. If you used virtualenvwrapper as above, you can just enter its name.
Click through to the **WSGI configuration file** link (near the top) and edit the wsgi file. Make it look something like this, repeating the environment variables you used earlier:
@ -129,25 +133,27 @@ Click through to the **WSGI configuration file** link (near the top) and edit th
if path not in sys.path:
sys.path.append(path)
os.environ['DATABASE_URL'] = '<database url as above>'
os.environ['DJANGO_SETTINGS_MODULE'] = 'config.settings.production'
os.environ['DJANGO_SECRET_KEY'] = '<secret key as above>'
os.environ['SENDGRID_PASSWORD'] = ''
os.environ['SENDGRID_USERNAME'] = ''
os.environ['DJANGO_SECRET_KEY'] = '<as above>'
os.environ['DJANGO_ALLOWED_HOSTS'] = '<as above>'
os.environ['DJANGO_ADMIN_URL'] = '<as above>'
os.environ['DJANGO_MAILGUN_API_KEY'] = '<as above>'
os.environ['DJANGO_MAILGUN_SERVER_NAME'] = '<as above>'
os.environ['DJANGO_AWS_ACCESS_KEY_ID'] = ''
os.environ['DJANGO_AWS_SECRET_ACCESS_KEY'] = ''
os.environ['DJANGO_AWS_STORAGE_BUCKET_NAME'] = ''
os.environ['DATABASE_URL'] = '<as above>'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
TODO: sendgrid -> mailgun
Back on the Web tab, hit **Reload**, and your app should be live!
NB - you will see security warnings until you set up your SSL certificates. If you
**NOTE:** *you may see security warnings until you set up your SSL certificates. If you
want to supress them temporarily, set ``DJANGO_SECURE_SSL_REDIRECT`` to blank. Follow
the instructions here to get SSL set up: https://www.pythonanywhere.com/wiki/SSLOwnDomains
the instructions here to get SSL set up: https://www.pythonanywhere.com/wiki/SSLOwnDomains*
Optional: static files