From c9b54cd4c5e6328273e33bdb3208fe907c6c0e3c Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Mon, 10 Jan 2022 13:52:40 +0100 Subject: [PATCH 01/13] # Docker * adds docker related configurations * directly working configuration provided --- Dockerfile | 17 ++++++++ docker-compose.yml | 55 ++++++++++++++++++++++++++ konova/celery.py | 2 +- konova/sub_settings/django_settings.py | 9 +++-- 4 files changed, 78 insertions(+), 5 deletions(-) create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e97a087 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM python:3.7-slim +ENV PYTHONUNBUFFERED 1 + +WORKDIR /konova + +# Install some dependencies +RUN apt update +RUN apt install -y gdal-bin + +# Copy requirements file into workspace +COPY ./requirements.txt /konova/ +RUN pip install --upgrade pip +RUN pip install -r requirements.txt + +# Copy rest of project into workspace +COPY . /konova/ + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..5bddc63 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,55 @@ +version: '3.3' + +services: + redis: + image: redis + volumes: + - /redis/data:/bitnami/redis/data + environment: + - REDIS_PASSWORD=CHANGE_ME + + konova: + external_links: + - postgis:db + build: . + container_name: "konova-docker" + command: python manage.py runserver 0.0.0.0:8000 + volumes: + - .:/konova + ports: + - "8001:8000" + depends_on: + - redis + environment: + - POSTGRES_NAME=konova + - POSTGRES_PORT=5432 + - POSTGRES_PASSWORD=michel + - POSTGRES_USER=konova + - POSTGRES_HOST=db + - REDIS_HOST=redis + +# To provide a celery worker instance, we need to add the celery worker as an own service + celery_worker: + external_links: + - postgis:db + build: . + container_name: "konova-worker-docker" + command: celery -A konova worker -l INFO + volumes: + - .:/konova + depends_on: + - konova + environment: + - POSTGRES_NAME=konova + - POSTGRES_PORT=5432 + - POSTGRES_PASSWORD=michel + - POSTGRES_USER=konova + - POSTGRES_HOST=db + - REDIS_HOST=redis + +# Instead of an own, new network, we need to connect to the existing one, which is provided by the postgis container +# NOTE: THIS NETWORK MUST EXIST +networks: + default: + external: + name: postgis_nat_it_backend \ No newline at end of file diff --git a/konova/celery.py b/konova/celery.py index 478f284..ab06cf7 100644 --- a/konova/celery.py +++ b/konova/celery.py @@ -17,7 +17,7 @@ app.config_from_object('django.conf:settings', namespace='CELERY') app.autodiscover_tasks() # Declare redis as broker -app.conf.broker_url = 'redis://localhost:6379/0' +app.conf.broker_url = f"redis://{os.environ.get('REDIS_HOST')}:6379/0" @app.task(bind=True) diff --git a/konova/sub_settings/django_settings.py b/konova/sub_settings/django_settings.py index df875a8..951fd46 100644 --- a/konova/sub_settings/django_settings.py +++ b/konova/sub_settings/django_settings.py @@ -119,10 +119,11 @@ WSGI_APPLICATION = 'konova.wsgi.application' DATABASES = { 'default': { 'ENGINE': 'django.contrib.gis.db.backends.postgis', - 'NAME': 'konova', - 'USER': 'postgres', - 'HOST': '127.0.0.1', - 'PORT': '5432', + 'NAME': os.environ.get('POSTGRES_NAME'), + 'USER': os.environ.get('POSTGRES_USER'), + 'HOST': os.environ.get('POSTGRES_HOST'), + 'PASSWORD': os.environ.get('POSTGRES_PASSWORD'), + 'PORT': os.environ.get('POSTGRES_PORT'), } } From 7075d7074c93efb14dfac3a2d21fc54f46341ea4 Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Mon, 10 Jan 2022 15:27:19 +0100 Subject: [PATCH 02/13] # Docker Production * adds further settings to create a production-ready docker configuration --- Dockerfile | 3 +++ docker-compose.yml | 23 +++++++++++++++++++---- konova/sub_settings/django_settings.py | 2 +- nginx/Dockerfile | 4 ++++ nginx/nginx.conf | 20 ++++++++++++++++++++ requirements.txt | 1 + 6 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 nginx/Dockerfile create mode 100644 nginx/nginx.conf diff --git a/Dockerfile b/Dockerfile index e97a087..aad1422 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,3 +15,6 @@ RUN pip install -r requirements.txt # Copy rest of project into workspace COPY . /konova/ +# Move static files in designated folder +RUN python manage.py collectstatic --noinput + diff --git a/docker-compose.yml b/docker-compose.yml index 5bddc63..9569bd7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,6 +3,7 @@ version: '3.3' services: redis: image: redis + container_name: "konova-redis-cache" volumes: - /redis/data:/bitnami/redis/data environment: @@ -13,11 +14,12 @@ services: - postgis:db build: . container_name: "konova-docker" - command: python manage.py runserver 0.0.0.0:8000 + command: gunicorn konova.wsgi:application --bind 0.0.0.0:8000 volumes: - .:/konova - ports: - - "8001:8000" + - static_file_volume:/konova/static # Point to the volume for static files. Shared with nginx service + expose: + - 8000 depends_on: - redis environment: @@ -47,9 +49,22 @@ services: - POSTGRES_HOST=db - REDIS_HOST=redis + nginx: + build: ./nginx + container_name: "konova-nginx-server" + ports: + - "1337:80" + depends_on: + - konova + volumes: + - static_file_volume:/konova/static # Point to the volume for static files. Shared with konova service + # Instead of an own, new network, we need to connect to the existing one, which is provided by the postgis container # NOTE: THIS NETWORK MUST EXIST networks: default: external: - name: postgis_nat_it_backend \ No newline at end of file + name: postgis_nat_it_backend + +volumes: + static_file_volume: \ No newline at end of file diff --git a/konova/sub_settings/django_settings.py b/konova/sub_settings/django_settings.py index 951fd46..e94d4ba 100644 --- a/konova/sub_settings/django_settings.py +++ b/konova/sub_settings/django_settings.py @@ -30,7 +30,7 @@ BASE_DIR = os.path.dirname( SECRET_KEY = '5=9-)2)h$u9=!zrhia9=lj-2#cpcb8=#$7y+)l$5tto$3q(n_+' # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True +DEBUG = False ALLOWED_HOSTS = [ "127.0.0.1", diff --git a/nginx/Dockerfile b/nginx/Dockerfile new file mode 100644 index 0000000..4c49d2e --- /dev/null +++ b/nginx/Dockerfile @@ -0,0 +1,4 @@ +FROM nginx:alpine + +RUN rm /etc/nginx/conf.d/default.conf +COPY nginx.conf /etc/nginx/conf.d \ No newline at end of file diff --git a/nginx/nginx.conf b/nginx/nginx.conf new file mode 100644 index 0000000..26b326c --- /dev/null +++ b/nginx/nginx.conf @@ -0,0 +1,20 @@ +upstream konova { + server konova:8000; +} + +server { + + listen 80; + + location / { + proxy_pass http://konova; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $host; + proxy_redirect off; + } + + location /static/ { + alias /konova/static/; + } + +} diff --git a/requirements.txt b/requirements.txt index 763913c..20e0bff 100644 --- a/requirements.txt +++ b/requirements.txt @@ -48,3 +48,4 @@ webservices==0.7 wrapt==1.13.3 xmltodict==0.12.0 zipp==3.4.1 +gunicorn==20.1.0 \ No newline at end of file From 2fdf6606b33d2d6c8d038329e76b9bc3669f819b Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Tue, 11 Jan 2022 08:32:04 +0100 Subject: [PATCH 03/13] # Docker * minor adjustments --- docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 9569bd7..82d8b60 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,7 +25,7 @@ services: environment: - POSTGRES_NAME=konova - POSTGRES_PORT=5432 - - POSTGRES_PASSWORD=michel + - POSTGRES_PASSWORD=CHANGE_ME - POSTGRES_USER=konova - POSTGRES_HOST=db - REDIS_HOST=redis @@ -44,7 +44,7 @@ services: environment: - POSTGRES_NAME=konova - POSTGRES_PORT=5432 - - POSTGRES_PASSWORD=michel + - POSTGRES_PASSWORD=CHANGE_ME - POSTGRES_USER=konova - POSTGRES_HOST=db - REDIS_HOST=redis From d9577fe6a152de65fa9a8e6ab094fb899b698cd4 Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Mon, 10 Jan 2022 13:52:40 +0100 Subject: [PATCH 04/13] # Docker * adds docker related configurations * directly working configuration provided --- Dockerfile | 17 ++++++++ docker-compose.yml | 55 ++++++++++++++++++++++++++ konova/celery.py | 2 +- konova/sub_settings/django_settings.py | 9 +++-- 4 files changed, 78 insertions(+), 5 deletions(-) create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e97a087 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM python:3.7-slim +ENV PYTHONUNBUFFERED 1 + +WORKDIR /konova + +# Install some dependencies +RUN apt update +RUN apt install -y gdal-bin + +# Copy requirements file into workspace +COPY ./requirements.txt /konova/ +RUN pip install --upgrade pip +RUN pip install -r requirements.txt + +# Copy rest of project into workspace +COPY . /konova/ + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..5bddc63 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,55 @@ +version: '3.3' + +services: + redis: + image: redis + volumes: + - /redis/data:/bitnami/redis/data + environment: + - REDIS_PASSWORD=CHANGE_ME + + konova: + external_links: + - postgis:db + build: . + container_name: "konova-docker" + command: python manage.py runserver 0.0.0.0:8000 + volumes: + - .:/konova + ports: + - "8001:8000" + depends_on: + - redis + environment: + - POSTGRES_NAME=konova + - POSTGRES_PORT=5432 + - POSTGRES_PASSWORD=michel + - POSTGRES_USER=konova + - POSTGRES_HOST=db + - REDIS_HOST=redis + +# To provide a celery worker instance, we need to add the celery worker as an own service + celery_worker: + external_links: + - postgis:db + build: . + container_name: "konova-worker-docker" + command: celery -A konova worker -l INFO + volumes: + - .:/konova + depends_on: + - konova + environment: + - POSTGRES_NAME=konova + - POSTGRES_PORT=5432 + - POSTGRES_PASSWORD=michel + - POSTGRES_USER=konova + - POSTGRES_HOST=db + - REDIS_HOST=redis + +# Instead of an own, new network, we need to connect to the existing one, which is provided by the postgis container +# NOTE: THIS NETWORK MUST EXIST +networks: + default: + external: + name: postgis_nat_it_backend \ No newline at end of file diff --git a/konova/celery.py b/konova/celery.py index 478f284..ab06cf7 100644 --- a/konova/celery.py +++ b/konova/celery.py @@ -17,7 +17,7 @@ app.config_from_object('django.conf:settings', namespace='CELERY') app.autodiscover_tasks() # Declare redis as broker -app.conf.broker_url = 'redis://localhost:6379/0' +app.conf.broker_url = f"redis://{os.environ.get('REDIS_HOST')}:6379/0" @app.task(bind=True) diff --git a/konova/sub_settings/django_settings.py b/konova/sub_settings/django_settings.py index bc1a751..9256148 100644 --- a/konova/sub_settings/django_settings.py +++ b/konova/sub_settings/django_settings.py @@ -119,10 +119,11 @@ WSGI_APPLICATION = 'konova.wsgi.application' DATABASES = { 'default': { 'ENGINE': 'django.contrib.gis.db.backends.postgis', - 'NAME': 'konova', - 'USER': 'postgres', - 'HOST': '127.0.0.1', - 'PORT': '5432', + 'NAME': os.environ.get('POSTGRES_NAME'), + 'USER': os.environ.get('POSTGRES_USER'), + 'HOST': os.environ.get('POSTGRES_HOST'), + 'PASSWORD': os.environ.get('POSTGRES_PASSWORD'), + 'PORT': os.environ.get('POSTGRES_PORT'), } } From 9cb9308f856409663fcd6e1a1a87ec1c880eefdb Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Mon, 10 Jan 2022 15:27:19 +0100 Subject: [PATCH 05/13] # Docker Production * adds further settings to create a production-ready docker configuration --- Dockerfile | 3 +++ docker-compose.yml | 23 +++++++++++++++++++---- konova/sub_settings/django_settings.py | 2 +- nginx/Dockerfile | 4 ++++ nginx/nginx.conf | 20 ++++++++++++++++++++ requirements.txt | 1 + 6 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 nginx/Dockerfile create mode 100644 nginx/nginx.conf diff --git a/Dockerfile b/Dockerfile index e97a087..aad1422 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,3 +15,6 @@ RUN pip install -r requirements.txt # Copy rest of project into workspace COPY . /konova/ +# Move static files in designated folder +RUN python manage.py collectstatic --noinput + diff --git a/docker-compose.yml b/docker-compose.yml index 5bddc63..9569bd7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,6 +3,7 @@ version: '3.3' services: redis: image: redis + container_name: "konova-redis-cache" volumes: - /redis/data:/bitnami/redis/data environment: @@ -13,11 +14,12 @@ services: - postgis:db build: . container_name: "konova-docker" - command: python manage.py runserver 0.0.0.0:8000 + command: gunicorn konova.wsgi:application --bind 0.0.0.0:8000 volumes: - .:/konova - ports: - - "8001:8000" + - static_file_volume:/konova/static # Point to the volume for static files. Shared with nginx service + expose: + - 8000 depends_on: - redis environment: @@ -47,9 +49,22 @@ services: - POSTGRES_HOST=db - REDIS_HOST=redis + nginx: + build: ./nginx + container_name: "konova-nginx-server" + ports: + - "1337:80" + depends_on: + - konova + volumes: + - static_file_volume:/konova/static # Point to the volume for static files. Shared with konova service + # Instead of an own, new network, we need to connect to the existing one, which is provided by the postgis container # NOTE: THIS NETWORK MUST EXIST networks: default: external: - name: postgis_nat_it_backend \ No newline at end of file + name: postgis_nat_it_backend + +volumes: + static_file_volume: \ No newline at end of file diff --git a/konova/sub_settings/django_settings.py b/konova/sub_settings/django_settings.py index 9256148..1bf8dc5 100644 --- a/konova/sub_settings/django_settings.py +++ b/konova/sub_settings/django_settings.py @@ -30,7 +30,7 @@ BASE_DIR = os.path.dirname( SECRET_KEY = '5=9-)2)h$u9=!zrhia9=lj-2#cpcb8=#$7y+)l$5tto$3q(n_+' # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True +DEBUG = False ALLOWED_HOSTS = [ "127.0.0.1", diff --git a/nginx/Dockerfile b/nginx/Dockerfile new file mode 100644 index 0000000..4c49d2e --- /dev/null +++ b/nginx/Dockerfile @@ -0,0 +1,4 @@ +FROM nginx:alpine + +RUN rm /etc/nginx/conf.d/default.conf +COPY nginx.conf /etc/nginx/conf.d \ No newline at end of file diff --git a/nginx/nginx.conf b/nginx/nginx.conf new file mode 100644 index 0000000..26b326c --- /dev/null +++ b/nginx/nginx.conf @@ -0,0 +1,20 @@ +upstream konova { + server konova:8000; +} + +server { + + listen 80; + + location / { + proxy_pass http://konova; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $host; + proxy_redirect off; + } + + location /static/ { + alias /konova/static/; + } + +} diff --git a/requirements.txt b/requirements.txt index 763913c..20e0bff 100644 --- a/requirements.txt +++ b/requirements.txt @@ -48,3 +48,4 @@ webservices==0.7 wrapt==1.13.3 xmltodict==0.12.0 zipp==3.4.1 +gunicorn==20.1.0 \ No newline at end of file From 0c2d39ba960e05e6b4dbb46bca6a2515ab7383b8 Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Tue, 11 Jan 2022 08:32:04 +0100 Subject: [PATCH 06/13] # Docker * minor adjustments --- docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 9569bd7..82d8b60 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,7 +25,7 @@ services: environment: - POSTGRES_NAME=konova - POSTGRES_PORT=5432 - - POSTGRES_PASSWORD=michel + - POSTGRES_PASSWORD=CHANGE_ME - POSTGRES_USER=konova - POSTGRES_HOST=db - REDIS_HOST=redis @@ -44,7 +44,7 @@ services: environment: - POSTGRES_NAME=konova - POSTGRES_PORT=5432 - - POSTGRES_PASSWORD=michel + - POSTGRES_PASSWORD=CHANGE_ME - POSTGRES_USER=konova - POSTGRES_HOST=db - REDIS_HOST=redis From 2118b42ecb1c3d4cbc30df98ad66f63bafdb1006 Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Thu, 13 Jan 2022 14:07:18 +0100 Subject: [PATCH 07/13] # Docker persistent storage * adds named volume to docker-compose.yml to keep files uploaded on /konova_uploaded_files even on image rebuild --- docker-compose.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 82d8b60..2ad0820 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,6 +17,7 @@ services: command: gunicorn konova.wsgi:application --bind 0.0.0.0:8000 volumes: - .:/konova + - konova_uploaded_files:/konova_uploaded_files - static_file_volume:/konova/static # Point to the volume for static files. Shared with nginx service expose: - 8000 @@ -39,6 +40,7 @@ services: command: celery -A konova worker -l INFO volumes: - .:/konova + - konova_uploaded_files:/konova_uploaded_files depends_on: - konova environment: @@ -67,4 +69,5 @@ networks: name: postgis_nat_it_backend volumes: - static_file_volume: \ No newline at end of file + static_file_volume: + konova_uploaded_files: \ No newline at end of file From 850a3914fd61d3a24910059e6ea8b5226c057de9 Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Thu, 13 Jan 2022 15:42:07 +0100 Subject: [PATCH 08/13] # Docker --- docker-compose.yml | 4 ++++ konova/settings.py | 2 +- konova/sub_settings/django_settings.py | 3 ++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 2ad0820..207fd57 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,6 +12,7 @@ services: konova: external_links: - postgis:db + - arnova-nginx-server:arnova build: . container_name: "konova-docker" command: gunicorn konova.wsgi:application --bind 0.0.0.0:8000 @@ -30,11 +31,13 @@ services: - POSTGRES_USER=konova - POSTGRES_HOST=db - REDIS_HOST=redis + - SSO_HOST=arnova # To provide a celery worker instance, we need to add the celery worker as an own service celery_worker: external_links: - postgis:db + - arnova-nginx-server:arnova build: . container_name: "konova-worker-docker" command: celery -A konova worker -l INFO @@ -50,6 +53,7 @@ services: - POSTGRES_USER=konova - POSTGRES_HOST=db - REDIS_HOST=redis + - SSO_HOST=arnova nginx: build: ./nginx diff --git a/konova/settings.py b/konova/settings.py index 05199de..f43bd4e 100644 --- a/konova/settings.py +++ b/konova/settings.py @@ -55,7 +55,7 @@ PAGE_SIZE_MAX = 100 PAGE_DEFAULT = 1 # SSO settings -SSO_SERVER_BASE = "http://127.0.0.1:8000/" +SSO_SERVER_BASE = f"http://{os.environ.get('SSO_HOST')}/" SSO_SERVER = f"{SSO_SERVER_BASE}sso/" SSO_PRIVATE_KEY = "QuziFeih7U8DZvQQ1riPv2MXz0ZABupHED9wjoqZAqeMQaqkqTfxJDRXgSIyASwJ" SSO_PUBLIC_KEY = "AGGK7E8eT5X5u2GD38ygGG3GpAefmIldJiiWW7gldRPqCG1CzmUfGdvPSGDbEY2n" diff --git a/konova/sub_settings/django_settings.py b/konova/sub_settings/django_settings.py index 1bf8dc5..9908059 100644 --- a/konova/sub_settings/django_settings.py +++ b/konova/sub_settings/django_settings.py @@ -30,11 +30,12 @@ BASE_DIR = os.path.dirname( SECRET_KEY = '5=9-)2)h$u9=!zrhia9=lj-2#cpcb8=#$7y+)l$5tto$3q(n_+' # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = False +DEBUG = True ALLOWED_HOSTS = [ "127.0.0.1", "localhost", + "konova", ] # Authentication settings From 5dae6a7b913d952bb7029107b768156108d5b6ad Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Thu, 13 Jan 2022 17:22:29 +0100 Subject: [PATCH 09/13] # Docker --- docker-compose.yml | 4 ++-- konova/sub_settings/django_settings.py | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 207fd57..8dd57a7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -31,7 +31,7 @@ services: - POSTGRES_USER=konova - POSTGRES_HOST=db - REDIS_HOST=redis - - SSO_HOST=arnova + - SSO_HOST=CHANGE_ME_TO_SSO_HOST_URL # To provide a celery worker instance, we need to add the celery worker as an own service celery_worker: @@ -53,7 +53,7 @@ services: - POSTGRES_USER=konova - POSTGRES_HOST=db - REDIS_HOST=redis - - SSO_HOST=arnova + - SSO_HOST=CHANGE_ME_TO_SSO_HOST_URL nginx: build: ./nginx diff --git a/konova/sub_settings/django_settings.py b/konova/sub_settings/django_settings.py index 9908059..9256148 100644 --- a/konova/sub_settings/django_settings.py +++ b/konova/sub_settings/django_settings.py @@ -35,7 +35,6 @@ DEBUG = True ALLOWED_HOSTS = [ "127.0.0.1", "localhost", - "konova", ] # Authentication settings From 44033c18fe0beb9c2c731f1feb8977db757aa41a Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Mon, 17 Jan 2022 12:45:03 +0100 Subject: [PATCH 10/13] # Docker * optimizes configuration * removes unused settings * extends README.md with docker installation guid --- README.md | 45 ++++++++++++++++++++++++++ docker-compose.yml | 6 ++++ konova/sub_settings/django_settings.py | 22 ++++++------- 3 files changed, 60 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 4497147..478bae7 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ the database postgresql and the css library bootstrap as well as the icon packag fontawesome for a modern look, following best practices from the industry. ## Background processes +### !!! For non-docker run Konova uses celery for background processing. To start the worker you need to run ```shell $ celery -A konova worker -l INFO @@ -18,3 +19,47 @@ Technical documention is provided in the projects git wiki. A user documentation is not available (and not needed, yet). +# Docker +To run the docker-compose as expected, you need to take the following steps: + +1. Create a database containing docker, using an appropriate Dockerfile, e.g. the following +``` +version: '3.3' +services: + postgis: + image: postgis/postgis + restart: always + container_name: postgis-docker + ports: + - 5433:5432 + volumes: + - db-volume:/var/lib/postgresql/data + environment: + - POSTGRES_PASSWORD=postgres + - POSTGRES_USER=postgres + networks: + - db-network-bridge + +networks: + db-network-bridge: + driver: "bridge" + +volumes: + db-volume: +``` +This Dockerfile creates a Docker container running postgresql and postgis, creates the default superuser postgres, +creates a named volume for persisting the database and creates a new network bridge, which **must be used by any other +container, which wants to write/read on this database**. + +2. Make sure the name of the network bridge above matches the network in the konova docker-compose.yml +3. Get into the running postgis container (`docker exec -it postgis-docker bash`) and create new databases, users and so on. Make sure the database `konova` exists now! +4. Replace all `CHANGE_ME_xy` values inside of konova/docker-compose.yml for your installation. Make sure the `SSO_HOST` holds the proper SSO host, e.g. for the arnova project `arnova.example.org` (Arnova must be installed and the webserver configured as well, of course) +5. Take a look on konova/settings.py and konova/sub_settings/django_settings.py. Again: Replace all occurences of `CHANGE_ME` with proper values for your installation. + 1. Make sure you have the proper host strings added to `ALLOWED_HOSTS` inside of django_settings.py. +6. Build and run the docker setup using `docker-compose build` and `docker-compose start` from the main directory of this project (where the docker-compose.yml lives) +7. Run migrations! To do so, get into the konova service container (`docker exec -it konova-docker bash`) and run the needed commands (`python manage.py makemigrations LIST_OF_ALL_MIGRATABLE_APPS`, then `python manage.py migrate`) +8. Run the setup command `python manage.py setup` and follow the instructions on the CLI +9. To enable **SMTP** mail support, make sure your host machine (the one where the docker container run) has the postfix service configured properly. Make sure the `mynetworks` variable is extending using the docker network bridge ip, created in the postgis container and used by the konova services. + 1. **Hint**: You can find out this easily by trying to perform a test mail in the running konova web application (which will fail, of course). Then take a look to the latest entries in `/var/log/mail.log` on your host machine. The failed IP will be displayed there. + 2. **Please note**: This installation guide is based on SMTP using postfix! + 3. Restart the postfix service on your host machine to reload the new configuration (`service postfix restart`) \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 8dd57a7..a67fb2f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -32,6 +32,9 @@ services: - POSTGRES_HOST=db - REDIS_HOST=redis - SSO_HOST=CHANGE_ME_TO_SSO_HOST_URL + - SMTP_HOST=172.17.0.1 + - SMTP_PORT=25 + - SMTP_REAL_REPLY_MAIL=ksp-servicestelle@sgdnord.rlp.de # To provide a celery worker instance, we need to add the celery worker as an own service celery_worker: @@ -54,6 +57,9 @@ services: - POSTGRES_HOST=db - REDIS_HOST=redis - SSO_HOST=CHANGE_ME_TO_SSO_HOST_URL + - SMTP_HOST=172.17.0.1 + - SMTP_PORT=25 + - SMTP_REAL_REPLY_MAIL=ksp-servicestelle@sgdnord.rlp.de nginx: build: ./nginx diff --git a/konova/sub_settings/django_settings.py b/konova/sub_settings/django_settings.py index 9256148..3304ae2 100644 --- a/konova/sub_settings/django_settings.py +++ b/konova/sub_settings/django_settings.py @@ -205,19 +205,15 @@ DEBUG_TOOLBAR_CONFIG = { } # EMAIL (see https://docs.djangoproject.com/en/dev/topics/email/) - -# CHANGE_ME !!! ONLY FOR DEVELOPMENT !!! -EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend' -EMAIL_FILE_PATH = '/tmp/app-messages' # change this to a proper location - -DEFAULT_FROM_EMAIL = "service@ksp.de" # The default email address for the 'from' element -EMAIL_HOST = "localhost" -EMAIL_REPLY_TO = "ksp-servicestelle@sgdnord.rlp.de" -EMAIL_PORT = "25" -#EMAIL_HOST_USER = "" -#EMAIL_HOST_PASSWORD = "" -EMAIL_USE_TLS = False -EMAIL_USE_SSL = False +if DEBUG: + # ONLY FOR DEVELOPMENT NEEDED + EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend' + EMAIL_FILE_PATH = '/tmp/app-messages' + +DEFAULT_FROM_EMAIL = "no-reply@ksp.de" # The default email address for the 'from' element +EMAIL_HOST = os.environ.get('SMTP_HOST'), +EMAIL_REPLY_TO = os.environ.get('SMTP_REAL_REPLY_MAIL') +EMAIL_PORT = os.environ.get('SMTP_PORT'), # LOGGING BASIC_LOGGER = "logger" From 9ea47fcc83188e3b1da2c7396b4c405fdbf8453b Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Tue, 18 Jan 2022 13:55:32 +0100 Subject: [PATCH 11/13] # Docker readme * fixes typo * adds more info --- README.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 478bae7..8fee921 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,18 @@ container, which wants to write/read on this database**. 6. Build and run the docker setup using `docker-compose build` and `docker-compose start` from the main directory of this project (where the docker-compose.yml lives) 7. Run migrations! To do so, get into the konova service container (`docker exec -it konova-docker bash`) and run the needed commands (`python manage.py makemigrations LIST_OF_ALL_MIGRATABLE_APPS`, then `python manage.py migrate`) 8. Run the setup command `python manage.py setup` and follow the instructions on the CLI -9. To enable **SMTP** mail support, make sure your host machine (the one where the docker container run) has the postfix service configured properly. Make sure the `mynetworks` variable is extending using the docker network bridge ip, created in the postgis container and used by the konova services. +9. To enable **SMTP** mail support, make sure your host machine (the one where the docker container run) has the postfix service configured properly. Make sure the `mynetworks` variable is xtended using the docker network bridge ip, created in the postgis container and used by the konova services. 1. **Hint**: You can find out this easily by trying to perform a test mail in the running konova web application (which will fail, of course). Then take a look to the latest entries in `/var/log/mail.log` on your host machine. The failed IP will be displayed there. 2. **Please note**: This installation guide is based on SMTP using postfix! - 3. Restart the postfix service on your host machine to reload the new configuration (`service postfix restart`) \ No newline at end of file + 3. Restart the postfix service on your host machine to reload the new configuration (`service postfix restart`) +10. Finally, make sure your host machine webserver passes incoming requests properly to the docker nginx webserver of konova. A proper nginx config for the host machine may look like this: +``` +server { + server_name konova.domain.org; + + location / { + proxy_pass http://localhost:KONOVA_NGINX_DOCKER_PORT/; + proxy_set_header Host $host; + } +} +``` \ No newline at end of file From 9c9c9b7717932c336c56e3960de7910c1784c5c2 Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Fri, 28 Jan 2022 17:01:45 +0100 Subject: [PATCH 12/13] # HOTFIX * fixes bug where errors occured once an email shall be sent. See issue #87 for details --- konova/sub_settings/django_settings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/konova/sub_settings/django_settings.py b/konova/sub_settings/django_settings.py index 9489125..c1f2d43 100644 --- a/konova/sub_settings/django_settings.py +++ b/konova/sub_settings/django_settings.py @@ -212,10 +212,10 @@ if DEBUG: EMAIL_FILE_PATH = '/tmp/app-messages' DEFAULT_FROM_EMAIL = "no-reply@ksp.de" # The default email address for the 'from' element -EMAIL_HOST = os.environ.get('SMTP_HOST'), +EMAIL_HOST = os.environ.get('SMTP_HOST') EMAIL_REPLY_TO = os.environ.get('SMTP_REAL_REPLY_MAIL') SUPPORT_MAIL_RECIPIENT = EMAIL_REPLY_TO -EMAIL_PORT = os.environ.get('SMTP_PORT'), +EMAIL_PORT = os.environ.get('SMTP_PORT') # LOGGING BASIC_LOGGER = "logger" From bd92b8e895b6b9a3009658bd7eb874bd8a685355 Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Fri, 4 Feb 2022 14:00:18 +0100 Subject: [PATCH 13/13] Docker update --- konova/sub_settings/sso_settings.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/konova/sub_settings/sso_settings.py b/konova/sub_settings/sso_settings.py index 20417f0..390ed40 100644 --- a/konova/sub_settings/sso_settings.py +++ b/konova/sub_settings/sso_settings.py @@ -7,7 +7,9 @@ Created on: 31.01.22 """ # SSO settings -SSO_SERVER_BASE = "http://127.0.0.1:8000/" +import os + +SSO_SERVER_BASE = f"http://{os.environ.get('SSO_HOST')}/" SSO_SERVER = f"{SSO_SERVER_BASE}sso/" SSO_PRIVATE_KEY = "QuziFeih7U8DZvQQ1riPv2MXz0ZABupHED9wjoqZAqeMQaqkqTfxJDRXgSIyASwJ" -SSO_PUBLIC_KEY = "AGGK7E8eT5X5u2GD38ygGG3GpAefmIldJiiWW7gldRPqCG1CzmUfGdvPSGDbEY2n" \ No newline at end of file +SSO_PUBLIC_KEY = "AGGK7E8eT5X5u2GD38ygGG3GpAefmIldJiiWW7gldRPqCG1CzmUfGdvPSGDbEY2n"