~roadmr/isitdeployable/revision-disappeared-ohnoes

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