diff --git a/.env.sample b/.env.sample index d2c14c9..3efb0d7 100644 --- a/.env.sample +++ b/.env.sample @@ -45,3 +45,12 @@ GEONATURE_FRONTEND_PROTOCOL="${BASE_PROTOCOL}" GEONATURE_FRONTEND_HOST="${HOST}" GEONATURE_FRONTEND_HOSTPORT="${HOSTPORT}" GEONATURE_FRONTEND_PREFIX="/geonature" + +### DEV CONFIGS Uncomment if you want to use in dev mode +# USERSHUB_IMAGE="ghcr.io/pnx-si/usershub-local:latest" +# GEONATURE_BACKEND_IMAGE="ghcr.io/pnx-si/geonature-backend-local:latest" +# GEONATURE_BACKEND_EXTRA_IMAGE="ghcr.io/pnx-si/geonature-backend-extra-local:latest" +# GEONATURE_FRONTEND_IMAGE="ghcr.io/pnx-si/geonature-frontend-local:latest" +# GEONATURE_FRONTEND_EXTRA_IMAGE="ghcr.io/pnx-si/geonature-frontend-extra-local:latest" + +# COMPOSE_FILE=docker-compose.yml:docker-compose-dev.yml diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2981285 --- /dev/null +++ b/Makefile @@ -0,0 +1,19 @@ +SHELL := /bin/bash + +launch: submodule_init + docker compose up -d + +dev_init: + jq '.projects.geonature.architect.build.configurations.development += {"baseHref": "/geonature/"}' sources/GeoNature/frontend/angular.json > angular.json.tmp && mv angular.json.tmp sources/GeoNature/frontend/angular.json # Pas une super pratique mais pas d'autre solution pour le moment + +submodule_init: + git submodule update --init --recursive + +build: + build/build.sh + +dev: dev_init + COMPOSE_FILE=docker-compose.yml:docker-compose-dev.yml docker compose up -d + +prod: + COMPOSE_FILE=docker-compose.yml docker compose up -d diff --git a/README.md b/README.md index a982d13..4ef9296 100644 --- a/README.md +++ b/README.md @@ -99,6 +99,22 @@ Ces images sont le pendant de [celles publiées sur le dépôt de GeoNature](htt ## Liens utiles +## Lancer une instance de développement +Commencez par vous assurer d'avoir installé make et jq `sudo apt install make jq`. + +Il faut ensuite, dans votre fichier .env décommenter les lignes de l'environnement de dev. +Une fois le fichier .env rempli correctement, il faut créer les fichiers de configuration avec `./init-config.sh`. + + +Une fois cela fait, il ne vous reste plus qu'à lancer `make submodule_init` suivit de `make dev`. Selon vos préférences, si la commande +a déjà été lancé une fois, vous pouvez ensuite simplement lancer un `docker compose up`. Le premier lancement peut mettre quelques +dizaines de minutes. + +Vous pouvez visiter votre géonature à l'adresse https://localhost/geonature et le proxy traefik http://localhost:8080/. + +(Pour l'instant, pour que le frontend fonctionne, il faut aussi modifier le fichier +`sources/GeoNature/frontend/angular.json`. C'est fait de manière transparente dans le make dev.) + ### GeoNature - [Dépôt](https://github.com/PnX-SI/GeoNature) diff --git a/build/Dockerfile-geonature-backend b/build/Dockerfile-geonature-backend index 1a48061..cb6577c 100644 --- a/build/Dockerfile-geonature-backend +++ b/build/Dockerfile-geonature-backend @@ -1,4 +1,4 @@ -ARG GEONATURE_BACKEND_IMAGE +ARG GEONATURE_BACKEND_IMAGE="ghcr.io/pnx-si/geonature-backend-local:latest" FROM python:3.11-bookworm AS build @@ -22,8 +22,7 @@ WORKDIR /build/ COPY ./sources/gn_module_monitoring . RUN python setup.py bdist_wheel -FROM ${GEONATURE_BACKEND_IMAGE}-wheels AS prod-extra - +FROM ${GEONATURE_BACKEND_IMAGE}-wheels AS base_env WORKDIR /dist/geonature RUN --mount=type=cache,target=/var/cache/apt \ --mount=type=cache,target=/var/lib/apt \ @@ -31,6 +30,9 @@ RUN --mount=type=cache,target=/var/cache/apt \ COPY --from=build-export /build/dist/*.whl . COPY --from=build-dashboard /build/dist/*.whl . COPY --from=build-monitoring /build/dist/*.whl . + + +FROM base_env AS prod-extra RUN --mount=type=cache,target=/root/.cache \ pip install *.whl sentry_sdk[flask] RUN rm -f *.whl diff --git a/build/Dockerfile-geonature-frontend b/build/Dockerfile-geonature-frontend index 6c15559..3a8ee7d 100644 --- a/build/Dockerfile-geonature-frontend +++ b/build/Dockerfile-geonature-frontend @@ -18,6 +18,15 @@ COPY ./sources/gn_module_monitoring/frontend/ . RUN --mount=type=cache,target=/root/.npm \ npm ci --omit=dev --omit=peer +FROM source-extra as dev-extra +WORKDIR /build +RUN npm link @angular/cli +RUN npm install +EXPOSE 4443 +CMD ["npm", "run", "start", "--", "--host", "0.0.0.0", "--port", "4443"] +ENTRYPOINT [] + + FROM source-extra AS build-extra WORKDIR /build/ diff --git a/build/build.sh b/build/build.sh index cb83398..531ed8c 100755 --- a/build/build.sh +++ b/build/build.sh @@ -1,21 +1,21 @@ #!/bin/bash -set -x +set -x set -o nounset - +# todo delete this file ? Unless we want people to be able to build without launching compose +# Buildkit by default since 2023, we don't need to specify it no more ? Same thing with compose that use it by default +# now export COMPOSE_DOCKER_CLI_BUILD=1 export DOCKER_BUILDKIT=1 - source .env - # GN BACKEND WHEELS docker build -f sources/GeoNature/backend/Dockerfile -t ${GEONATURE_BACKEND_IMAGE}-wheels --target=wheels sources/GeoNature/ # GN BACKEND EXTRA docker build \ - --build-arg GEONATURE_BACKEND_IMAGE=${GEONATURE_BACKEND_IMAGE} \ - -f ./build/Dockerfile-geonature-backend \ - -t ${GEONATURE_BACKEND_EXTRA_IMAGE} . + --build-arg GEONATURE_BACKEND_IMAGE=${GEONATURE_BACKEND_IMAGE} \ + -f ./build/Dockerfile-geonature-backend \ + -t ${GEONATURE_BACKEND_EXTRA_IMAGE} . # GN FRONTEND SOURCE docker build -f sources/GeoNature/frontend/Dockerfile -t ${GEONATURE_FRONTEND_IMAGE}-source --target=source sources/GeoNature/ diff --git a/build/dev/Dockerfile-geonature-backend b/build/dev/Dockerfile-geonature-backend new file mode 100644 index 0000000..f6cb186 --- /dev/null +++ b/build/dev/Dockerfile-geonature-backend @@ -0,0 +1,19 @@ +ARG GEONATURE_BACKEND_IMAGE="ghcr.io/pnx-si/geonature-backend-local:latest" + + +FROM ${GEONATURE_BACKEND_IMAGE}-wheels AS base_env +WORKDIR /dist/geonature +RUN --mount=type=cache,target=/var/cache/apt \ + --mount=type=cache,target=/var/lib/apt \ + apt-get update && apt-get install -y libproj-dev proj-bin + +RUN rm -f geonature-* +COPY --chown=${UID}:${GUID} /sources/GeoNature /sources/GeoNature +COPY --chown=${UID}:${GUID} /sources/gn_module_export /sources/gn_module_export +COPY --chown=${UID}:${GUID} /sources/gn_module_dashboard /sources/gn_module_dashboard +COPY --chown=${UID}:${GUID} /sources/gn_module_monitoring /sources/gn_module_monitoring +RUN --mount=type=cache,target=/root/.cache \ + pip install *.whl sentry_sdk[flask] +RUN --mount=type=cache,target=/root/.cache \ + pip install -e /sources/GeoNature -e /sources/gn_module_export -e /sources/gn_module_dashboard -e /sources/gn_module_monitoring +RUN rm -f *.whl diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml new file mode 100644 index 0000000..efe7794 --- /dev/null +++ b/docker-compose-dev.yml @@ -0,0 +1,98 @@ +services: + + #------------------------------------Builds section start-----------------------------------# + base-backend: + image: ${GEONATURE_BACKEND_IMAGE}-wheels + build: + context: sources/GeoNature + dockerfile: backend/Dockerfile + target: wheels + entrypoint: /bin/bash -c exit + + base-frontend-source: + image: ${GEONATURE_FRONTEND_IMAGE}-source + build: + context: sources/GeoNature + dockerfile: frontend/Dockerfile + target: source + entrypoint: /bin/bash -c exit + + base-frontend-nginx: + image: ${GEONATURE_FRONTEND_IMAGE}-nginx + build: + context: sources/GeoNature + dockerfile: frontend/Dockerfile + target: prod-base + entrypoint: /bin/sh -c exit + + userhub-build: + image: ${USERSHUB_IMAGE} + build: + target: prod + context: sources/UsersHub + volumes: + - ./config/usershub:/dist/config/ + entrypoint: /bin/sh -c exit + #------------------------------------Builds section end------------------------------------# + geonature-install-db: + depends_on: + base-backend: + condition: service_completed_successfully + build: + dockerfile: build/dev/Dockerfile-geonature-backend + + geonature-backend: + depends_on: + base-backend: + condition: service_completed_successfully + volumes: + - ./sources/GeoNature:/sources/GeoNature + - ./sources/gn_module_export:/sources/gn_module_export + - ./sources/gn_module_dashboard:/sources/gn_module_dashboard + - ./sources/gn_module_monitoring:/sources/gn_module_monitoring + build: + dockerfile: build/dev/Dockerfile-geonature-backend + + geonature-worker: + depends_on: + base-backend: + condition: service_completed_successfully + volumes: + - ./sources/GeoNature:/sources/GeoNature + - ./sources/gn_module_export:/sources/gn_module_export + - ./sources/gn_module_dashboard:/sources/gn_module_dashboard + - ./sources/gn_module_monitoring:/sources/gn_module_monitoring + build: + dockerfile: build/dev/Dockerfile-geonature-backend + + + traefik: + command: + - "--api.insecure=true" + - "--providers.docker=true" + - "--providers.docker.exposedbydefault=false" + - "--entryPoints.web.address=:80" + - "--entryPoints.web.http.redirections.entrypoint.to=:${HTTPS_PORT}" + - "--entryPoints.web.http.redirections.entrypoint.scheme=https" + - "--entryPoints.websecure.address=:443" + - "--certificatesResolvers.acme-resolver.acme.email=${ACME_EMAIL}" + - "--certificatesResolvers.acme-resolver.acme.storage=/etc/traefik/certs/acme.json" + - "--certificatesResolvers.acme-resolver.acme.tlsChallenge=true" + ports: + - "8080:8080" + + geonature-frontend: + depends_on: + base-frontend-source: + condition: service_completed_successfully + command: npm run start -- --host 0.0.0.0 --port 4443 + build: + context: . + dockerfile: build/Dockerfile-geonature-frontend + target: dev-extra + args: + GEONATURE_FRONTEND_IMAGE: ${GEONATURE_FRONTEND_IMAGE} + volumes: + - ./sources/GeoNature/frontend:/build + +# TODO rendre optionel la partie peuplement de la BDD \ No newline at end of file diff --git a/docs/changelog.md b/docs/changelog.md index d3db207..fe90ee0 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -20,6 +20,8 @@ - Avant d'effectuer la mise à jour de GeoNature, installer l'extension `ltree` dans le container `postgres` : `docker compose exec postgres psql -U [user_postgres] -d [nom_db_geonature] -f /docker-entrypoint-initdb.d/add-extensions.sql` +- Avec cette nouvelle version, les médias de TaxHub se trouvent dans le dossier `media` de GeoNature. Si vous mettez à jour votre GeoNature, déplacer les médias de TaxHub de l'ancien dossier (`GeoNature-Docker-services/data/taxhub/medias`) vers le nouveau (`GeoNature-Docker-services/data/geonature/media/taxhub`) : +`cp -r data/taxhub/medias/* data/geonature/media/taxhub` - La suppression du container TaxHub implique une modification du docker-compose, n'oubliez pas de récupérer les modifications de ce dernier ([Voir documentation](https://github.com/PnX-SI/GeoNature-Docker-services?tab=readme-ov-file#mettre-%C3%A0-jour-geonature-et-ses-modules)) ## 2.14.2 (2024-06-03) diff --git a/docs/faq.md b/docs/faq.md index c755ba9..34c0edf 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -103,15 +103,7 @@ docker image inspect ghcr.io/pnx-si/geonature-backend-extra --format '{{json .Co - Initialiser et cloner les sous-modules git : ```bash - git submodule init - git submodule update - ``` -- Faire de même pour les sous-modules de GeoNature et UsersHub, exemple pour GeoNature : - ```bash - cd sources/GeoNature - git submodule init - git submodule update - cd ../.. + make submodule_init ``` - Apporter vos éventuelles modifications au code source. - Il est conseillé de renommer les images dans le fichier `.env` afin de ne pas rentrer en conflit avec les images officielles, par exemple en leur rajoutant un suffix `-local` :