mirror of
https://github.com/cookiecutter/cookiecutter-django.git
synced 2025-08-07 13:34:53 +03:00
Merge branch 'master' into move-orphan-dev.yml-variables-to-dev.env
This commit is contained in:
commit
25b1902f58
|
@ -56,6 +56,7 @@ Listed in alphabetical order.
|
|||
Areski Belaid `@areski`_
|
||||
Ashley Camba
|
||||
Barclay Gauld `@yunti`_
|
||||
Ben Warren `@bwarren2`
|
||||
Ben Lopatin
|
||||
Benjamin Abel
|
||||
Bo Lopker `@blopker`_
|
||||
|
@ -86,6 +87,7 @@ Listed in alphabetical order.
|
|||
Felipe Arruda `@arruda`_
|
||||
Garry Cairns `@garry-cairns`_
|
||||
Garry Polley `@garrypolley`_
|
||||
Hamish Durkin `@durkode`_
|
||||
Harry Percival `@hjwp`_
|
||||
Henrique G. G. Pereira `@ikkebr`_
|
||||
Ian Lee `@IanLee1521`_
|
||||
|
@ -177,6 +179,7 @@ Listed in alphabetical order.
|
|||
.. _@dhepper: https://github.com/dhepper
|
||||
.. _@dot2dotseurat: https://github.com/dot2dotseurat
|
||||
.. _@dsclementsen: https://github.com/dsclementsen
|
||||
.. _@durkode: https://github.com/durkode
|
||||
.. _@epileptic-fish: https://gihub.com/epileptic-fish
|
||||
.. _@eraldo: https://github.com/eraldo
|
||||
.. _@eriol: https://github.com/eriol
|
||||
|
|
58
README.rst
58
README.rst
|
@ -29,7 +29,7 @@ Features
|
|||
---------
|
||||
|
||||
* For Django 1.10
|
||||
* Works with Python 3.4.x or 3.5.x. Python 3.6 is experimenta
|
||||
* Works with Python 3.4.x or 3.5.x. Python 3.6 is experimental
|
||||
* Renders Django projects with 100% starting test coverage
|
||||
* Twitter Bootstrap_ v4.0.0 - alpha 6 (`maintained Foundation fork`_ also available)
|
||||
* 12-Factor_ based settings via django-environ_
|
||||
|
@ -85,6 +85,36 @@ Constraints
|
|||
* Uses PostgreSQL everywhere (9.2+)
|
||||
* Environment variables for configuration (This won't work with Apache/mod_wsgi except on AWS ELB).
|
||||
|
||||
Support this Project!
|
||||
----------------------
|
||||
|
||||
This project is run by volunteers. Please support them in their efforts to maintain and improve Cookiecutter Django:
|
||||
|
||||
* https://www.patreon.com/danielroygreenfeld: Project lead. Expertise in AWS ELB and Django.
|
||||
|
||||
Projects that provide financial support to the maintainers:
|
||||
|
||||
Two Scoops of Django 1.11
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. image:: https://cdn.shopify.com/s/files/1/0304/6901/products/tsd-111-alpha_medium.jpg?v=1499531513
|
||||
:name: Two Scoops of Django 1.11 Cover
|
||||
:align: center
|
||||
:alt: Two Scoops of Django
|
||||
:target: http://twoscoopspress.org/products/two-scoops-of-django-1-11
|
||||
|
||||
Two Scoops of Django is the best dairy-themed Django reference in the universe
|
||||
|
||||
pyup
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. image:: https://pyup.io/static/images/logo.png
|
||||
:name: pyup
|
||||
:align: center
|
||||
:alt: pyup
|
||||
:target: https://pyup.io/
|
||||
|
||||
Pyup brings you automated security and dependency updates used by Google and other organizations. Free for open source projects!
|
||||
|
||||
Usage
|
||||
------
|
||||
|
@ -258,31 +288,5 @@ Code of Conduct
|
|||
Everyone interacting in the Cookiecutter project's codebases, issue trackers, chat
|
||||
rooms, and mailing lists is expected to follow the `PyPA Code of Conduct`_.
|
||||
|
||||
Support This Project
|
||||
---------------------------
|
||||
|
||||
This project is maintained by volunteers. Support their efforts by spreading the word about:
|
||||
|
||||
Two Scoops Press
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. image:: https://cdn.shopify.com/s/files/1/0304/6901/t/2/assets/logo.png?11985289740589874793
|
||||
:name: Two Scoops Press
|
||||
:align: center
|
||||
:alt: Two Scoops Press
|
||||
:target: https://twoscoopspress.com
|
||||
|
||||
Two Scoops Press brings you the best dairy-themed Django references in the universe
|
||||
|
||||
pyup
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. image:: https://pyup.io/static/images/logo.png
|
||||
:name: pyup
|
||||
:align: center
|
||||
:alt: pyup
|
||||
:target: https://pyup.io/
|
||||
|
||||
Pyup brings you automated security and dependency updates used by Google and other organizations. Free for open source projects!
|
||||
|
||||
.. _`PyPA Code of Conduct`: https://www.pypa.io/en/latest/code-of-conduct/
|
||||
|
|
|
@ -21,5 +21,6 @@
|
|||
"postgresql_version": ["9.6", "9.5", "9.4", "9.3", "9.2"],
|
||||
"js_task_runner": ["Gulp", "Grunt", "None"],
|
||||
"use_lets_encrypt": "n",
|
||||
"custom_bootstrap_compilation": "n",
|
||||
"open_source_license": ["MIT", "BSD", "GPLv3", "Apache Software License 2.0", "Not open source"]
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ Prerequisites
|
|||
Understand the Compose Setup
|
||||
--------------------------------
|
||||
|
||||
Before you start, check out the `docker-compose.yml` file in the root of this project. This is where each component
|
||||
Before you start, check out the `production.yml` file in the root of this project. This is where each component
|
||||
of this application gets its configuration from. Notice how it provides configuration for these services:
|
||||
|
||||
* `postgres` service that runs the database
|
||||
|
@ -37,6 +37,15 @@ root directory of this project as a starting point. Add your own variables to th
|
|||
file won't be tracked by git by default so you'll have to make sure to use some other mechanism to copy your secret if
|
||||
you are relying solely on git.
|
||||
|
||||
It is **highly recommended** that before you build your production application, you set your POSTGRES_USER value here. This will create a non-default user for the postgres image. If you do not set this user before building the application, the default user 'postgres' will be created, and this user will not be able to create or restore backups.
|
||||
|
||||
To obtain logs and information about crashes in a production setup, make sure that you have access to an external Sentry instance (e.g. by creating an account with `sentry.io`_), and set the `DJANGO_SENTRY_DSN` variable. This should be enough to report crashes to Sentry.
|
||||
|
||||
You will probably also need to setup the Mail backend, for example by adding a `Mailgun`_ API key and a `Mailgun`_ sender domain, otherwise, the account creation view will crash and result in a 500 error when the backend attempts to send an email to the account owner.
|
||||
|
||||
.. _sentry.io: https://sentry.io/welcome
|
||||
.. _Mailgun: https://mailgun.com
|
||||
|
||||
HTTPS is on by default
|
||||
----------------------
|
||||
|
||||
|
@ -54,7 +63,7 @@ Optional: nginx-proxy Setup
|
|||
---------------------------
|
||||
|
||||
By default, the application is configured to listen on all interfaces on port 80. If you want to change that, open the
|
||||
`docker-compose.yml` file and replace `0.0.0.0` with your own ip.
|
||||
`production.yml` file and replace `0.0.0.0` with your own ip.
|
||||
|
||||
If you are using `nginx-proxy`_ to run multiple application stacks on one host, remove the port setting entirely and add `VIRTUAL_HOST=example.com` to your env file. Here, replace example.com with the value you entered for `domain_name`.
|
||||
|
||||
|
@ -78,19 +87,19 @@ Replace dhparam.pem.example with a generated dhparams.pem file before running an
|
|||
|
||||
$ openssl dhparam -out /path/to/project/compose/nginx/dhparams.pem 2048
|
||||
|
||||
If you would like to add additional subdomains to your certificate, you must add additional parameters to the certbot command in the `docker-compose.yml` file:
|
||||
If you would like to add additional subdomains to your certificate, you must add additional parameters to the certbot command in the `production.yml` file:
|
||||
|
||||
Replace:
|
||||
|
||||
::
|
||||
|
||||
command: bash -c "sleep 6 && certbot certonly -n --standalone -d {{ cookiecutter.domain_name }} --text --agree-tos --email mjsisley@relawgo.com --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --verbose --keep-until-expiring --standalone-supported-challenges http-01"
|
||||
command: bash -c "sleep 6 && certbot certonly -n --standalone -d {{ cookiecutter.domain_name }} --test --agree-tos --email {{ cookiecutter.email }} --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --verbose --keep-until-expiring --preferred-challenges http-01"
|
||||
|
||||
With:
|
||||
|
||||
::
|
||||
|
||||
command: bash -c "sleep 6 && certbot certonly -n --standalone -d {{ cookiecutter.domain_name }} -d www.{{ cookiecutter.domain_name }} -d etc.{{ cookiecutter.domain_name }} --text --agree-tos --email {{ cookiecutter.email }} --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --verbose --keep-until-expiring --standalone-supported-challenges http-01"
|
||||
command: bash -c "sleep 6 && certbot certonly -n --standalone -d {{ cookiecutter.domain_name }} -d www.{{ cookiecutter.domain_name }} -d etc.{{ cookiecutter.domain_name }} --test --agree-tos --email {{ cookiecutter.email }} --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --verbose --keep-until-expiring --preferred-challenges http-01"
|
||||
|
||||
Please be cognizant of Certbot/Letsencrypt certificate requests limits when getting this set up. The provide a test server that does not count against the limit while you are getting set up.
|
||||
|
||||
|
@ -101,8 +110,8 @@ If you would like to set up autorenewal of your certificates, the following comm
|
|||
|
||||
#!/bin/bash
|
||||
cd <project directory>
|
||||
docker-compose run --rm --name certbot certbot bash -c "sleep 6 && certbot certonly --standalone -d {{ cookiecutter.domain_name }} --text --agree-tos --email {{ cookiecutter.email }} --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --verbose --keep-until-expiring --standalone-supported-challenges http-01"
|
||||
docker exec pearl_nginx_1 nginx -s reload
|
||||
docker-compose -f production.yml run --rm --name certbot certbot bash -c "sleep 6 && certbot certonly --standalone -d {{ cookiecutter.domain_name }} --test --agree-tos --email {{ cookiecutter.email }} --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --verbose --keep-until-expiring --preferred-challenges http-01"
|
||||
docker exec {{ cookiecutter.project_name }}_nginx_1 nginx -s reload
|
||||
|
||||
And then set a cronjob by running `crontab -e` and placing in it (period can be adjusted as desired)::
|
||||
|
||||
|
@ -116,40 +125,40 @@ directory.
|
|||
|
||||
You'll need to build the stack first. To do that, run::
|
||||
|
||||
docker-compose build
|
||||
docker-compose -f production.yml build
|
||||
|
||||
Once this is ready, you can run it with::
|
||||
|
||||
docker-compose up
|
||||
docker-compose -f production.yml up
|
||||
|
||||
To run a migration, open up a second terminal and run::
|
||||
|
||||
docker-compose run django python manage.py migrate
|
||||
docker-compose -f production.yml run django python manage.py migrate
|
||||
|
||||
To create a superuser, run::
|
||||
|
||||
docker-compose run django python manage.py createsuperuser
|
||||
docker-compose -f production.yml run django python manage.py createsuperuser
|
||||
|
||||
If you need a shell, run::
|
||||
|
||||
docker-compose run django python manage.py shell
|
||||
docker-compose -f production.yml run django python manage.py shell
|
||||
|
||||
To get an output of all running containers.
|
||||
|
||||
To check your logs, run::
|
||||
|
||||
docker-compose logs
|
||||
docker-compose -f production.yml logs
|
||||
|
||||
If you want to scale your application, run::
|
||||
|
||||
docker-compose scale django=4
|
||||
docker-compose scale celeryworker=2
|
||||
docker-compose -f production.yml scale django=4
|
||||
docker-compose -f production.yml scale celeryworker=2
|
||||
|
||||
.. warning:: Don't run the scale command on postgres, celerybeat, certbot, or nginx.
|
||||
|
||||
If you have errors, you can always check your stack with `docker-compose`. Switch to your projects root directory and run::
|
||||
|
||||
docker-compose ps
|
||||
docker-compose -f production.yml ps
|
||||
|
||||
|
||||
Supervisor Example
|
||||
|
@ -157,12 +166,12 @@ Supervisor Example
|
|||
|
||||
Once you are ready with your initial setup, you want to make sure that your application is run by a process manager to
|
||||
survive reboots and auto restarts in case of an error. You can use the process manager you are most familiar with. All
|
||||
it needs to do is to run `docker-compose up` in your projects root directory.
|
||||
it needs to do is to run `docker-compose -f production.yml up` in your projects root directory.
|
||||
|
||||
If you are using `supervisor`, you can use this file as a starting point::
|
||||
|
||||
[program:{{cookiecutter.project_slug}}]
|
||||
command=docker-compose up
|
||||
command=docker-compose -f production.yml up
|
||||
directory=/path/to/{{cookiecutter.project_slug}}
|
||||
redirect_stderr=true
|
||||
autostart=true
|
||||
|
|
|
@ -16,12 +16,13 @@ If you don't already have it installed, follow the instructions for your OS:
|
|||
- On Mac OS X, you'll need `Docker for Mac`_
|
||||
- On Windows, you'll need `Docker for Windows`_
|
||||
- On Linux, you'll need `docker-engine`_
|
||||
|
||||
.. _`Docker for Mac`: https://docs.docker.com/engine/installation/mac/
|
||||
.. _`Docker for Windows`: https://docs.docker.com/engine/installation/windows/
|
||||
.. _`docker-engine`: https://docs.docker.com/engine/installation/
|
||||
|
||||
Attention Windows users
|
||||
-------------
|
||||
-----------------------
|
||||
|
||||
Currently PostgreSQL (``psycopg2`` python package) is not installed inside Docker containers for Windows users, while it is required by the generated Django project. To fix this, add ``psycopg2`` to the list of requirements inside ``requirements/base.txt``::
|
||||
|
||||
|
@ -36,9 +37,9 @@ Build the Stack
|
|||
This can take a while, especially the first time you run this particular command
|
||||
on your development system::
|
||||
|
||||
$ docker-compose -f dev.yml build
|
||||
$ docker-compose -f local.yml build
|
||||
|
||||
If you want to build the production environment you don't have to pass an argument -f, it will automatically use docker-compose.yml.
|
||||
If you want to build the production environment you don't have to pass an argument -f, it will automatically use production.yml.
|
||||
|
||||
Boot the System
|
||||
---------------
|
||||
|
@ -50,38 +51,38 @@ runs will occur quickly.
|
|||
|
||||
Open a terminal at the project root and run the following for local development::
|
||||
|
||||
$ docker-compose -f dev.yml up
|
||||
$ docker-compose -f local.yml up
|
||||
|
||||
You can also set the environment variable ``COMPOSE_FILE`` pointing to ``dev.yml`` like this::
|
||||
You can also set the environment variable ``COMPOSE_FILE`` pointing to ``local.yml`` like this::
|
||||
|
||||
$ export COMPOSE_FILE=dev.yml
|
||||
$ export COMPOSE_FILE=local.yml
|
||||
|
||||
And then run::
|
||||
|
||||
$ docker-compose up
|
||||
$ docker-compose -f production.yml up
|
||||
|
||||
Running management commands
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
As with any shell command that we wish to run in our container, this is done
|
||||
using the ``docker-compose run`` command.
|
||||
using the ``docker-compose -f production.yml run`` command.
|
||||
|
||||
To migrate your app and to create a superuser, run::
|
||||
|
||||
$ docker-compose -f dev.yml run django python manage.py migrate
|
||||
$ docker-compose -f dev.yml run django python manage.py createsuperuser
|
||||
$ docker-compose -f local.yml run django python manage.py migrate
|
||||
$ docker-compose -f local.yml run django python manage.py createsuperuser
|
||||
|
||||
Here we specify the ``django`` container as the location to run our management commands.
|
||||
|
||||
Add your Docker development server IP
|
||||
------------------------------------
|
||||
-------------------------------------
|
||||
|
||||
When ``DEBUG`` is set to `True`, the host is validated against ``['localhost', '127.0.0.1', '[::1]']``. This is adequate when running a ``virtualenv``. For Docker, in the ``config.settings.local``, add your host development server IP to ``INTERNAL_IPS`` or ``ALLOWED_HOSTS`` if the variable exists.
|
||||
|
||||
Production Mode
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
Instead of using `dev.yml`, you would use `docker-compose.yml`.
|
||||
Instead of using `local.yml`, you would use `production.yml`.
|
||||
|
||||
Other Useful Tips
|
||||
-----------------
|
||||
|
@ -103,7 +104,7 @@ If you want to run the stack in detached mode (in the background), use the ``-d`
|
|||
|
||||
::
|
||||
|
||||
$ docker-compose -f dev.yml up -d
|
||||
$ docker-compose -f local.yml up -d
|
||||
|
||||
Debugging
|
||||
~~~~~~~~~~~~~
|
||||
|
@ -121,13 +122,13 @@ Then you may need to run the following for it to work as desired:
|
|||
|
||||
::
|
||||
|
||||
$ docker-compose run -f dev.yml --service-ports django
|
||||
$ docker-compose -f local.yml run --service-ports django
|
||||
|
||||
|
||||
django-debug-toolbar
|
||||
""""""""""""""""""""
|
||||
|
||||
In order for django-debug-toolbar to work with docker you need to add your docker-machine ip address (the output of `Get the IP ADDRESS`_) to INTERNAL_IPS in local.py
|
||||
In order for django-debug-toolbar to work with docker you need to add your docker-machine ip address to ``INTERNAL_IPS`` in ``local.py``
|
||||
|
||||
|
||||
.. May be a better place to put this, as it is not Docker specific.
|
||||
|
|
|
@ -2,26 +2,26 @@
|
|||
Database Backups with Docker
|
||||
============================
|
||||
|
||||
The database has to be running to create/restore a backup. These examples show local examples. If you want to use it on a remote server, remove ``-f dev.yml`` from each example.
|
||||
The database has to be running to create/restore a backup. These examples show local examples. If you want to use it on a remote server, remove ``-f local.yml`` from each example.
|
||||
|
||||
Running Backups
|
||||
================
|
||||
|
||||
Run the app with `docker-compose -f dev.yml up`.
|
||||
Run the app with `docker-compose -f local.yml up`.
|
||||
|
||||
To create a backup, run::
|
||||
|
||||
docker-compose -f dev.yml run postgres backup
|
||||
docker-compose -f local.yml run postgres backup
|
||||
|
||||
|
||||
To list backups, run::
|
||||
|
||||
docker-compose -f dev.yml run postgres list-backups
|
||||
docker-compose -f local.yml run postgres list-backups
|
||||
|
||||
|
||||
To restore a backup, run::
|
||||
|
||||
docker-compose -f dev.yml run postgres restore filename.sql
|
||||
docker-compose -f local.yml run postgres restore filename.sql
|
||||
|
||||
Where <containerId> is the ID of the Postgres container. To get it, run::
|
||||
|
||||
|
|
|
@ -33,5 +33,4 @@ Indices and tables
|
|||
* :ref:`genindex`
|
||||
* :ref:`search`
|
||||
|
||||
.. At some point it would be good to have a module index of the high level things
|
||||
we are doing. Then we can * :ref:`modindex` back in.
|
||||
.. At some point it would be good to have a module index of the high level things we are doing. Then we can * :ref:`modindex` back in.
|
||||
|
|
|
@ -14,7 +14,7 @@ To run flake8:
|
|||
The config for flake8 is located in setup.cfg. It specifies:
|
||||
|
||||
* Set max line length to 120 chars
|
||||
* Exclude .tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules
|
||||
* Exclude ``.tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules``
|
||||
|
||||
pylint
|
||||
------
|
||||
|
@ -40,4 +40,4 @@ This is included in flake8's checks, but you can also run it separately to see a
|
|||
The config for pep8 is located in setup.cfg. It specifies:
|
||||
|
||||
* Set max line length to 120 chars
|
||||
* Exclude .tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules
|
||||
* Exclude ``.tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules``
|
||||
|
|
|
@ -130,7 +130,7 @@ def remove_docker_files():
|
|||
"""
|
||||
Removes files needed for docker if it isn't going to be used
|
||||
"""
|
||||
for filename in ["dev.yml", "docker-compose.yml", ".dockerignore"]:
|
||||
for filename in ["local.yml", "production.yml", ".dockerignore"]:
|
||||
os.remove(os.path.join(
|
||||
PROJECT_DIRECTORY, filename
|
||||
))
|
||||
|
@ -201,6 +201,16 @@ def remove_elasticbeanstalk():
|
|||
PROJECT_DIRECTORY, filename
|
||||
))
|
||||
|
||||
def remove_open_source_files():
|
||||
"""
|
||||
Removes files conventional to opensource projects only.
|
||||
"""
|
||||
for filename in ["CONTRIBUTORS.txt"]:
|
||||
os.remove(os.path.join(
|
||||
PROJECT_DIRECTORY, filename
|
||||
))
|
||||
|
||||
|
||||
# IN PROGRESS
|
||||
# def copy_doc_files(project_directory):
|
||||
# cookiecutters_dir = DEFAULT_CONFIG['cookiecutters_dir']
|
||||
|
@ -283,3 +293,7 @@ if '{{ cookiecutter.open_source_license}}' != 'GPLv3':
|
|||
# 12. Remove Elastic Beanstalk files
|
||||
if '{{ cookiecutter.use_elasticbeanstalk_experimental }}'.lower() != 'y':
|
||||
remove_elasticbeanstalk()
|
||||
|
||||
# 13. Remove files conventional to opensource projects only.
|
||||
if '{{ cookiecutter.open_source_license }}' == 'Not open source':
|
||||
remove_open_source_files()
|
||||
|
|
|
@ -9,3 +9,23 @@ docker = '{{ cookiecutter.use_docker }}'.lower()
|
|||
|
||||
if elasticbeanstalk == 'y' and (heroku == 'y' or docker == 'y'):
|
||||
raise Exception("Cookiecutter Django's EXPERIMENTAL Elastic Beanstalk support is incompatible with Heroku and Docker setups.")
|
||||
|
||||
if docker == 'n':
|
||||
import sys
|
||||
|
||||
python_major_version = sys.version_info[0]
|
||||
|
||||
if python_major_version == 2:
|
||||
sys.stdout.write("WARNING: Cookiecutter Django does not support Python 2! Stability is guaranteed with Python 3.4+ only. Are you sure you want to proceed? (y/n)")
|
||||
|
||||
yes_options = set(['y'])
|
||||
no_options = set(['n', ''])
|
||||
choice = raw_input().lower()
|
||||
if choice in no_options:
|
||||
sys.exit(1)
|
||||
elif choice in yes_options:
|
||||
pass
|
||||
else:
|
||||
sys.stdout.write("Please respond with %s or %s"
|
||||
% (', '.join([o for o in yes_options if not o == ''])
|
||||
, ', '.join([o for o in no_options if not o == ''])))
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
cookiecutter==1.5.1
|
||||
flake8==3.3.0 # pyup: != 2.6.0
|
||||
sh==1.12.13
|
||||
sh==1.12.14
|
||||
binaryornot==0.4.3
|
||||
|
||||
# Testing
|
||||
pytest==3.0.7
|
||||
pytest==3.1.3
|
||||
pep8==1.7.0
|
||||
pyflakes==1.5.0
|
||||
tox==2.7.0
|
||||
|
|
|
@ -15,7 +15,7 @@ cookiecutter ../../ --no-input --overwrite-if-exists use_docker=y js_task_runner
|
|||
cd project_name
|
||||
|
||||
# run the project's tests
|
||||
docker-compose -f dev.yml run django python manage.py test
|
||||
docker-compose -f local.yml run django python manage.py test
|
||||
|
||||
# return non-zero status code if there are migrations that have not been created
|
||||
docker-compose -f dev.yml run django python manage.py makemigrations --dry-run --check || { echo "ERROR: there were changes in the models, but migration listed above have not been created and are not saved in version control"; exit 1; }
|
||||
docker-compose -f local.yml run django python manage.py makemigrations --dry-run --check || { echo "ERROR: there were changes in the models, but migration listed above have not been created and are not saved in version control"; exit 1; }
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
<env name="DJANGO_SETTINGS_MODULE" value="config.settings.local" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="docker-compose://$PROJECT_DIR$/dev.yml:pycharm/python" />
|
||||
<option name="SDK_HOME" value="docker-compose://[$PROJECT_DIR$/dev.yml]:pycharm/python" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||
<option name="IS_MODULE_SDK" value="false" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
<env name="DJANGO_SETTINGS_MODULE" value="config.settings.local" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="docker-compose://$PROJECT_DIR$/dev.yml:django/python" />
|
||||
<option name="SDK_HOME" value="docker-compose://[$PROJECT_DIR$/dev.yml]:django/python" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||
<option name="IS_MODULE_SDK" value="false" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
<env name="DJANGO_SETTINGS_MODULE" value="config.settings.local" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="docker-compose://$PROJECT_DIR$/dev.yml:django/python" />
|
||||
<option name="SDK_HOME" value="docker-compose://[$PROJECT_DIR$/dev.yml]:django/python" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||
<option name="IS_MODULE_SDK" value="false" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
<env name="DJANGO_SETTINGS_MODULE" value="config.settings.test" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="docker-compose://$PROJECT_DIR$/dev.yml:pycharm/python" />
|
||||
<option name="SDK_HOME" value="docker-compose://[$PROJECT_DIR$/dev.yml]:pycharm/python" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
<env name="DJANGO_SETTINGS_MODULE" value="config.settings.test" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="docker-compose://$PROJECT_DIR$/dev.yml:pycharm/python" />
|
||||
<option name="SDK_HOME" value="docker-compose://[$PROJECT_DIR$/dev.yml]:pycharm/python" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
<env name="DJANGO_SETTINGS_MODULE" value="config.settings.test" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="docker-compose://$PROJECT_DIR$/dev.yml:pycharm/python" />
|
||||
<option name="SDK_HOME" value="docker-compose://[$PROJECT_DIR$/dev.yml]:pycharm/python" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
<env name="DJANGO_SETTINGS_MODULE" value="config.settings.test" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="docker-compose://$PROJECT_DIR$/dev.yml:pycharm/python" />
|
||||
<option name="SDK_HOME" value="docker-compose://[$PROJECT_DIR$/dev.yml]:pycharm/python" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
<env name="DJANGO_SETTINGS_MODULE" value="config.settings.test" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="docker-compose://$PROJECT_DIR$/dev.yml:pycharm/python" />
|
||||
<option name="SDK_HOME" value="docker-compose://[$PROJECT_DIR$/dev.yml]:pycharm/python" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
|
|
|
@ -60,6 +60,9 @@ module.exports = function (grunt) {
|
|||
dev: {
|
||||
options: {
|
||||
outputStyle: 'nested',
|
||||
{% if cookiecutter.custom_bootstrap_compilation == 'y' %}
|
||||
includePaths: ['bower_components/bootstrap-sass/assets/stylesheets/bootstrap/'],
|
||||
{% endif %}
|
||||
sourceMap: false,
|
||||
precision: 10
|
||||
},
|
||||
|
@ -70,6 +73,9 @@ module.exports = function (grunt) {
|
|||
dist: {
|
||||
options: {
|
||||
outputStyle: 'compressed',
|
||||
{% if cookiecutter.custom_bootstrap_compilation == 'y' %}
|
||||
includePaths: ['bower_components/bootstrap-sass/assets/stylesheets/bootstrap/'],
|
||||
{% endif %}
|
||||
sourceMap: false,
|
||||
precision: 10
|
||||
},
|
||||
|
|
|
@ -145,3 +145,12 @@ See detailed `cookiecutter-django Elastic Beanstalk documentation`_.
|
|||
.. _`cookiecutter-django Docker documentation`: http://cookiecutter-django.readthedocs.io/en/latest/deployment-with-elastic-beanstalk.html
|
||||
|
||||
{% endif %}
|
||||
{% if cookiecutter.custom_bootstrap_compilation == "y" %}
|
||||
Custom Bootstrap Compilation
|
||||
^^^^^^
|
||||
|
||||
To get automatic Bootstrap recompilation with variables of your choice, install bootstrap sass (`bower install bootstrap-sass`) and tweak your variables in `static/sass/custom_bootstrap_vars`.
|
||||
|
||||
(You can find a list of available variables [in the bootstrap-sass source](https://github.com/twbs/bootstrap-sass/blob/master/assets/stylesheets/bootstrap/_variables.scss), or get explanations on them in the [Bootstrap docs](https://getbootstrap.com/customize/).)
|
||||
|
||||
{% endif %}
|
||||
|
|
|
@ -1,18 +1,16 @@
|
|||
FROM python:3.5
|
||||
|
||||
ENV PYTHONUNBUFFERED 1
|
||||
|
||||
RUN groupadd -r django \
|
||||
&& useradd -r -g django django
|
||||
|
||||
# Requirements have to be pulled and installed here, otherwise caching won't work
|
||||
COPY ./requirements /requirements
|
||||
RUN pip install --no-cache-dir -r /requirements/production.txt \
|
||||
&& rm -rf /requirements
|
||||
|
||||
RUN pip install -r /requirements/production.txt \
|
||||
&& groupadd -r django \
|
||||
&& useradd -r -g django django
|
||||
|
||||
COPY . /app
|
||||
RUN chown -R django /app
|
||||
|
||||
COPY ./compose/django/gunicorn.sh /gunicorn.sh
|
||||
COPY ./compose/django/entrypoint.sh /entrypoint.sh
|
||||
COPY ./compose/django/gunicorn.sh ./compose/django/entrypoint.sh /
|
||||
RUN sed -i 's/\r//' /entrypoint.sh \
|
||||
&& sed -i 's/\r//' /gunicorn.sh \
|
||||
&& chmod +x /entrypoint.sh \
|
||||
|
@ -20,6 +18,12 @@ RUN sed -i 's/\r//' /entrypoint.sh \
|
|||
&& chmod +x /gunicorn.sh \
|
||||
&& chown django /gunicorn.sh
|
||||
|
||||
COPY . /app
|
||||
|
||||
RUN chown -R django /app
|
||||
|
||||
USER django
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
|
|
|
@ -2,6 +2,9 @@ FROM nginx:latest
|
|||
ADD nginx.conf /etc/nginx/nginx.conf
|
||||
|
||||
{% if cookiecutter.use_lets_encrypt == 'y' and cookiecutter.use_docker == 'y' %}
|
||||
# installs the `ps` command in the nginx image
|
||||
RUN apt-get update && apt-get install -y procps
|
||||
|
||||
ADD start.sh /start.sh
|
||||
ADD nginx-secure.conf /etc/nginx/nginx-secure.conf
|
||||
ADD dhparams.pem /etc/ssl/private/dhparams.pem
|
||||
|
|
|
@ -83,6 +83,8 @@ http {
|
|||
|
||||
# cookiecutter-django app
|
||||
location @proxy_to_app {
|
||||
proxy_set_header X-Forwarded-Proto https;
|
||||
proxy_set_header X-Url-Scheme $scheme;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_redirect off;
|
||||
|
|
|
@ -17,10 +17,10 @@ export PGPASSWORD=$POSTGRES_PASSWORD
|
|||
# check that we have an argument for a filename candidate
|
||||
if [[ $# -eq 0 ]] ; then
|
||||
echo 'usage:'
|
||||
echo ' docker-compose run postgres restore <backup-file>'
|
||||
echo ' docker-compose -f production.yml run postgres restore <backup-file>'
|
||||
echo ''
|
||||
echo 'to get a list of available backups, run:'
|
||||
echo ' docker-compose run postgres list-backups'
|
||||
echo ' docker-compose -f production.yml run postgres list-backups'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
@ -31,7 +31,7 @@ BACKUPFILE=/backups/$1
|
|||
if ! [ -f $BACKUPFILE ]; then
|
||||
echo "backup file not found"
|
||||
echo 'to get a list of available backups, run:'
|
||||
echo ' docker-compose run postgres list-backups'
|
||||
echo ' docker-compose -f production.yml run postgres list-backups'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
|
|
@ -267,11 +267,11 @@ AUTOSLUG_SLUGIFY_FUNCTION = 'slugify.slugify'
|
|||
{% if cookiecutter.use_celery == 'y' %}
|
||||
########## CELERY
|
||||
INSTALLED_APPS += ['{{cookiecutter.project_slug}}.taskapp.celery.CeleryConfig']
|
||||
BROKER_URL = env('CELERY_BROKER_URL', default='django://')
|
||||
if BROKER_URL == 'django://':
|
||||
CELERY_BROKER_URL = env('CELERY_BROKER_URL', default='django://')
|
||||
if CELERY_BROKER_URL == 'django://':
|
||||
CELERY_RESULT_BACKEND = 'redis://'
|
||||
else:
|
||||
CELERY_RESULT_BACKEND = BROKER_URL
|
||||
CELERY_RESULT_BACKEND = CELERY_BROKER_URL
|
||||
########## END CELERY
|
||||
{% endif %}
|
||||
|
||||
|
|
|
@ -4,6 +4,8 @@ Local settings
|
|||
- Run in Debug mode
|
||||
{% if cookiecutter.use_mailhog == 'y' and cookiecutter.use_docker == 'y' %}
|
||||
- Use mailhog for emails
|
||||
{% elif cookiecutter.use_mailhog == 'y' and cookiecutter.use_docker == 'n' %}
|
||||
- Use mailhog for emails
|
||||
{% else %}
|
||||
- Use console backend for emails
|
||||
{% endif %}
|
||||
|
@ -30,6 +32,8 @@ SECRET_KEY = env('DJANGO_SECRET_KEY', default='CHANGEME!!!')
|
|||
EMAIL_PORT = 1025
|
||||
{% if cookiecutter.use_mailhog == 'y' and cookiecutter.use_docker == 'y' %}
|
||||
EMAIL_HOST = env('EMAIL_HOST', default='mailhog')
|
||||
{% elif cookiecutter.use_mailhog == 'y' and cookiecutter.use_docker == 'n' %}
|
||||
EMAIL_HOST = 'localhost'
|
||||
{% else %}
|
||||
EMAIL_HOST = 'localhost'
|
||||
EMAIL_BACKEND = env('DJANGO_EMAIL_BACKEND',
|
||||
|
|
|
@ -29,7 +29,7 @@ The Docker compose tool (previously known as `fig`_) makes linking these contain
|
|||
webserver/
|
||||
Dockerfile
|
||||
...
|
||||
docker-compose.yml
|
||||
production.yml
|
||||
|
||||
Each component of your application would get its own `Dockerfile`_. The rest of this example assumes you are using the `base postgres image`_ for your database. Your database settings in `config/base.py` might then look something like:
|
||||
|
||||
|
@ -48,7 +48,7 @@ Each component of your application would get its own `Dockerfile`_. The rest of
|
|||
}
|
||||
}
|
||||
|
||||
The `Docker compose documentation`_ explains in detail what you can accomplish in the `docker-compose.yml` file, but an example configuration might look like this:
|
||||
The `Docker compose documentation`_ explains in detail what you can accomplish in the `production.yml` file, but an example configuration might look like this:
|
||||
|
||||
.. _Docker compose documentation: https://docs.docker.com/compose/#compose-documentation
|
||||
|
||||
|
@ -107,9 +107,9 @@ We'll ignore the webserver for now (you'll want to comment that part out while w
|
|||
# uncomment the line below to use container as a non-root user
|
||||
USER python:python
|
||||
|
||||
Running `sudo docker-compose build` will follow the instructions in your `docker-compose.yml` file and build the database container, then your webapp, before mounting your cookiecutter project files as a volume in the webapp container and linking to the database. Our example yaml file runs in development mode but changing it to production mode is as simple as commenting out the line using `runserver` and uncommenting the line using `gunicorn`.
|
||||
Running `sudo docker-compose -f production.yml build` will follow the instructions in your `production.yml` file and build the database container, then your webapp, before mounting your cookiecutter project files as a volume in the webapp container and linking to the database. Our example yaml file runs in development mode but changing it to production mode is as simple as commenting out the line using `runserver` and uncommenting the line using `gunicorn`.
|
||||
|
||||
Both are set to run on port `0.0.0.0:8000`, which is where the Docker daemon will discover it. You can now run `sudo docker-compose up` and browse to `localhost:8000` to see your application running.
|
||||
Both are set to run on port `0.0.0.0:8000`, which is where the Docker daemon will discover it. You can now run `sudo docker-compose -f production.yml up` and browse to `localhost:8000` to see your application running.
|
||||
|
||||
Deployment
|
||||
^^^^^^^^^^
|
||||
|
@ -155,7 +155,7 @@ That Dockerfile assumes you have an Nginx conf file named `site.conf` in the sam
|
|||
}
|
||||
}
|
||||
|
||||
Running `sudo docker-compose build webserver` will build your server container. Running `sudo docker-compose up` will now expose your application directly on `localhost` (no need to specify the port number).
|
||||
Running `sudo docker-compose -f production.yml build webserver` will build your server container. Running `sudo docker-compose -f production.yml up` will now expose your application directly on `localhost` (no need to specify the port number).
|
||||
|
||||
Building and running your app on EC2
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
@ -166,9 +166,9 @@ All you now need to do to run your app in production is:
|
|||
|
||||
* Install your preferred source control solution, Docker and Docker compose on the news instance.
|
||||
|
||||
* Pull in your code from source control. The root directory should be the one with your `docker-compose.yml` file in it.
|
||||
* Pull in your code from source control. The root directory should be the one with your `production.yml` file in it.
|
||||
|
||||
* Run `sudo docker-compose build` and `sudo docker-compose up`.
|
||||
* Run `sudo docker-compose -f production.yml build` and `sudo docker-compose -f production.yml up`.
|
||||
|
||||
* Assign an `Elastic IP address`_ to your new machine.
|
||||
|
||||
|
|
|
@ -21,11 +21,11 @@ Next, you have to add new remote python interpreter, based on already tested dep
|
|||
|
||||
.. image:: images/3.png
|
||||
|
||||
Switch to *Docker Compose* and select `dev.yml` file from directory of your project, next set *Service name* to `django`
|
||||
Switch to *Docker Compose* and select `local.yml` file from directory of your project, next set *Service name* to `django`
|
||||
|
||||
.. image:: images/4.png
|
||||
|
||||
Because Pycharm restarts container every time you use Configuration Run, to not have server restarted during running tests, we defined second service in `dev.yml` file called pycharm. To use it, you have to add interpreter of second service as well.
|
||||
Because Pycharm restarts container every time you use Configuration Run, to not have server restarted during running tests, we defined second service in `local.yml` file called pycharm. To use it, you have to add interpreter of second service as well.
|
||||
|
||||
.. image:: images/5.png
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ var gulp = require('gulp'),
|
|||
pixrem = require('gulp-pixrem'),
|
||||
uglify = require('gulp-uglify'),
|
||||
imagemin = require('gulp-imagemin'),
|
||||
exec = require('child_process').exec,
|
||||
spawn = require('child_process').spawn,
|
||||
runSequence = require('run-sequence'),
|
||||
browserSync = require('browser-sync').create(),
|
||||
reload = browserSync.reload;
|
||||
|
@ -45,7 +45,7 @@ var paths = pathsConfig();
|
|||
|
||||
// Styles autoprefixing and minification
|
||||
gulp.task('styles', function() {
|
||||
return gulp.src(paths.sass + '/project.scss')
|
||||
return gulp.src(paths.sass + '/*.scss')
|
||||
.pipe(sass().on('error', sass.logError))
|
||||
.pipe(plumber()) // Checks for errors
|
||||
.pipe(autoprefixer({browsers: ['last 2 versions']})) // Adds vendor prefixes
|
||||
|
@ -73,10 +73,11 @@ gulp.task('imgCompression', function(){
|
|||
});
|
||||
|
||||
// Run django server
|
||||
gulp.task('runServer', function() {
|
||||
exec('python manage.py runserver', function (err, stdout, stderr) {
|
||||
console.log(stdout);
|
||||
console.log(stderr);
|
||||
gulp.task('runServer', function(cb) {
|
||||
var cmd = spawn('python', ['manage.py', 'runserver'], {stdio: 'inherit'});
|
||||
cmd.on('close', function(code) {
|
||||
console.log('runServer exited with code ' + code);
|
||||
cb(code);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ services:
|
|||
|
||||
{% if cookiecutter.use_mailhog == 'y' %}
|
||||
mailhog:
|
||||
image: mailhog/mailhog
|
||||
image: mailhog/mailhog:v1.0.0
|
||||
ports:
|
||||
- "8025:8025"
|
||||
{% endif %}
|
|
@ -16,7 +16,6 @@ services:
|
|||
build:
|
||||
context: .
|
||||
dockerfile: ./compose/django/Dockerfile
|
||||
user: django
|
||||
depends_on:
|
||||
- postgres
|
||||
- redis
|
||||
|
@ -29,14 +28,12 @@ services:
|
|||
- django
|
||||
{% if cookiecutter.use_lets_encrypt == 'y' %}
|
||||
- certbot
|
||||
environment:
|
||||
- MY_DOMAIN_NAME={{ cookiecutter.domain_name }}
|
||||
{% endif %}
|
||||
ports:
|
||||
- "0.0.0.0:80:80"
|
||||
{% if cookiecutter.use_lets_encrypt == 'y' %}
|
||||
environment:
|
||||
- MY_DOMAIN_NAME={{ cookiecutter.domain_name }}
|
||||
ports:
|
||||
- "0.0.0.0:80:80"
|
||||
- "0.0.0.0:443:443"
|
||||
volumes:
|
||||
- /etc/letsencrypt:/etc/letsencrypt
|
||||
|
@ -44,7 +41,7 @@ services:
|
|||
|
||||
certbot:
|
||||
image: quay.io/letsencrypt/letsencrypt
|
||||
command: bash -c "sleep 6 && certbot certonly -n --standalone -d {{ cookiecutter.domain_name }} --text --agree-tos --email {{ cookiecutter.email }} --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --verbose --keep-until-expiring --standalone-supported-challenges http-01"
|
||||
command: bash -c "sleep 6 && certbot certonly -n --standalone -d {{ cookiecutter.domain_name }} --test --agree-tos --email {{ cookiecutter.email }} --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --verbose --keep-until-expiring --preferred-challenges http-01"
|
||||
entrypoint: ""
|
||||
volumes:
|
||||
- /etc/letsencrypt:/etc/letsencrypt
|
||||
|
@ -63,7 +60,6 @@ services:
|
|||
build:
|
||||
context: .
|
||||
dockerfile: ./compose/django/Dockerfile
|
||||
user: django
|
||||
env_file: .env
|
||||
depends_on:
|
||||
- postgres
|
||||
|
@ -74,7 +70,6 @@ services:
|
|||
build:
|
||||
context: .
|
||||
dockerfile: ./compose/django/Dockerfile
|
||||
user: django
|
||||
env_file: .env
|
||||
depends_on:
|
||||
- postgres
|
|
@ -23,14 +23,14 @@ django-crispy-forms==1.6.1
|
|||
django-model-utils==3.0.0
|
||||
|
||||
# Images
|
||||
Pillow==4.1.0
|
||||
Pillow==4.2.1
|
||||
|
||||
# Password storage
|
||||
argon2-cffi==16.3.0
|
||||
|
||||
# For user registration, either via email or social
|
||||
# Well-built with regular release cycles!
|
||||
django-allauth==0.31.0
|
||||
django-allauth==0.32.0
|
||||
|
||||
{% if cookiecutter.windows == 'y' -%}
|
||||
# On Windows, you must download/install psycopg2 manually
|
||||
|
@ -47,11 +47,11 @@ awesome-slugify==1.6.5
|
|||
pytz==2017.2
|
||||
|
||||
# Redis support
|
||||
django-redis==4.7.0
|
||||
django-redis==4.8.0
|
||||
redis>=2.10.5
|
||||
|
||||
{% if cookiecutter.use_celery == "y" %}
|
||||
celery==4.0.2
|
||||
celery==3.1.25
|
||||
{% endif %}
|
||||
|
||||
{% if cookiecutter.use_compressor == "y" %}
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
# Local development dependencies go here
|
||||
-r base.txt
|
||||
|
||||
coverage==4.3.4
|
||||
coverage==4.4.1
|
||||
django-coverage-plugin==1.5.0
|
||||
|
||||
Sphinx==1.5.5
|
||||
django-extensions==1.7.8
|
||||
Werkzeug==0.12.1
|
||||
django-test-plus==1.0.17
|
||||
Sphinx==1.6.3
|
||||
django-extensions==1.8.1
|
||||
Werkzeug==0.12.2
|
||||
django-test-plus==1.0.18
|
||||
factory-boy==2.8.1
|
||||
|
||||
django-debug-toolbar==1.7
|
||||
django-debug-toolbar==1.8
|
||||
|
||||
# improved REPL
|
||||
ipdb==0.10.2
|
||||
ipdb==0.10.3
|
||||
|
||||
pytest-django==3.1.2
|
||||
pytest-sugar==0.8.0
|
||||
|
|
|
@ -11,25 +11,25 @@ psycopg2==2.7.1
|
|||
|
||||
# WSGI Handler
|
||||
# ------------------------------------------------
|
||||
gevent==1.2.1
|
||||
gevent==1.2.2
|
||||
gunicorn==19.7.1
|
||||
|
||||
# Static and Media Storage
|
||||
# ------------------------------------------------
|
||||
boto==2.46.1
|
||||
django-storages-redux==1.3.2
|
||||
boto==2.48.0
|
||||
django-storages-redux==1.3.3
|
||||
{% if cookiecutter.use_whitenoise != 'y' -%}
|
||||
Collectfast==0.5.2
|
||||
{%- endif %}
|
||||
|
||||
# Email backends for Mailgun, Postmark, SendGrid and more
|
||||
# -------------------------------------------------------
|
||||
django-anymail==0.9
|
||||
django-anymail==0.11
|
||||
|
||||
{% if cookiecutter.use_sentry_for_error_reporting == "y" -%}
|
||||
# Raven is the Sentry client
|
||||
# --------------------------
|
||||
raven==6.0.0
|
||||
raven==6.1.0
|
||||
{%- endif %}
|
||||
|
||||
{% if cookiecutter.use_opbeat == "y" -%}
|
||||
|
|
|
@ -7,9 +7,9 @@
|
|||
psycopg2==2.7.1
|
||||
{%- endif %}
|
||||
|
||||
coverage==4.3.4
|
||||
coverage==4.4.1
|
||||
flake8==3.3.0 # pyup: != 2.6.0
|
||||
django-test-plus==1.0.17
|
||||
django-test-plus==1.0.18
|
||||
factory-boy==2.8.1
|
||||
|
||||
# pytest
|
||||
|
|
|
@ -1 +1 @@
|
|||
python-3.5.3
|
||||
python-3.6.2
|
||||
|
|
|
@ -2,6 +2,6 @@
|
|||
max-line-length = 120
|
||||
exclude = .tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules
|
||||
|
||||
[pep8]
|
||||
[pycodestyle]
|
||||
max-line-length = 120
|
||||
exclude=.tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules
|
||||
|
|
|
@ -1,3 +1,57 @@
|
|||
{% if cookiecutter.custom_bootstrap_compilation == 'y' %}
|
||||
@import "variables";
|
||||
@import "custom_bootstrap_vars";
|
||||
@import "mixins";
|
||||
|
||||
// Reset and dependencies
|
||||
@import "normalize";
|
||||
@import "print";
|
||||
@import "glyphicons";
|
||||
|
||||
// Core CSS
|
||||
@import "scaffolding";
|
||||
@import "type";
|
||||
@import "code";
|
||||
@import "grid";
|
||||
@import "tables";
|
||||
@import "forms";
|
||||
@import "buttons";
|
||||
|
||||
// Components
|
||||
@import "component-animations";
|
||||
@import "dropdowns";
|
||||
@import "button-groups";
|
||||
@import "input-groups";
|
||||
@import "navs";
|
||||
@import "navbar";
|
||||
@import "breadcrumbs";
|
||||
@import "pagination";
|
||||
@import "pager";
|
||||
@import "labels";
|
||||
@import "badges";
|
||||
@import "jumbotron";
|
||||
@import "thumbnails";
|
||||
@import "alerts";
|
||||
@import "progress-bars";
|
||||
@import "media";
|
||||
@import "list-group";
|
||||
@import "panels";
|
||||
@import "responsive-embed";
|
||||
@import "wells";
|
||||
@import "close";
|
||||
|
||||
// Components w/ JavaScript
|
||||
@import "modals";
|
||||
@import "tooltip";
|
||||
@import "popovers";
|
||||
@import "carousel";
|
||||
|
||||
// Utility classes
|
||||
@import "utilities";
|
||||
@import "responsive-utilities";
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
// project specific CSS goes here
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user