From 44033c18fe0beb9c2c731f1feb8977db757aa41a Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Mon, 17 Jan 2022 12:45:03 +0100 Subject: [PATCH] # 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"