mirror of
https://github.com/cookiecutter/cookiecutter-django.git
synced 2025-08-14 00:44:53 +03:00
Refactored and pruned the docker compose files
This commit is contained in:
parent
0c4a409ef8
commit
49ff0de852
|
@ -1,44 +0,0 @@
|
||||||
FROM python:3.6-alpine
|
|
||||||
|
|
||||||
ENV PYTHONUNBUFFERED 1
|
|
||||||
|
|
||||||
RUN apk update \
|
|
||||||
# psycopg2 dependencies
|
|
||||||
&& apk add --virtual build-deps gcc python3-dev musl-dev \
|
|
||||||
&& apk add postgresql-dev \
|
|
||||||
# Pillow dependencies
|
|
||||||
&& apk add jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev \
|
|
||||||
# CFFI dependencies
|
|
||||||
&& apk add libffi-dev py-cffi \
|
|
||||||
# Translations dependencies
|
|
||||||
&& apk add gettext \
|
|
||||||
# https://docs.djangoproject.com/en/dev/ref/django-admin/#dbshell
|
|
||||||
&& apk add postgresql-client
|
|
||||||
|
|
||||||
# Requirements are installed here to ensure they will be cached.
|
|
||||||
COPY ./requirements /requirements
|
|
||||||
RUN pip install -r /requirements/local.txt
|
|
||||||
|
|
||||||
COPY ./compose/production/django/entrypoint /entrypoint
|
|
||||||
RUN sed -i 's/\r$//g' /entrypoint
|
|
||||||
RUN chmod +x /entrypoint
|
|
||||||
|
|
||||||
COPY ./compose/local/django/start /start
|
|
||||||
RUN sed -i 's/\r$//g' /start
|
|
||||||
RUN chmod +x /start
|
|
||||||
{% if cookiecutter.use_celery == "y" %}
|
|
||||||
COPY ./compose/local/django/celery/worker/start /start-celeryworker
|
|
||||||
RUN sed -i 's/\r$//g' /start-celeryworker
|
|
||||||
RUN chmod +x /start-celeryworker
|
|
||||||
|
|
||||||
COPY ./compose/local/django/celery/beat/start /start-celerybeat
|
|
||||||
RUN sed -i 's/\r$//g' /start-celerybeat
|
|
||||||
RUN chmod +x /start-celerybeat
|
|
||||||
|
|
||||||
COPY ./compose/local/django/celery/flower/start /start-flower
|
|
||||||
RUN sed -i 's/\r$//g' /start-flower
|
|
||||||
RUN chmod +x /start-flower
|
|
||||||
{% endif %}
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
ENTRYPOINT ["/entrypoint"]
|
|
|
@ -1,8 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o nounset
|
|
||||||
|
|
||||||
|
|
||||||
rm -f './celerybeat.pid'
|
|
||||||
celery -A config.celery_app beat -l INFO
|
|
|
@ -1,7 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o nounset
|
|
||||||
|
|
||||||
|
|
||||||
celery -A config.celery_app worker -l INFO
|
|
|
@ -1,9 +0,0 @@
|
||||||
FROM node:10-stretch-slim
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
COPY ./package.json /app
|
|
||||||
|
|
||||||
RUN npm install && npm cache clean --force
|
|
||||||
|
|
||||||
ENV PATH ./node_modules/.bin/:$PATH
|
|
|
@ -1,9 +0,0 @@
|
||||||
FROM garland/aws-cli-docker:1.15.47
|
|
||||||
|
|
||||||
COPY ./compose/production/aws/maintenance /usr/local/bin/maintenance
|
|
||||||
COPY ./compose/production/postgres/maintenance/_sourced /usr/local/bin/maintenance/_sourced
|
|
||||||
|
|
||||||
RUN chmod +x /usr/local/bin/maintenance/*
|
|
||||||
|
|
||||||
RUN mv /usr/local/bin/maintenance/* /usr/local/bin \
|
|
||||||
&& rmdir /usr/local/bin/maintenance
|
|
|
@ -1,24 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
### Download a file from your Amazon S3 bucket to the postgres /backups folder
|
|
||||||
###
|
|
||||||
### Usage:
|
|
||||||
### $ docker-compose -f production.yml run --rm awscli <1>
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o pipefail
|
|
||||||
set -o nounset
|
|
||||||
|
|
||||||
working_dir="$(dirname ${0})"
|
|
||||||
source "${working_dir}/_sourced/constants.sh"
|
|
||||||
source "${working_dir}/_sourced/messages.sh"
|
|
||||||
|
|
||||||
export AWS_ACCESS_KEY_ID="${DJANGO_AWS_ACCESS_KEY_ID}"
|
|
||||||
export AWS_SECRET_ACCESS_KEY="${DJANGO_AWS_SECRET_ACCESS_KEY}"
|
|
||||||
export AWS_STORAGE_BUCKET_NAME="${DJANGO_AWS_STORAGE_BUCKET_NAME}"
|
|
||||||
|
|
||||||
|
|
||||||
aws s3 cp s3://${AWS_STORAGE_BUCKET_NAME}${BACKUP_DIR_PATH}/${1} ${BACKUP_DIR_PATH}/${1}
|
|
||||||
|
|
||||||
message_success "Finished downloading ${1}."
|
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
### Upload the /backups folder to Amazon S3
|
|
||||||
###
|
|
||||||
### Usage:
|
|
||||||
### $ docker-compose -f production.yml run --rm awscli upload
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o pipefail
|
|
||||||
set -o nounset
|
|
||||||
|
|
||||||
working_dir="$(dirname ${0})"
|
|
||||||
source "${working_dir}/_sourced/constants.sh"
|
|
||||||
source "${working_dir}/_sourced/messages.sh"
|
|
||||||
|
|
||||||
export AWS_ACCESS_KEY_ID="${DJANGO_AWS_ACCESS_KEY_ID}"
|
|
||||||
export AWS_SECRET_ACCESS_KEY="${DJANGO_AWS_SECRET_ACCESS_KEY}"
|
|
||||||
export AWS_STORAGE_BUCKET_NAME="${DJANGO_AWS_STORAGE_BUCKET_NAME}"
|
|
||||||
|
|
||||||
|
|
||||||
message_info "Upload the backups directory to S3 bucket {$AWS_STORAGE_BUCKET_NAME}"
|
|
||||||
|
|
||||||
aws s3 cp ${BACKUP_DIR_PATH} s3://${AWS_STORAGE_BUCKET_NAME}${BACKUP_DIR_PATH} --recursive
|
|
||||||
|
|
||||||
message_info "Cleaning the directory ${BACKUP_DIR_PATH}"
|
|
||||||
|
|
||||||
rm -rf ${BACKUP_DIR_PATH}/*
|
|
||||||
|
|
||||||
message_success "Finished uploading and cleaning."
|
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o nounset
|
|
||||||
|
|
||||||
|
|
||||||
celery flower \
|
|
||||||
--app=config.celery_app \
|
|
||||||
--broker="${CELERY_BROKER_URL}" \
|
|
||||||
--basic_auth="${CELERY_FLOWER_USER}:${CELERY_FLOWER_PASSWORD}"
|
|
|
@ -1,6 +0,0 @@
|
||||||
FROM postgres:11-alpine
|
|
||||||
|
|
||||||
COPY ./compose/production/postgres/maintenance /usr/local/bin/maintenance
|
|
||||||
RUN chmod +x /usr/local/bin/maintenance/*
|
|
||||||
RUN mv /usr/local/bin/maintenance/* /usr/local/bin \
|
|
||||||
&& rmdir /usr/local/bin/maintenance
|
|
|
@ -1,5 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
|
|
||||||
BACKUP_DIR_PATH='/backups'
|
|
||||||
BACKUP_FILE_PREFIX='backup'
|
|
|
@ -1,12 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
|
|
||||||
countdown() {
|
|
||||||
declare desc="A simple countdown. Source: https://superuser.com/a/611582"
|
|
||||||
local seconds="${1}"
|
|
||||||
local d=$(($(date +%s) + "${seconds}"))
|
|
||||||
while [ "$d" -ge `date +%s` ]; do
|
|
||||||
echo -ne "$(date -u --date @$(($d - `date +%s`)) +%H:%M:%S)\r";
|
|
||||||
sleep 0.1
|
|
||||||
done
|
|
||||||
}
|
|
|
@ -1,41 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
|
|
||||||
message_newline() {
|
|
||||||
echo
|
|
||||||
}
|
|
||||||
|
|
||||||
message_debug()
|
|
||||||
{
|
|
||||||
echo -e "DEBUG: ${@}"
|
|
||||||
}
|
|
||||||
|
|
||||||
message_welcome()
|
|
||||||
{
|
|
||||||
echo -e "\e[1m${@}\e[0m"
|
|
||||||
}
|
|
||||||
|
|
||||||
message_warning()
|
|
||||||
{
|
|
||||||
echo -e "\e[33mWARNING\e[0m: ${@}"
|
|
||||||
}
|
|
||||||
|
|
||||||
message_error()
|
|
||||||
{
|
|
||||||
echo -e "\e[31mERROR\e[0m: ${@}"
|
|
||||||
}
|
|
||||||
|
|
||||||
message_info()
|
|
||||||
{
|
|
||||||
echo -e "\e[37mINFO\e[0m: ${@}"
|
|
||||||
}
|
|
||||||
|
|
||||||
message_suggestion()
|
|
||||||
{
|
|
||||||
echo -e "\e[33mSUGGESTION\e[0m: ${@}"
|
|
||||||
}
|
|
||||||
|
|
||||||
message_success()
|
|
||||||
{
|
|
||||||
echo -e "\e[32mSUCCESS\e[0m: ${@}"
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
|
|
||||||
yes_no() {
|
|
||||||
declare desc="Prompt for confirmation. \$\"\{1\}\": confirmation message."
|
|
||||||
local arg1="${1}"
|
|
||||||
|
|
||||||
local response=
|
|
||||||
read -r -p "${arg1} (y/[n])? " response
|
|
||||||
if [[ "${response}" =~ ^[Yy]$ ]]
|
|
||||||
then
|
|
||||||
exit 0
|
|
||||||
else
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
|
|
||||||
### Create a database backup.
|
|
||||||
###
|
|
||||||
### Usage:
|
|
||||||
### $ docker-compose -f <environment>.yml (exec |run --rm) postgres backup
|
|
||||||
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o pipefail
|
|
||||||
set -o nounset
|
|
||||||
|
|
||||||
|
|
||||||
working_dir="$(dirname ${0})"
|
|
||||||
source "${working_dir}/_sourced/constants.sh"
|
|
||||||
source "${working_dir}/_sourced/messages.sh"
|
|
||||||
|
|
||||||
|
|
||||||
message_welcome "Backing up the '${POSTGRES_DB}' database..."
|
|
||||||
|
|
||||||
|
|
||||||
if [[ "${POSTGRES_USER}" == "postgres" ]]; then
|
|
||||||
message_error "Backing up as 'postgres' user is not supported. Assign 'POSTGRES_USER' env with another one and try again."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
export PGHOST="${POSTGRES_HOST}"
|
|
||||||
export PGPORT="${POSTGRES_PORT}"
|
|
||||||
export PGUSER="${POSTGRES_USER}"
|
|
||||||
export PGPASSWORD="${POSTGRES_PASSWORD}"
|
|
||||||
export PGDATABASE="${POSTGRES_DB}"
|
|
||||||
|
|
||||||
backup_filename="${BACKUP_FILE_PREFIX}_$(date +'%Y_%m_%dT%H_%M_%S').sql.gz"
|
|
||||||
pg_dump | gzip > "${BACKUP_DIR_PATH}/${backup_filename}"
|
|
||||||
|
|
||||||
|
|
||||||
message_success "'${POSTGRES_DB}' database backup '${backup_filename}' has been created and placed in '${BACKUP_DIR_PATH}'."
|
|
|
@ -1,22 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
|
|
||||||
### View backups.
|
|
||||||
###
|
|
||||||
### Usage:
|
|
||||||
### $ docker-compose -f <environment>.yml (exec |run --rm) postgres backups
|
|
||||||
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o pipefail
|
|
||||||
set -o nounset
|
|
||||||
|
|
||||||
|
|
||||||
working_dir="$(dirname ${0})"
|
|
||||||
source "${working_dir}/_sourced/constants.sh"
|
|
||||||
source "${working_dir}/_sourced/messages.sh"
|
|
||||||
|
|
||||||
|
|
||||||
message_welcome "These are the backups you have got:"
|
|
||||||
|
|
||||||
ls -lht "${BACKUP_DIR_PATH}"
|
|
|
@ -1,55 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
|
|
||||||
### Restore database from a backup.
|
|
||||||
###
|
|
||||||
### Parameters:
|
|
||||||
### <1> filename of an existing backup.
|
|
||||||
###
|
|
||||||
### Usage:
|
|
||||||
### $ docker-compose -f <environment>.yml (exec |run --rm) postgres restore <1>
|
|
||||||
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o pipefail
|
|
||||||
set -o nounset
|
|
||||||
|
|
||||||
|
|
||||||
working_dir="$(dirname ${0})"
|
|
||||||
source "${working_dir}/_sourced/constants.sh"
|
|
||||||
source "${working_dir}/_sourced/messages.sh"
|
|
||||||
|
|
||||||
|
|
||||||
if [[ -z ${1+x} ]]; then
|
|
||||||
message_error "Backup filename is not specified yet it is a required parameter. Make sure you provide one and try again."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
backup_filename="${BACKUP_DIR_PATH}/${1}"
|
|
||||||
if [[ ! -f "${backup_filename}" ]]; then
|
|
||||||
message_error "No backup with the specified filename found. Check out the 'backups' maintenance script output to see if there is one and try again."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
message_welcome "Restoring the '${POSTGRES_DB}' database from the '${backup_filename}' backup..."
|
|
||||||
|
|
||||||
if [[ "${POSTGRES_USER}" == "postgres" ]]; then
|
|
||||||
message_error "Restoring as 'postgres' user is not supported. Assign 'POSTGRES_USER' env with another one and try again."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
export PGHOST="${POSTGRES_HOST}"
|
|
||||||
export PGPORT="${POSTGRES_PORT}"
|
|
||||||
export PGUSER="${POSTGRES_USER}"
|
|
||||||
export PGPASSWORD="${POSTGRES_PASSWORD}"
|
|
||||||
export PGDATABASE="${POSTGRES_DB}"
|
|
||||||
|
|
||||||
message_info "Dropping the database..."
|
|
||||||
dropdb "${PGDATABASE}"
|
|
||||||
|
|
||||||
message_info "Creating a new database..."
|
|
||||||
createdb --owner="${POSTGRES_USER}"
|
|
||||||
|
|
||||||
message_info "Applying the backup to the new database..."
|
|
||||||
gunzip -c "${backup_filename}" | psql "${POSTGRES_DB}"
|
|
||||||
|
|
||||||
message_success "The '${POSTGRES_DB}' database has been restored from the '${backup_filename}' backup."
|
|
|
@ -1,5 +0,0 @@
|
||||||
FROM traefik:alpine
|
|
||||||
RUN mkdir -p /etc/traefik/acme
|
|
||||||
RUN touch /etc/traefik/acme/acme.json
|
|
||||||
RUN chmod 600 /etc/traefik/acme/acme.json
|
|
||||||
COPY ./compose/production/traefik/traefik.toml /etc/traefik
|
|
|
@ -1,41 +0,0 @@
|
||||||
logLevel = "INFO"
|
|
||||||
defaultEntryPoints = ["http", "https"]
|
|
||||||
|
|
||||||
# Entrypoints, http and https
|
|
||||||
[entryPoints]
|
|
||||||
# http should be redirected to https
|
|
||||||
[entryPoints.http]
|
|
||||||
address = ":80"
|
|
||||||
[entryPoints.http.redirect]
|
|
||||||
entryPoint = "https"
|
|
||||||
# https is the default
|
|
||||||
[entryPoints.https]
|
|
||||||
address = ":443"
|
|
||||||
[entryPoints.https.tls]
|
|
||||||
|
|
||||||
# Enable ACME (Let's Encrypt): automatic SSL
|
|
||||||
[acme]
|
|
||||||
# Email address used for registration
|
|
||||||
email = "{{ cookiecutter.email }}"
|
|
||||||
storage = "/etc/traefik/acme/acme.json"
|
|
||||||
entryPoint = "https"
|
|
||||||
onDemand = false
|
|
||||||
OnHostRule = true
|
|
||||||
# Use a HTTP-01 acme challenge rather than TLS-SNI-01 challenge
|
|
||||||
[acme.httpChallenge]
|
|
||||||
entryPoint = "http"
|
|
||||||
|
|
||||||
[file]
|
|
||||||
[backends]
|
|
||||||
[backends.django]
|
|
||||||
[backends.django.servers.server1]
|
|
||||||
url = "http://django:5000"
|
|
||||||
|
|
||||||
[frontends]
|
|
||||||
[frontends.django]
|
|
||||||
backend = "django"
|
|
||||||
passHostHeader = true
|
|
||||||
[frontends.django.headers]
|
|
||||||
HostsProxyHeaders = ['X-CSRFToken']
|
|
||||||
[frontends.django.routes.dr1]
|
|
||||||
rule = "Host:{{ cookiecutter.domain_name }}"
|
|
Loading…
Reference in New Issue
Block a user