Merge branch 'master' into adopt-a-better-approach-to-env-variable-handing-with-docker

This commit is contained in:
Nikita P. Shupeyko 2017-09-14 21:02:06 +03:00
commit f200a808a3
30 changed files with 190 additions and 118 deletions

View File

@ -53,6 +53,7 @@ Listed in alphabetical order.
Andy Rose
Anna Callahan `@jazztpt`_
Antonia Blair `@antoniablair`_ @antoniablairart
Arcuri Davide `@dadokkio`_
Areski Belaid `@areski`_
Ashley Camba
Barclay Gauld `@yunti`_

View File

@ -4,8 +4,8 @@ sh==1.12.14
binaryornot==0.4.4
# Testing
pytest==3.2.1
pytest==3.2.2
pep8==1.7.0
pyflakes==1.6.0
tox==2.8.0
tox==2.8.2
pytest-cookies==0.2.0

View File

@ -342,3 +342,9 @@ mailhog
{% endif %}
{{ cookiecutter.project_slug }}/media/
{% if cookiecutter.use_docker == 'y' -%}
# Added to maintain local compose files which are ignored by something above.
# See issue https://github.com/pydanny/cookiecutter-django/issues/1321
!/compose/local/
{% endif %}

View File

@ -1,2 +0,0 @@
FROM abiosoft/caddy:0.10.6
COPY Caddyfile /etc/Caddyfile

View File

@ -1,29 +0,0 @@
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
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 \
&& chown django /entrypoint.sh \
&& chmod +x /gunicorn.sh \
&& chown django /gunicorn.sh
COPY . /app
RUN chown -R django /app
USER django
WORKDIR /app
ENTRYPOINT ["/entrypoint.sh"]

View File

@ -1,26 +0,0 @@
FROM python:3.5
ENV PYTHONUNBUFFERED 1
# Requirements have to be pulled and installed here, otherwise caching won't work
COPY ./requirements /requirements
RUN pip install -r /requirements/local.txt
COPY ./compose/django/entrypoint.sh /entrypoint.sh
RUN sed -i 's/\r//' /entrypoint.sh
RUN chmod +x /entrypoint.sh
COPY ./compose/django/start-dev.sh /start-dev.sh
RUN sed -i 's/\r//' /start-dev.sh
RUN chmod +x /start-dev.sh
COPY ./compose/django/celery/worker/start-dev.sh /start-celeryworker-dev.sh
RUN sed -i 's/\r//' /start-celeryworker-dev.sh
RUN chmod +x /start-celeryworker-dev.sh
COPY ./compose/django/celery/beat/start-dev.sh /start-celerybeat-dev.sh
RUN sed -i 's/\r//' /start-celerybeat-dev.sh
RUN chmod +x /start-celerybeat-dev.sh
WORKDIR /app
ENTRYPOINT ["/entrypoint.sh"]

View File

@ -1,3 +0,0 @@
#!/bin/sh
python manage.py migrate
python manage.py runserver_plus 0.0.0.0:8000

View File

@ -0,0 +1,27 @@
FROM python:3.5
ENV PYTHONUNBUFFERED 1
# Requirements have to be pulled and installed here, otherwise caching won't work
COPY ./requirements /requirements
RUN pip install -r /requirements/local.txt
COPY ./compose/production/django/entrypoint.sh /entrypoint.sh
RUN sed -i 's/\r//' /entrypoint.sh
RUN chmod +x /entrypoint.sh
COPY ./compose/local/django/start.sh /start.sh
RUN sed -i 's/\r//' /start.sh
RUN chmod +x /start.sh
COPY ./compose/local/django/celery/worker/start.sh /start-celeryworker.sh
RUN sed -i 's/\r//' /start-celeryworker.sh
RUN chmod +x /start-celeryworker.sh
COPY ./compose/local/django/celery/beat/start.sh /start-celerybeat.sh
RUN sed -i 's/\r//' /start-celerybeat.sh
RUN chmod +x /start-celerybeat.sh
WORKDIR /app
ENTRYPOINT ["/entrypoint.sh"]

View File

@ -1,8 +1,10 @@
#!/bin/sh
#!/usr/bin/env bash
set -o errexit
set -o pipefail
set -o nounset
set -o xtrace
rm -f './celerybeat.pid'
celery -A {{cookiecutter.project_slug}}.taskapp beat -l INFO

View File

@ -1,7 +1,9 @@
#!/bin/sh
#!/usr/bin/env bash
set -o errexit
set -o pipefail
set -o nounset
set -o xtrace
celery -A {{cookiecutter.project_slug}}.taskapp worker -l INFO

View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
set -o errexit
set -o pipefail
set -o nounset
set -o xtrace
python manage.py migrate
python manage.py runserver_plus 0.0.0.0:8000

View File

@ -1,11 +0,0 @@
FROM postgres:{{ cookiecutter.postgresql_version }}
# add backup scripts
ADD backup.sh /usr/local/bin/backup
ADD restore.sh /usr/local/bin/restore
ADD list-backups.sh /usr/local/bin/list-backups
# make them executable
RUN chmod +x /usr/local/bin/restore
RUN chmod +x /usr/local/bin/list-backups
RUN chmod +x /usr/local/bin/backup

View File

@ -0,0 +1,3 @@
FROM abiosoft/caddy:0.10.6
COPY ./compose/production/caddy/Caddyfile /etc/Caddyfile

View File

@ -0,0 +1,39 @@
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
COPY ./compose/production/django/gunicorn.sh /gunicorn.sh
RUN sed -i 's/\r//' /gunicorn.sh
RUN chmod +x /gunicorn.sh
RUN chown django /gunicorn.sh
COPY ./compose/production/django/entrypoint.sh /entrypoint.sh
RUN sed -i 's/\r//' /entrypoint.sh
RUN chmod +x /entrypoint.sh
RUN chown django /entrypoint.sh
COPY ./compose/production/django/celery/worker/start.sh /start-celeryworker.sh
RUN sed -i 's/\r//' /start-celeryworker.sh
RUN chmod +x /start-celeryworker.sh
COPY ./compose/production/django/celery/beat/start.sh /start-celerybeat.sh
RUN sed -i 's/\r//' /start-celerybeat.sh
RUN chmod +x /start-celerybeat.sh
COPY . /app
RUN chown -R django /app
USER django
WORKDIR /app
ENTRYPOINT ["/entrypoint.sh"]

View File

@ -0,0 +1,8 @@
#!/usr/bin/env bash
set -o errexit
set -o pipefail
set -o nounset
celery -A {{cookiecutter.project_slug}}.taskapp beat -l INFO

View File

@ -0,0 +1,8 @@
#!/usr/bin/env bash
set -o errexit
set -o pipefail
set -o nounset
celery -A {{cookiecutter.project_slug}}.taskapp worker -l INFO

View File

@ -1,5 +1,12 @@
#!/bin/bash
set -e
#!/usr/bin/env bash
set -o errexit
set -o pipefail
# todo: turn on after #1295
# set -o nounset
cmd="$@"
# This entrypoint is used to play nicely with the current cookiecutter configuration.

View File

@ -1,3 +1,9 @@
#!/bin/sh
#!/usr/bin/env bash
set -o errexit
set -o pipefail
set -o nounset
python /app/manage.py collectstatic --noinput
/usr/local/bin/gunicorn config.wsgi -w 4 -b 0.0.0.0:5000 --chdir=/app
/usr/local/bin/gunicorn config.wsgi -w 4 -b 0.0.0.0:5000 --chdir=/app

View File

@ -0,0 +1,10 @@
FROM postgres:{{ cookiecutter.postgresql_version }}
COPY ./compose/production/postgres/backup.sh /usr/local/bin/backup
RUN chmod +x /usr/local/bin/backup
COPY ./compose/production/postgres/restore.sh /usr/local/bin/restore
RUN chmod +x /usr/local/bin/restore
COPY ./compose/production/postgres/list-backups.sh /usr/local/bin/list-backups
RUN chmod +x /usr/local/bin/list-backups

View File

@ -1,6 +1,9 @@
#!/bin/bash
# stop on errors
set -e
#!/usr/bin/env bash
set -o errexit
set -o pipefail
set -o nounset
# we might run into trouble when using the default `postgres` user, e.g. when dropping the postgres
# database in restore.sh. Check that something else is used here

View File

@ -1,4 +1,10 @@
#!/bin/bash
#!/usr/bin/env bash
set -o errexit
set -o pipefail
set -o nounset
echo "listing available backups"
echo "-------------------------"
ls /backups/

View File

@ -1,7 +1,9 @@
#!/bin/bash
#!/usr/bin/env bash
set -o errexit
set -o pipefail
set -o nounset
# stop on errors
set -e
# we might run into trouble when using the default `postgres` user, e.g. when dropping the postgres
# database in restore.sh. Check that something else is used here

View File

@ -1,14 +1,14 @@
version: '2'
volumes:
postgres_data_dev: {}
postgres_backup_dev: {}
postgres_data_local: {}
postgres_backup_local: {}
services:
django: &django
django:{% if cookiecutter.use_celery == 'y' %} &django{% endif %}
build:
context: .
dockerfile: ./compose/django/Dockerfile-local
dockerfile: ./compose/local/django/Dockerfile
depends_on:
- postgres{% if cookiecutter.use_mailhog == 'y' %}
- mailhog{% endif %}
@ -19,13 +19,15 @@ services:
- ./.envs/.local/.postgres
ports:
- "8000:8000"
command: /start-dev.sh
command: /start.sh
postgres:
build: ./compose/postgres
build:
context: .
dockerfile: ./compose/production/postgres/Dockerfile
volumes:
- postgres_data_dev:/var/lib/postgresql/data
- postgres_backup_dev:/backups
- postgres_data_local:/var/lib/postgresql/data
- postgres_backup_local:/backups
env_file:
- ./.envs/.local/.postgres
{% if cookiecutter.use_mailhog == 'y' %}
@ -46,7 +48,7 @@ services:
- postgres{% if cookiecutter.use_mailhog == 'y' %}
- mailhog{% endif %}
ports: []
command: /start-celeryworker-dev.sh
command: /start-celeryworker.sh
celerybeat:
# https://github.com/docker/compose/issues/3220
@ -56,5 +58,5 @@ services:
- postgres{% if cookiecutter.use_mailhog == 'y' %}
- mailhog{% endif %}
ports: []
command: /start-celerybeat-dev.sh
command: /start-celerybeat.sh
{% endif %}

View File

@ -6,10 +6,10 @@ volumes:
caddy: {}
services:
django:
django:{% if cookiecutter.use_celery == 'y' %} &django{% endif %}
build:
context: .
dockerfile: ./compose/django/Dockerfile
dockerfile: ./compose/production/django/Dockerfile
depends_on:
- postgres
- redis
@ -19,7 +19,9 @@ services:
command: /gunicorn.sh
postgres:
build: ./compose/postgres
build:
context: .
dockerfile: ./compose/production/postgres/Dockerfile
volumes:
- postgres_data:/var/lib/postgresql/data
- postgres_backup:/backups
@ -27,7 +29,9 @@ services:
- ./.envs/.production/.postgres
caddy:
build: ./compose/caddy
build:
context: .
dockerfile: ./compose/production/caddy/Dockerfile
depends_on:
- django
volumes:
@ -42,26 +46,22 @@ services:
image: redis:3.0
{% if cookiecutter.use_celery == 'y' %}
celeryworker:
build:
context: .
dockerfile: ./compose/django/Dockerfile
<<: *django
depends_on:
- postgres
- redis
env_file:
- ./.envs/.production/.django
- ./.envs/.production/.postgres
command: celery -A {{cookiecutter.project_slug}}.taskapp worker -l INFO
command: /start-celeryworker.sh
celerybeat:
build:
context: .
dockerfile: ./compose/django/Dockerfile
<<: *django
depends_on:
- postgres
- redis
env_file:
- ./.envs/.production/.django
- ./.envs/.production/.postgres
command: celery -A {{cookiecutter.project_slug}}.taskapp beat -l INFO
command: /start-celerybeat.sh
{% endif %}

View File

@ -2,11 +2,11 @@
# like Pillow and psycopg2
# See http://bitly.com/wheel-building-fails-CPython-35
# Verified bug on Python 3.5.1
wheel==0.29.0
wheel==0.30.0
# Bleeding edge Django
django==1.10.7 # pyup: >=1.10,<1.11
django==1.10.8 # pyup: >=1.10,<1.11
# Configuration
django-environ==0.4.4

View File

@ -5,7 +5,7 @@ coverage==4.4.1
django-coverage-plugin==1.5.0
Sphinx==1.6.3
django-extensions==1.9.0
django-extensions==1.9.1
Werkzeug==0.12.2
django-test-plus==1.0.18
factory-boy==2.9.2

View File

@ -4,8 +4,8 @@
{% if cookiecutter.windows == 'y' -%}
# Python-PostgreSQL Database Adapter
# If using Win for dev, this assumes Unix in prod
# ------------------------------------------------
# Assuming Windows is used locally, and *nix -- in production.
# ------------------------------------------------------------
psycopg2==2.7.3.1
{%- endif %}

View File

@ -11,6 +11,7 @@ coverage==4.4.1
flake8==3.4.1 # pyup: != 2.6.0
django-test-plus==1.0.18
factory-boy==2.9.2
django-coverage-plugin==1.5.0
# pytest
pytest-django==3.1.2

View File

@ -15,7 +15,7 @@
{% block css %}
<!-- Latest compiled and minified Bootstrap 4 Alpha 4 CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
<!-- Your stuff: Third-party CSS libraries go here -->
{% endraw %}{% if cookiecutter.use_compressor == "y" %}{% raw %}{% compress css %}{% endraw %}{% endif %}{% raw %}
@ -29,7 +29,7 @@
<body>
<div class="m-b-1">
<nav class="navbar navbar-toggleable-md navbar-light bg-faded">
<nav class="navbar navbar-expand-md navbar-light bg-light">
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
@ -89,9 +89,9 @@
<!-- Placed at the end of the document so the pages load faster -->
{% block javascript %}
<!-- Required by Bootstrap v4 Alpha 4 -->
<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
<!-- Your stuff: Third-party javascript libraries go here -->