From 1bb9f8b3a4c63410249dce83e48bbb6cd8d1da36 Mon Sep 17 00:00:00 2001 From: Andrea Borghi Date: Fri, 16 Feb 2024 10:47:37 +0100 Subject: [PATCH 1/7] Update Dockerfile --- Dockerfile | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index f886ab60..7a3be8d1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,12 @@ -FROM osgeo/gdal:ubuntu-small-3.5.2 +FROM ghcr.io/osgeo/gdal:ubuntu-small-3.5.2 -RUN apt-get update --fix-missing -RUN apt-get install gettext python3-pip libcairo2-dev build-essential python3-dev \ +RUN apt-get update --fix-missing && \ + apt-get install gettext python3-pip libcairo2-dev build-essential python3-dev \ pipenv python3-setuptools python3-wheel python3-cffi libcairo2 libpango-1.0-0 \ - libpangocairo-1.0-0 libgdk-pixbuf2.0-0 libffi-dev shared-mime-info libpq-dev -y -RUN pip3 install gunicorn + libpangocairo-1.0-0 libgdk-pixbuf2.0-0 libffi-dev shared-mime-info libpq-dev -y && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + COPY ./requirements.txt /app/geoshop_back/requirements.txt WORKDIR /app/geoshop_back/ RUN pip3 install -r requirements.txt From c37e441c329ccf5776bc56a8e71a2067502f5bb8 Mon Sep 17 00:00:00 2001 From: Andrea Borghi Date: Fri, 16 Feb 2024 10:49:21 +0100 Subject: [PATCH 2/7] retrieve docker-compose file from other branch --- docker-compose.yml | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 docker-compose.yml diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..bd66fae3 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,50 @@ +version: '3' + +services: + db: + image: postgis/postgis:15-3.4-alpine + volumes: + # - "/db/docker_db/data:/var/lib/postgresql/data" + - "/db/docker_db/init-scripts:/docker-entrypoint-initdb.d" + environment: + POSTGRES_USER: ${PGUSER} + POSTGRES_PASSWORD: ${PGPASSWORD} + POSTGRES_DB: ${PGDATABASE} + # TODO set this from env vars + # this is needed to avoid issues like ---database "postgres" has no actual collation version, but a version was recorded--- + # perhaps setting POSTGRES_COLLATE: would also be enoughe + LANG: 'en_US.utf8' + LC_COLLATE: 'en_US.utf8' + LC_CTYPE: 'en_US.utf8' + ports: + - ${PGPORT}:5432 + networks: + - default + + api: + image: geoshop-api + build: + context: . + args: + ENV_FILE: .env + depends_on: + - db + env_file: .env + command: "gunicorn wsgi -b :8000 --timeout 90" + restart: unless-stopped + ports: + - "8080:8000" + volumes: + - "${GEOSHOP_DATA}:/mnt/geoshop_data" + networks: + - default + + # front: + # image: ${DOCKER_BASE}-front + # build: + # context: ./front/ + # args: + # FRONT_HREF: ${FRONT_HREF} + # restart: unless-stopped + # ports: + # - "${DOCKER_FRONT_PORT}:80" From c32a70311028a792a4b71b4b4eff44e40f40bbc1 Mon Sep 17 00:00:00 2001 From: Andrea Borghi Date: Fri, 16 Feb 2024 11:25:44 +0100 Subject: [PATCH 3/7] wip on docker-compose file --- Dockerfile | 8 +----- docker-compose.yml | 61 ++++++++++++++++++++++++++++++++-------------- 2 files changed, 44 insertions(+), 25 deletions(-) diff --git a/Dockerfile b/Dockerfile index 7a3be8d1..386fdfe4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,10 +18,4 @@ ENV PYTHONUNBUFFERED 1 COPY . /app/geoshop_back/ -ARG ENV_FILE -RUN mv ${ENV_FILE} .env && mkdir /mnt/geoshop_data - -RUN export $(egrep -v '^#' .env | xargs) && \ - python manage.py migrate && \ - python manage.py collectstatic --noinput && \ - python manage.py compilemessages --locale=fr +# RUN mkdir /mnt/geoshop_data diff --git a/docker-compose.yml b/docker-compose.yml index bd66fae3..aa9a15f3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,12 @@ version: '3' +networks: + geoshop: + driver: bridge + +# volumes: +# geoshop_data: {} + services: db: image: postgis/postgis:15-3.4-alpine @@ -7,37 +14,55 @@ services: # - "/db/docker_db/data:/var/lib/postgresql/data" - "/db/docker_db/init-scripts:/docker-entrypoint-initdb.d" environment: - POSTGRES_USER: ${PGUSER} - POSTGRES_PASSWORD: ${PGPASSWORD} - POSTGRES_DB: ${PGDATABASE} - # TODO set this from env vars - # this is needed to avoid issues like ---database "postgres" has no actual collation version, but a version was recorded--- - # perhaps setting POSTGRES_COLLATE: would also be enoughe + POSTGRES_PASSWORD: "coucou" LANG: 'en_US.utf8' LC_COLLATE: 'en_US.utf8' LC_CTYPE: 'en_US.utf8' + env_file: .env ports: - - ${PGPORT}:5432 + - 5432:5432 networks: - - default + - geoshop + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] + interval: 10s + timeout: 5s + retries: 5 - api: + migrate: image: geoshop-api build: context: . - args: - ENV_FILE: .env + dockerfile: Dockerfile depends_on: - db env_file: .env - command: "gunicorn wsgi -b :8000 --timeout 90" - restart: unless-stopped - ports: - - "8080:8000" - volumes: - - "${GEOSHOP_DATA}:/mnt/geoshop_data" + command: + - sleep + - infinity + # command: + # - bash + # - -c + # - "python manage.py migrate && python manage.py collectstatic && python manage.py compilemessages --locale=fr && python manage.py fixturize" networks: - - default + - geoshop + + # api: + # image: geoshop-api + # depends_on: + # db: + # condition: service_healthy + # migrate: + # condition: service_completed_successfully + # env_file: .env + # command: "gunicorn wsgi -b :8000 --timeout 90" + # restart: unless-stopped + # ports: + # - "8080:8000" + # # volumes: + # # - "geoshop_data:/mnt/geoshop_data" + # networks: + # - geoshop # front: # image: ${DOCKER_BASE}-front From 0be778e7c8070a60169f076c73d42afcda880b1c Mon Sep 17 00:00:00 2001 From: Andrea Borghi Date: Fri, 16 Feb 2024 11:29:20 +0100 Subject: [PATCH 4/7] local init script --- docker-compose.yml | 2 +- resources/db/01_init_db.sql | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 resources/db/01_init_db.sql diff --git a/docker-compose.yml b/docker-compose.yml index aa9a15f3..bd13357f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,7 +12,7 @@ services: image: postgis/postgis:15-3.4-alpine volumes: # - "/db/docker_db/data:/var/lib/postgresql/data" - - "/db/docker_db/init-scripts:/docker-entrypoint-initdb.d" + - "resources/db/:/docker-entrypoint-initdb.d/:ro" environment: POSTGRES_PASSWORD: "coucou" LANG: 'en_US.utf8' diff --git a/resources/db/01_init_db.sql b/resources/db/01_init_db.sql new file mode 100644 index 00000000..261b281c --- /dev/null +++ b/resources/db/01_init_db.sql @@ -0,0 +1,15 @@ +-- CREATE ROLE geoshop WITH LOGIN PASSWORD geoshop; +-- +-- CREATE DATABASE geoshop OWNER geoshop; +-- REVOKE ALL ON DATABASE geoshop FROM PUBLIC; + +CREATE EXTENSION postgis; +CREATE EXTENSION unaccent; +CREATE EXTENSION "uuid-ossp"; + +CREATE SCHEMA geoshop AUTHORIZATION geoshop; + +CREATE TEXT SEARCH CONFIGURATION fr (COPY = simple); + +ALTER TEXT SEARCH CONFIGURATION fr ALTER MAPPING FOR hword, hword_part, word +WITH unaccent, simple; \ No newline at end of file From 8888bc454330eca7c729f7186d5f101af0fd8b12 Mon Sep 17 00:00:00 2001 From: Andrea Borghi Date: Fri, 16 Feb 2024 12:14:39 +0100 Subject: [PATCH 5/7] Example docker-composition --- Dockerfile | 1 + docker-compose.yml | 61 +++++++++++++------------------------ resources/db/01_init_db.sql | 14 ++++----- 3 files changed, 28 insertions(+), 48 deletions(-) diff --git a/Dockerfile b/Dockerfile index 386fdfe4..c2c8d2e0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,4 +18,5 @@ ENV PYTHONUNBUFFERED 1 COPY . /app/geoshop_back/ +# FIXME: why was this needed? # RUN mkdir /mnt/geoshop_data diff --git a/docker-compose.yml b/docker-compose.yml index bd13357f..a88a2b4b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,17 +4,12 @@ networks: geoshop: driver: bridge -# volumes: -# geoshop_data: {} - services: db: image: postgis/postgis:15-3.4-alpine volumes: - # - "/db/docker_db/data:/var/lib/postgresql/data" - - "resources/db/:/docker-entrypoint-initdb.d/:ro" + - "./resources/db:/docker-entrypoint-initdb.d:ro" environment: - POSTGRES_PASSWORD: "coucou" LANG: 'en_US.utf8' LC_COLLATE: 'en_US.utf8' LC_CTYPE: 'en_US.utf8' @@ -24,7 +19,7 @@ services: networks: - geoshop healthcheck: - test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] + test: ["CMD-SHELL", "pg_isready -U geoshop"] interval: 10s timeout: 5s retries: 5 @@ -35,41 +30,27 @@ services: context: . dockerfile: Dockerfile depends_on: - - db + db: + condition: service_healthy env_file: .env command: - - sleep - - infinity - # command: - # - bash - # - -c - # - "python manage.py migrate && python manage.py collectstatic && python manage.py compilemessages --locale=fr && python manage.py fixturize" + - bash + - -c + - "python manage.py migrate && python manage.py collectstatic --noinput && python manage.py compilemessages --locale=fr && python manage.py fixturize" networks: - geoshop - # api: - # image: geoshop-api - # depends_on: - # db: - # condition: service_healthy - # migrate: - # condition: service_completed_successfully - # env_file: .env - # command: "gunicorn wsgi -b :8000 --timeout 90" - # restart: unless-stopped - # ports: - # - "8080:8000" - # # volumes: - # # - "geoshop_data:/mnt/geoshop_data" - # networks: - # - geoshop - - # front: - # image: ${DOCKER_BASE}-front - # build: - # context: ./front/ - # args: - # FRONT_HREF: ${FRONT_HREF} - # restart: unless-stopped - # ports: - # - "${DOCKER_FRONT_PORT}:80" + api: + image: geoshop-api + depends_on: + db: + condition: service_healthy + migrate: + condition: service_completed_successfully + env_file: .env + command: "gunicorn wsgi -b :8000 --timeout 90" + restart: unless-stopped + ports: + - "8080:8000" + networks: + - geoshop diff --git a/resources/db/01_init_db.sql b/resources/db/01_init_db.sql index 261b281c..be89b681 100644 --- a/resources/db/01_init_db.sql +++ b/resources/db/01_init_db.sql @@ -1,14 +1,12 @@ --- CREATE ROLE geoshop WITH LOGIN PASSWORD geoshop; --- --- CREATE DATABASE geoshop OWNER geoshop; --- REVOKE ALL ON DATABASE geoshop FROM PUBLIC; -CREATE EXTENSION postgis; -CREATE EXTENSION unaccent; -CREATE EXTENSION "uuid-ossp"; +CREATE EXTENSION IF NOT EXISTS postgis; +CREATE EXTENSION IF NOT EXISTS unaccent; +CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; -CREATE SCHEMA geoshop AUTHORIZATION geoshop; +CREATE SCHEMA IF NOT EXISTS geoshop AUTHORIZATION geoshop; + +DROP TEXT SEARCH CONFIGURATION IF EXISTS fr; CREATE TEXT SEARCH CONFIGURATION fr (COPY = simple); ALTER TEXT SEARCH CONFIGURATION fr ALTER MAPPING FOR hword, hword_part, word From 04e95a2843d267c517e11c705d322c4656a4a318 Mon Sep 17 00:00:00 2001 From: Andrea Borghi Date: Tue, 2 Apr 2024 10:25:46 +0200 Subject: [PATCH 6/7] Remove dotenv --- default_settings.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/default_settings.py b/default_settings.py index 05bf2edc..b78eadb6 100644 --- a/default_settings.py +++ b/default_settings.py @@ -1,7 +1,4 @@ import os -from dotenv import load_dotenv - -load_dotenv() # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.abspath(__file__)) @@ -232,7 +229,8 @@ INTRA_LEGEND_URL = os.environ.get('INTRA_LEGEND_URL', '') # Geometries settings -DEFAULT_SRID = 2056 +# FIXME: Does this work with another SRID? +DEFAULT_SRID = int(os.environ.get('DEFAULT_SRID', '2056')) # Controls values of metadata accessibility field that will turn the metadata public METADATA_PUBLIC_ACCESSIBILITIES = ['PUBLIC', 'APPROVAL_NEEDED'] From 15dcd010c076e5f40bbfd664e1c8f96c8a5d657d Mon Sep 17 00:00:00 2001 From: Andrea Borghi Date: Tue, 2 Apr 2024 10:47:42 +0200 Subject: [PATCH 7/7] Envvar for ADMIN_USERNAME --- api/management/commands/fixturize.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/management/commands/fixturize.py b/api/management/commands/fixturize.py index 90d38e13..cad5394c 100644 --- a/api/management/commands/fixturize.py +++ b/api/management/commands/fixturize.py @@ -15,7 +15,7 @@ class Command(BaseCommand): Creates internal group """ def handle(self, *args, **options): - admin_user = UserModel.objects.get(username='admin') + admin_user = UserModel.objects.get(username=os.environ.get('ADMIN_USERNAME', 'admin')) admin_user.set_password(os.environ['ADMIN_PASSWORD']) admin_user.save()