215.1.3
by Ricardo Kirkner
added tooling to build and run application using docker |
1 |
PROJECT_NAME = django_project |
2 |
||
3 |
# define docker related variables
|
|
4 |
DOCKER_COMPOSE_FILES ?= -f docker-compose.yml |
|
217.1.10
by Ricardo Kirkner
simplify docker-compose by merging definitions into a single compose file |
5 |
DOCKER_COMPOSE ?= $(ENV)/bin/docker-compose |
215.1.3
by Ricardo Kirkner
added tooling to build and run application using docker |
6 |
IMAGE_NAME ?= isitdeployable |
257.1.4
by Ricardo Kirkner
build test docker image using production image as base |
7 |
IMAGE_TAG ?= $(shell bzr version-info --custom --template={branch_nick}-{revno}) |
8 |
||
215.1.3
by Ricardo Kirkner
added tooling to build and run application using docker |
9 |
UID := $(shell id -u) |
217.1.12
by Ricardo Kirkner
run containers as non-root user |
10 |
GID := $(shell id -g) |
11 |
# export variables so docker-compose will pick it up from the env
|
|
257.1.4
by Ricardo Kirkner
build test docker image using production image as base |
12 |
export UID GID IMAGE_NAME IMAGE_TAG |
13 |
||
217.1.12
by Ricardo Kirkner
run containers as non-root user |
14 |
# pre-process arguments
|
215.1.3
by Ricardo Kirkner
added tooling to build and run application using docker |
15 |
# if the first argument is "special" (docker-compose, docker-test)...
|
16 |
ifneq (,$(filter $(firstword $(MAKECMDGOALS)),docker-compose docker-test))
|
|
17 |
# use the rest as sub-arguments
|
|
18 |
ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)) |
|
19 |
# ...and turn them into do-nothing targets
|
|
20 |
$(eval $(ARGS):;@:) |
|
21 |
endif
|
|
22 |
||
23 |
||
24 |
docker-bootstrap: $(ENV) fetch-sourcedeps |
|
215.1.10
by Ricardo Kirkner
do not override default $(ENV) target in docker Makefile |
25 |
$(ENV)/bin/pip install --find-links=$(WHEELS_DIR) --no-index -r requirements-docker.txt |
215.1.3
by Ricardo Kirkner
added tooling to build and run application using docker |
26 |
|
27 |
docker-build: version ## Build images |
|
28 |
$(MAKE) docker-compose ARGS="build" |
|
215.1.6
by Ricardo Kirkner
avoid need of specifying makefile explicitly |
29 |
|
215.1.3
by Ricardo Kirkner
added tooling to build and run application using docker |
30 |
docker-run: ## Run stack in foreground |
31 |
DOCKER_COMPOSE_FILES="$(DOCKER_COMPOSE_FILES) -f docker-compose.secrets.yml" $(MAKE) docker-compose ARGS="up" |
|
215.1.6
by Ricardo Kirkner
avoid need of specifying makefile explicitly |
32 |
|
215.1.3
by Ricardo Kirkner
added tooling to build and run application using docker |
33 |
docker-start: ## Run stack in background |
34 |
DOCKER_COMPOSE_FILES="$(DOCKER_COMPOSE_FILES) -f docker-compose.secrets.yml" $(MAKE) docker-compose ARGS="up -d" |
|
215.1.6
by Ricardo Kirkner
avoid need of specifying makefile explicitly |
35 |
|
215.1.3
by Ricardo Kirkner
added tooling to build and run application using docker |
36 |
docker-stop: ## Stop containers |
37 |
DOCKER_COMPOSE_FILES="$(DOCKER_COMPOSE_FILES) -f docker-compose.secrets.yml" $(MAKE) docker-compose ARGS="down" |
|
215.1.6
by Ricardo Kirkner
avoid need of specifying makefile explicitly |
38 |
|
215.1.3
by Ricardo Kirkner
added tooling to build and run application using docker |
39 |
docker-clean: docker-stop ## Remove images |
40 |
docker rmi $(IMAGE_TAG) |
|
257.1.4
by Ricardo Kirkner
build test docker image using production image as base |
41 |
|
215.1.3
by Ricardo Kirkner
added tooling to build and run application using docker |
42 |
docker-compose: $(ENV) |
43 |
$(DOCKER_COMPOSE) $(DOCKER_COMPOSE_FILES) $(ARGS) |
|
44 |
||
45 |
docker-build-test: ## Build image for running tests |
|
257.1.4
by Ricardo Kirkner
build test docker image using production image as base |
46 |
sed -e 's/{{IMAGE_NAME}}/$(IMAGE_NAME)/g' -e 's/{{IMAGE_TAG}}/$(IMAGE_TAG)/g' Dockerfile.test > Dockerfile.test.$(IMAGE_TAG) |
257.1.6
by Ricardo Kirkner
use a real file for the Dockerfile for building the test image |
47 |
docker build -f Dockerfile.test.$(IMAGE_TAG) -t $(IMAGE_NAME):$(IMAGE_TAG)-test . |
48 |
||
257.1.4
by Ricardo Kirkner
build test docker image using production image as base |
49 |
docker-test: docker-build-test ## Run tests using containers |
257.1.5
by Ricardo Kirkner
use pre-built test image for running tests |
50 |
DOCKER_COMPOSE_FILES='-f docker-compose.yml -f docker-compose.test.yml' $(MAKE) docker-compose ARGS="up -d" |
51 |
DOCKER_COMPOSE_FILES='-f docker-compose.yml -f docker-compose.test.yml' $(MAKE) docker-compose ARGS="run app make app-update-db" |
|
52 |
DOCKER_COMPOSE_FILES='-f docker-compose.yml -f docker-compose.test.yml' $(MAKE) docker-compose ARGS="run app make test $(ARGS)" |
|
215.1.6
by Ricardo Kirkner
avoid need of specifying makefile explicitly |
53 |
DOCKER_COMPOSE_FILES='-f docker-compose.yml -f docker-compose.test.yml' $(MAKE) docker-compose ARGS="down" |
54 |
DOCKER_COMPOSE_FILES='-f docker-compose.yml -f docker-compose.test.yml' $(MAKE) docker-compose ARGS="rm --force" |
|
257.1.5
by Ricardo Kirkner
use pre-built test image for running tests |
55 |
docker rmi $(IMAGE_NAME):$(IMAGE_TAG)-test |
56 |
||
215.1.3
by Ricardo Kirkner
added tooling to build and run application using docker |
57 |
docker-loaddata: |
238.3.1
by Ricardo Kirkner
load fixture data manually after containers have been started |
58 |
$(MAKE) docker-compose ARGS="run --rm app make manage ARGS='loaddata fixtures/group.json' PYTHON=python" |
238.3.2
by Ricardo Kirkner
cleanup container after loading data |
59 |
|
238.3.1
by Ricardo Kirkner
load fixture data manually after containers have been started |
60 |
### targets for in-container use
|
215.1.3
by Ricardo Kirkner
added tooling to build and run application using docker |
61 |
|
62 |
app-update-db: DB_USER=$(shell echo $(DATABASE_URL) | cut -d ':' -f 2 | cut -d '@' -f 1 | sed -e 's|//||') |
|
247.1.1
by Ricardo Kirkner
grant user privileges after migration to catch any new tables being created |
63 |
app-update-db: export DATABASE_URL=$(ADMIN_DATABASE_URL) |
274.1.1
by Colin Watson
Detect errors properly in "make app-update-db". |
64 |
app-update-db: |
215.1.6
by Ricardo Kirkner
avoid need of specifying makefile explicitly |
65 |
$(MAKE) manage ARGS='migrate --noinput' PYTHON=python |
274.1.1
by Colin Watson
Detect errors properly in "make app-update-db". |
66 |
$(MAKE) manage ARGS='grantuser $(DB_USER)' PYTHON=python |
67 |
||
215.1.3
by Ricardo Kirkner
added tooling to build and run application using docker |
68 |
app-start: BIND = 0.0.0.0:8000 |
247.2.1
by Ricardo Kirkner
allow overriding workers from environment variable |
69 |
app-start: WORKERS ?= 3 |
70 |
app-start: PYTHON = python |
|
250
by Ricardo Kirkner
re-added necessary PYTHON env var override for app-start rule |
71 |
app-start: collectstatic |
250.1.1
by Ricardo Kirkner
use an initContainer to run schema migrations before starting new containers |
72 |
talisker --workers=$(WORKERS) --bind=$(BIND) $(PROJECT_NAME).wsgi:application |
262.1.1
by Ricardo Kirkner
use talisker for running wsgi app |
73 |
|
215.1.3
by Ricardo Kirkner
added tooling to build and run application using docker |
74 |
worker: |
215.2.4
by Ricardo Kirkner
simplify target to run worker processes in container |
75 |
python $(PROJECT_NAME)/celeryapp.py worker & |
76 |
python $(PROJECT_NAME)/celeryapp.py beat |
|
215.1.8
by Ricardo Kirkner
better support for both docker and standard devel environment workflows |
77 |