diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..bbdfe24 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +FROM python:3.7-buster + +RUN mkdir /app +WORKDIR /app + +# Use a seperate layer for the project requirements +COPY ./requirements /app/requirements +RUN pip install -r requirements/dev.txt + +COPY . /app/ + +# Set the default shell & add a home dir +RUN useradd -ms /bin/bash newsreader +USER newsreader diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..182821d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,31 @@ +version: '3' + +services: + db: + # See https://hub.docker.com/_/postgres + image: postgres + environment: + - POSTGRES_USER=newsreader + - POSTGRES_DB=newsreader + web: + build: . + command: src/entrypoint.sh + environment: + - DJANGO_SETTINGS_MODULE=newsreader.conf.docker + volumes: + - .:/app + ports: + - '8000:8000' + depends_on: + - db + rabbitmq: + image: rabbitmq:3.7 + celery: + build: . + command: celery -A newsreader worker --beat --scheduler django --loglevel=info --workdir=/app/src/ + environment: + - DJANGO_SETTINGS_MODULE=newsreader.conf.docker + volumes: + - .:/app + depends_on: + - rabbitmq diff --git a/src/entrypoint.sh b/src/entrypoint.sh new file mode 100755 index 0000000..3fbf941 --- /dev/null +++ b/src/entrypoint.sh @@ -0,0 +1,5 @@ +#!/bin/bash +# This file should only be used in conjuction with docker-compose + +python /app/src/manage.py migrate +python /app/src/manage.py runserver 0.0.0.0:8000 diff --git a/src/newsreader/celery.py b/src/newsreader/celery.py index 4aeb7a1..aa15a08 100644 --- a/src/newsreader/celery.py +++ b/src/newsreader/celery.py @@ -7,6 +7,8 @@ from celery import Celery os.environ.setdefault("DJANGO_SETTINGS_MODULE", "newsreader.conf.dev") # note: use the --workdir flag when running from different directories -app = Celery("newsreader", broker="amqp://") +app = Celery("newsreader") + +app.config_from_object("django.conf:settings") app.autodiscover_tasks() diff --git a/src/newsreader/conf/docker.py b/src/newsreader/conf/docker.py new file mode 100644 index 0000000..d8e3142 --- /dev/null +++ b/src/newsreader/conf/docker.py @@ -0,0 +1,17 @@ +from .dev import * + + +# Database +# https://docs.djangoproject.com/en/2.2/ref/settings/#databases +DATABASES = { + "default": { + "ENGINE": "django.db.backends.postgresql_psycopg2", + "NAME": "newsreader", + "USER": "newsreader", + "HOST": "db", + } +} + +# Celery +# https://docs.celeryproject.org/en/latest/userguide/configuration.html +BROKER_URL = "amqp://guest:guest@rabbitmq:5672//"