diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4b6c3f92501ff72f5b0f01264b546ba9436fa984..2a0f2f8e6fb732327fa2385eeebf15f078b60f97 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,16 +1,22 @@
 #
 # Gitlab CI/CD : Build archive and Docker images and deploy on Openshift
 #
+# Pour gérer les déploiements dans les différents environnement s (d01, r01, p01),
+# 3 environnements gitlab ont été créer et 
+# 3 variables NAMESPACE_ENV associées sont renseignées 
+# avec les 3 valeurs {d01, r01, p01}.
+# Cela permet de mutulialiser tous les fichiers de déploiements ainsi que toutes les étapes de build.
+# le 'stage' de déploiement en production est forcément différent du fait qu'il DOIT être manuel
 
 variables:
-    TRIGRAMME: test #arb @TODO : Change after when the right namespace is available
+    TRIGRAMME: arb
     REPLICA_ENV: 1
     
 ################################################################################
 #    Anchors
 ################################################################################
 .build_and_push_image: &build_and_push_image
-  - docker build --pull --tag "$CI_REGISTRY_IMAGE/$IMAGE_NAME:latest" .
+  - docker build --pull --tag "$CI_REGISTRY_IMAGE/$IMAGE_NAME:latest" --build-arg NAMESPACE_ENV=$NAMESPACE_ENV --build-arg DB_HOST_ENV=$POSTGRES_SERVER --build-arg  DB_PORT_ENV=$POSTGRES_PORT --build-arg  DB_NAME_ENV=$POSTGRES_DB --build-arg  DB_USER_ENV=$POSTGRES_USER  .
   - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:latest"
 
 # Docker Authentification anchor
@@ -19,7 +25,6 @@ variables:
 
 # Set_env : copying env sample file and replace values
 .set_env: &set_env
-    - cp .env.example .env
     - echo "# Configuration generated by Gitlab CI. (#$CI_BUILD_ID)" > .env 
     - echo "#" >> .env
     - cat .env.example >> .env
@@ -34,44 +39,67 @@ variables:
 .prepare_deployment: &prepare_deployment
   - export NO_PROXY=grandlyon.fr
   - export KUBECONFIG=$KUBECONFIG_DEV
-  - echo Preparing Deployment on $NAMESPACE 
+  - echo "Preparing Deployment on $NAMESPACE ($NAMESPACE_ENV)"
+
+  # Secrets
+  - sed -i "s/__NAMESPACE_ENV__/$NAMESPACE_ENV/g" deployment/secrets/database-secret.yml
+
+  # PVC Access
+  - sed -i "s/__NAMESPACE__/$NAMESPACE/g" deployment/pods/pvc-calqul.yml
+  - sed -i "s/__NAMESPACE_ENV__/$NAMESPACE_ENV/g" deployment/pods/pvc-calqul.yml
 
   # DB deployment file
-  - sed -i "s/__NAMESPACE__/$NAMESPACE/g" deployment/db-calqul.yml
-  - sed -i "s/__NAMESPACE_ENV__/$NAMESPACE_ENV/g" deployment/db-calqul.yml
-  - sed -i "s/__POSTGRES_DB__/$POSTGRES_DB/g" deployment/db-calqul.yml 
-  - sed -i "s/__POSTGRES_PASSWORD__/$POSTGRES_PASSWORD/g" deployment/db-calqul.yml 
-  - sed -i "s/__POSTGRES_PORT__/$POSTGRES_PORT/g" deployment/db-calqul.yml 
-  - sed -i "s/__POSTGRES_SERVER__/$POSTGRES_SERVER-$NAMESPACE_ENV/g" deployment/db-calqul.yml 
-  - sed -i "s/__POSTGRES_USER__/$POSTGRES_USER/g" deployment/db-calqul.yml 
-  - sed -i "s/__POSTGRES_SCHEMA__/$POSTGRES_SCHEMA/g" deployment/db-calqul.yml 
+  - sed -i "s/__NAMESPACE__/$NAMESPACE/g" deployment/pods/db-calqul.yml
+  - sed -i "s/__NAMESPACE_ENV__/$NAMESPACE_ENV/g" deployment/pods/db-calqul.yml
+  - sed -i "s/__POSTGRES_DB__/$POSTGRES_DB/g" deployment/pods/db-calqul.yml 
+  - sed -i "s/__POSTGRES_PASSWORD__/$POSTGRES_PASSWORD/g" deployment/pods/db-calqul.yml 
+  - sed -i "s/__POSTGRES_PORT__/$POSTGRES_PORT/g" deployment/pods/db-calqul.yml 
+  - sed -i "s/__POSTGRES_SERVER__/$POSTGRES_SERVER-$NAMESPACE_ENV/g" deployment/pods/db-calqul.yml 
+  - sed -i "s/__POSTGRES_USER__/$POSTGRES_USER/g" deployment/pods/db-calqul.yml 
+  - sed -i "s/__POSTGRES_SCHEMA__/$POSTGRES_SCHEMA/g" deployment/pods/db-calqul.yml 
 
   # DB service file
-  - sed -i "s/__NAMESPACE__/$NAMESPACE/g" deployment/service-calqul.yml
-  - sed -i "s/__NAMESPACE_ENV__/$NAMESPACE_ENV/g" deployment/service-calqul.yml
+  - sed -i "s/__NAMESPACE__/$NAMESPACE/g" deployment/services/db-calqul.yml
+  - sed -i "s/__NAMESPACE_ENV__/$NAMESPACE_ENV/g" deployment/services/db-calqul.yml
 
   # Job deployment file
-  - sed -i "s/__NAMESPACE__/$NAMESPACE/g" deployment/job-calqul.yml
-  - sed -i "s/__NAMESPACE_ENV__/$NAMESPACE_ENV/g" deployment/job-calqul.yml
-  - sed -i "s/__POSTGRES_PORT__/$POSTGRES_PORT/g" deployment/job-calqul.yml
+  - sed -i "s/__NAMESPACE__/$NAMESPACE/g" deployment/jobs/master-calqul.yml
+  - sed -i "s/__NAMESPACE_ENV__/$NAMESPACE_ENV/g" deployment/jobs/master-calqul.yml
+
+  # Git-lfs deployment file For test only
+  # - sed -i "s/__NAMESPACE__/$NAMESPACE/g" deployment/pods/git-calqul.yml
+  # - sed -i "s/__NAMESPACE_ENV__/$NAMESPACE_ENV/g" deployment/pods/git-calqul.yml
 
 # Applying openshift conf anchor
 .apply_confs: &apply_confs
+  # Secrets
+  - oc delete secret database-secret-$NAMESPACE_ENV
+  - oc apply -f deployment/secrets/database-secret.yml
+
+  # PVC Access
+  - oc delete pods --selector pod-name=calqul-pvc-access-$NAMESPACE_ENV #--grace-period=0 --force
+  - oc apply -f deployment/pods/pvc-calqul.yml
+
   # Db
   - oc delete pods --selector pod-name=calqul-db-$NAMESPACE_ENV #--grace-period=0 --force
-  - oc apply -f deployment/db-calqul.yml
-  - oc apply -f deployment/service-calqul.yml
+  - oc apply -f deployment/pods/db-calqul.yml
+  - oc apply -f deployment/services/db-calqul.yml
+  
+  # Git-lfs for test only
+  # - oc delete pods --selector pod-name=calqul-git-lfs-$NAMESPACE_ENV #--grace-period=0 --force
+  # - oc apply -f deployment/pods/git-calqul.yml
 
   # Job
-  - oc delete jobs --selector job-name=calqul-$NAMESPACE_ENV 
-  - oc create -f deployment/job-calqul.yml
-
+  - oc delete jobs --selector job-name=calqul-master-job-$NAMESPACE_ENV 
+  - oc create -f deployment/jobs/master-calqul.yml
+  
 ################################################################################
 #    CI/CD Stages
 ################################################################################
 stages:
   - Build Calqul
   - Deploy Calqul
+  - Deploy Calqul Production
 
 # *********************************************************************************************
 # * BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD *
@@ -79,9 +107,9 @@ stages:
 
 Build Calqul Python:
   stage: Build Calqul
+  environment: dev
   variables:
     DOCKER_TLS_CERTDIR: ""
-    NAMESPACE_ENV: "d01"
     IMAGE_NAME: calqul-python-$NAMESPACE_ENV
     IMAGE_DIR: ./Dockerfiles/python
   services:
@@ -103,9 +131,9 @@ Build Calqul Python:
 
 Build Calqul Postgis:
   stage: Build Calqul
+  environment: dev
   variables:
     DOCKER_TLS_CERTDIR: ""
-    NAMESPACE_ENV: "d01"
     IMAGE_NAME: calqul-db-$NAMESPACE_ENV
     IMAGE_DIR: ./Dockerfiles/db
   services:
@@ -122,22 +150,63 @@ Build Calqul Postgis:
   tags:
     - build-push-to-registry
 
+Build Calqul Git-lfs:
+  stage: Build Calqul
+  environment: dev
+  variables:
+    DOCKER_TLS_CERTDIR: ""
+    IMAGE_NAME: calqul-git-lfs-$NAMESPACE_ENV
+    IMAGE_DIR: ./Dockerfiles/git
+  services:
+    - docker:dind
+  script:
+    - *docker_login
+    - cd $IMAGE_DIR
+    - *build_and_push_image
+  rules:
+    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
+      changes: # build image only if sources have changed. 
+      - Dockerfiles/git/**/* # db scripts have changed
+      - .gitlab-ci.yml
+  tags:
+    - build-push-to-registry
 # *********************************************************************************************
 # * DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLO *
 # *********************************************************************************************
 
 Deploy Calqul:
   stage: Deploy Calqul
+  environment: dev
   variables:
-    NAMESPACE_ENV: 'd01'
     NAMESPACE: "ns-$TRIGRAMME-$NAMESPACE_ENV"
   before_script:
     - *prepare_deployment
-    - echo  $CI_COMMIT_BRANCH && echo $CI_DEFAULT_BRANCH
   script:
    - *apply_confs
   rules:
     - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
   tags:
-    #- ns-arb-d01 @TODO : Change after when the right namespace is available  
-    - ns-test-d01 # No possibility to put varaibles here :(
\ No newline at end of file
+    - ns-arb-d01
+
+# *********************************************************************************************
+# * MAIN BRANCH MAIN BRANCH MAIN BRANCH MAIN BRANCH MAIN BRANCH MAIN BRANCH MAIN BRANCH MAIN  *
+# *********************************************************************************************
+
+# BUILD
+
+# DEPLOY
+Deploy Calqul Production:
+  stage: Deploy Calqul Production
+  environment: production
+  variables:
+    NAMESPACE: "ns-$TRIGRAMME-$NAMESPACE_ENV"
+  before_script:
+    - *prepare_deployment
+  script:
+   - *apply_confs
+  only:
+    - main
+  tags:
+    # In production, the namespace will be different, as we can't put variables here :(,
+    # we will need anorher stage only for procudtion branch.
+    - ns-arb-d01
diff --git a/Dockerfiles/db/Dockerfile b/Dockerfiles/db/Dockerfile
index da39ae6fda1818159124fb900bcc431da65b411b..f7e3a4bb96ac28f7803fc56d2ff52e25d9ec29d4 100644
--- a/Dockerfiles/db/Dockerfile
+++ b/Dockerfiles/db/Dockerfile
@@ -1,7 +1,10 @@
 #
 # ARB::Base de données postgis pour le calcul du calque de plantabilité
 #
-FROM postgis/postgis
+FROM postgis/postgis:11-3.3-alpine
+
+# Arguments
+ARG NAMESPACE_ENV
 
 USER root
 
diff --git a/Dockerfiles/db/db-init/20_init_arb.sh b/Dockerfiles/db/db-init/20_init_arb.sh
index f27cbca971d17d9e9958024e60de0140669799b2..1dd178ad0e72aa1992de999e004850408ca33419 100644
--- a/Dockerfiles/db/db-init/20_init_arb.sh
+++ b/Dockerfiles/db/db-init/20_init_arb.sh
@@ -4,15 +4,22 @@
 
 # Working Directory
 cd /docker-entrypoint-initdb.d
+# id => uid=1001230000(1001230000) gid=0(root) groups=1001230000
+userid=$(id | cut -d'(' -f1 | cut -d'=' -f2)
 
 echo "--------------------------------------------------------------------------"
-echo " --> Boostraping de la base de donnees ARB"
+echo " --> Boostraping de la base de donnees '$POSTGRES_DB'"
 echo "     le repertoire est '$(pwd)'"
 echo "--------------------------------------------------------------------------"
 # Mettre ici le le schéma d'initailisation, les reprises de données, reéation de roles et grants, etc...
-echo "POSTGRES_DB=$POSTGRES_DB"         
-echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD"   
-echo "POSTGRES_PORT=$POSTGRES_PORT"       
-echo "POSTGRES_SERVER=$POSTGRES_SERVER"     
-echo "POSTGRES_USER=$POSTGRES_USER"       
-echo "POSTGRES_SCHEMA=$POSTGRES_SCHEMA"  
+# psql -U $POSTGRES_USER -d $POSTGRES_DB -c "CREATE ROLE $userid"
+
+psql -U $POSTGRES_USER -d $POSTGRES_DB -f /docker-entrypoint-initdb.d/sql/30-create_tables.sql
+psql -U $POSTGRES_USER -d $POSTGRES_DB -f /docker-entrypoint-initdb.d/sql/40-insert_data.sql
+
+# echo "POSTGRES_DB=$POSTGRES_DB"         
+# echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD"   
+# echo "POSTGRES_PORT=$POSTGRES_PORT"       
+# echo "POSTGRES_SERVER=$POSTGRES_SERVER"     
+# echo "POSTGRES_USER=$POSTGRES_USER"       
+# echo "POSTGRES_SCHEMA=$POSTGRES_SCHEMA"  
diff --git a/Dockerfiles/db/db-init/30-create_tables.sql b/Dockerfiles/db/db-init/sql/30-create_tables.sql
similarity index 100%
rename from Dockerfiles/db/db-init/30-create_tables.sql
rename to Dockerfiles/db/db-init/sql/30-create_tables.sql
diff --git a/Dockerfiles/db/db-init/40-insert_data.sql b/Dockerfiles/db/db-init/sql/40-insert_data.sql
similarity index 100%
rename from Dockerfiles/db/db-init/40-insert_data.sql
rename to Dockerfiles/db/db-init/sql/40-insert_data.sql
diff --git a/Dockerfiles/git/Dockerfile b/Dockerfiles/git/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..39bb34b75e92c70de6effa7f4aaaf18f6cb4ac24
--- /dev/null
+++ b/Dockerfiles/git/Dockerfile
@@ -0,0 +1,12 @@
+FROM alpine/git:v2.36.2
+
+# Arguments
+ARG NAMESPACE_ENV
+
+RUN apk add git-lfs 
+
+RUN git lfs install && \
+git config --global init.defaultBranch main
+
+ENTRYPOINT [ "/bin/sh" ]
+
diff --git a/Dockerfiles/git/update_data.sh b/Dockerfiles/git/update_data.sh
new file mode 100644
index 0000000000000000000000000000000000000000..0cd1498f6c59f22797e4c3e3a141ddd16015e0ee
--- /dev/null
+++ b/Dockerfiles/git/update_data.sh
@@ -0,0 +1,19 @@
+#/bin/sh
+
+echo "-------------------------------------------"
+echo "GIT_USERNAME=$GIT_USERNAME"
+echo "GIT_PASSWORD=$GIT_PASSWORD"
+echo "-------------------------------------------"
+
+mkdir -p /arb-data/source-files/data-recalcul-calque
+cd /arb-data/source-files/data-recalcul-calque
+
+# Init command does not do a 'git clone' beacause this is only working at the first init time.
+# It does a 'git init + git remote add + git fetch + git checkout' instead.
+# This works in every case.
+[[ ! -d ".git" ]] && { 
+    git init
+    git remote add origin https://${GIT_USERNAME}:${GIT_PASSWORD}@forge.grandlyon.com/erasme/sources-recalcul-calque.git
+}
+git checkout .
+git pull origin main
diff --git a/Dockerfiles/python/.env.example b/Dockerfiles/python/.env.example
index 2913a7752394055874ffc9dbac251f626d0a668a..14a12421cf721d4ba3e2aea58a2b7722b7bfa2bb 100644
--- a/Dockerfiles/python/.env.example
+++ b/Dockerfiles/python/.env.example
@@ -16,4 +16,4 @@ COMMUNES_FILE_PATH="/arb-data/source-files/data-recalcul-calque/communes_gl.geoj
 TARGET_PROJ="EPSG:2154"
 REMOVE_TEMP_FILE=False
 SKIP_EXISTING_DATA=True
-ENABLE_TRUNCATE=False
\ No newline at end of file
+ENABLE_TRUNCATE=False
diff --git a/Dockerfiles/python/Dockerfile b/Dockerfiles/python/Dockerfile
index b22e4d116686b2389441b3c9463391a62d04ada2..6941d34f5cee4d227f7e7c3348d2cc8f997b4042 100644
--- a/Dockerfiles/python/Dockerfile
+++ b/Dockerfiles/python/Dockerfile
@@ -1,62 +1,71 @@
-##################################################################################
-#  Taken from https://github.com/Toblerity/Fiona/issues/1063
-##################################################################################
-FROM debian:buster-slim
-
-# Getting some Args and Setting some ENV variables
-ENV CPLUS_INCLUDE_PATH="/usr/include/gdal"
-ENV C_INCLUDE_PATH="/usr/include/gdal"
-ENV PROJ_LIB="/usr/local/lib/python3.7/dist-packages/pyproj/proj_dir/share/proj"
-ENV GDAL_DATA="/usr/local/lib/python3.7/dist-packages/fiona/gdal_data/"
-
-# Basic libs and install python3.7
-RUN apt-get update && apt-get upgrade -y \
-&& apt-get install -y procps wget python3.7 python3-pip gdal-bin libgdal-dev apt-utils git \
-&& apt-get clean \
-apt-get -y install proj proj-dev && \
-# https://stackoverflow.com/questions/70508775/error-could-not-build-wheels-for-pycairo-which-is-required-to-install-pyprojec
-apt-get install -y libcairo2 libcairo2-dev && \
-################################# Debug and diagnose tools #################################
-# apt-get install -qy apt-utils vim iputils-ping net-tools telnet curl postgresql-client &&\
-############################################################################################
-rm -rf /var/lib/apt/lists/*
-
-COPY ./scripts/requirements.txt requirements.txt
-
-# Pip
-RUN python3 -m pip install --no-cache-dir --upgrade pip \
-&& pip install --no-cache-dir --global-option=build_ext --global-option="-I/usr/include/gdal" GDAL==`gdal-config --version` \
-&& pip install --no-cache-dir --ignore-installed PyYAML \
-# https://stackoverflow.com/questions/70508775/error-could-not-build-wheels-for-pycairo-which-is-required-to-install-pyprojec
-&& pip install --no-cache-dir manimlib \
-&& pip install --no-cache-dir manimce \
-# 
-&& pip install --no-cache-dir --upgrade -r requirements.txt
-
-# Add a non root user (OpenShift Requirements)
-RUN addgroup calquluser && \ 
-useradd calquluser -g calquluser --home /app && \
-mkdir -p /app && \ 
-mkdir -p /app/logs && \
-mkdir -p /app/tmp && \
-chown -R calquluser:calquluser /app && \
-chmod 777 /app/logs /app/tmp
-
-
-WORKDIR /app
-
-USER calquluser
-
-# Add app 
-COPY --chown=calquluser:calquluser ./scripts/*.py ./
-COPY --chown=calquluser:calquluser --chmod= ./scripts/*.sh ./
-COPY --chown=calquluser:calquluser ./sql ./
-COPY --chown=calquluser:calquluser .env ./
-
-RUN chmod 755 ./*.sh
-
-# Launch calculation
-CMD [ "/bin/bash", "./launch.sh" ]
-
-# launch testing script
-# CMD [  "/bin/bash", "./test-env.sh" ]
+##################################################################################
+#  Taken from https://github.com/Toblerity/Fiona/issues/1063
+##################################################################################
+FROM debian:buster-slim
+
+# Arguments
+ARG NAMESPACE_ENV
+ARG DB_HOST_ENV
+ARG DB_PORT_ENV
+ARG DB_NAME_ENV
+ARG DB_USER_ENV
+
+# Getting some Args and Setting some ENV variables
+ENV CPLUS_INCLUDE_PATH="/usr/include/gdal"
+ENV C_INCLUDE_PATH="/usr/include/gdal"
+ENV PROJ_LIB="/usr/local/lib/python3.7/dist-packages/pyproj/proj_dir/share/proj"
+ENV GDAL_DATA="/usr/local/lib/python3.7/dist-packages/fiona/gdal_data/"
+
+ENV NS_ENV=$NAMESPACE_ENV
+ENV DB_HOST="$DB_HOST_ENV-$NAMESPACE_ENV"
+ENV DB_PORT=$DB_PORT_ENV
+ENV DB_NAME=$DB_NAME_ENV
+ENV DB_USER=$DB_USER_ENV
+
+# Basic libs and install python3.7
+RUN apt-get update && apt-get upgrade -y \
+&& apt-get install -y procps wget python3.7 python3-pip gdal-bin libgdal-dev apt-utils git \
+&& apt-get clean \
+apt-get -y install proj proj-dev && \
+# https://stackoverflow.com/questions/70508775/error-could-not-build-wheels-for-pycairo-which-is-required-to-install-pyprojec
+apt-get install -y libcairo2 libcairo2-dev && \
+################################# Debug and diagnose tools #################################
+apt-get install -qy apt-utils vim iputils-ping net-tools telnet curl && \
+apt-get install -qy postgresql-client && \
+############################################################################################
+rm -rf /var/lib/apt/lists/*
+
+COPY ./scripts/requirements.txt requirements.txt
+
+# Pip
+RUN python3 -m pip install --no-cache-dir --upgrade pip \
+&& pip install --no-cache-dir --global-option=build_ext --global-option="-I/usr/include/gdal" GDAL==`gdal-config --version` \
+&& pip install --no-cache-dir --ignore-installed PyYAML \
+# https://stackoverflow.com/questions/70508775/error-could-not-build-wheels-for-pycairo-which-is-required-to-install-pyprojec
+&& pip install --no-cache-dir manimlib \
+&& pip install --no-cache-dir manimce \
+&& pip install --no-cache-dir --upgrade -r requirements.txt
+
+# Add a non root user (OpenShift Requirements)
+RUN addgroup calquluser && \ 
+useradd calquluser -g calquluser --home /app && \
+mkdir -p /app && \ 
+mkdir -p /app/logs && \
+mkdir -p /app/tmp && \
+chown -R calquluser:calquluser /app && \
+chmod 777 /app/logs /app/tmp /app
+
+WORKDIR /app
+USER calquluser
+
+# Add app 
+COPY --chown=calquluser:calquluser ./scripts/*.py ./
+COPY --chown=calquluser:calquluser ./scripts/*.sh ./
+COPY --chown=calquluser:calquluser ./sql ./
+COPY --chown=calquluser:calquluser .env ./
+
+RUN chmod 755 ./*.sh
+
+# Launch calculation
+# Documentation : https://stackoverflow.com/questions/40454470/how-can-i-use-a-variable-inside-a-dockerfile-cmd
+CMD [ "/bin/sh", "-c", "/app/launch.sh $NS_ENV $DB_HOST $DB_PORT $DB_NAME $DB_USER" ]
\ No newline at end of file
diff --git a/Dockerfiles/python/scripts/launch.sh b/Dockerfiles/python/scripts/launch.sh
index 8aa29f1c0977c0ee7bf8dbbf277c0015a54652f9..fe31a612beca5e25bdf3abd6c6c06bc53ad5f27e 100644
--- a/Dockerfiles/python/scripts/launch.sh
+++ b/Dockerfiles/python/scripts/launch.sh
@@ -2,13 +2,24 @@
 ################################################################################
 # ARB : Lancement du recalcul des indices du calque de plantabilité.
 ################################################################################
+namespace_env=$1
+DB_HOST=$2
+DB_PORT=$3
+DB_NAME=$4
+DB_USER=$5
+
 DATA_REPO="https://forge.grandlyon.com/erasme/data-recalcul-calque.git"
 
 scripts_dir="/app"
 data_dir="/arb-data/source-files/data-recalcul-calque"
+backup_dir="/arb-data/generated-files"
 stage=1
 line="\e[39m-----------------------------------------------"
 need_update=1
+today=$(date +"%Y%m%d")
+dump_name="calque-plantabilite-$namespace_env-$today"
+tag="1.0" # @TODO : should be parametric from last commit on data repo.
+archive_version="v$tag-$today"
 
 ################################################################################
 # functions
@@ -40,53 +51,76 @@ check () {
   fi;
 }
 
-################################################################################
-mkdir -p $data_dir
-
-stage "Check source files in $data_dir"
-cd $data_dir
-
-current_commit=$(git rev-parse --short HEAD)
-if [ $? -eq 128 ]; then
-  comment "Data repository is empty. Is this your first time, young Padawan ?"
-  comment "Cloning repo, it can take a while..."
-  cd ..
-  git clone $DATA_REPO 
-  need_update=0
-else
-  comment "Current commit is $current_commit"
-  cd $data_dir
-fi;
-
-# Checking for update...
-[ $(git rev-parse HEAD) = $(git ls-remote $(git rev-parse --abbrev-ref @{u} | sed 's/\// /g') | cut -f1) ] &&  need_update=0 ||  need_update=1
-
-if [ $need_update -eq 0 ]; then
-  # We are up to date
-  comment "\e[32mData are up to date."
-else
-  comment "\e[93mNew version of source data is available !\e[39m"
-  git pull origin main
-  new_commit=$(git rev-parse --short HEAD)
-  comment "New commit is : \e[93m'$new_commit'\e[39m"
-  git diff --compact-summary $current_commit $new_commit
-fi;
-
-stage "Launch computations..."
+# Overloading 'Exit' builtin function to get rid of 
+# the running state every where in the code
+exit () {
+  error_code=$1
+  echo "Exiting '$error_code'. (Sleeping for 1h for debug purpose)"
+  sleep 3600
+  builtin exit $error_code
+}
+
+#---------------------------------------------------------------
+# M A I N
+#---------------------------------------------------------------
+stage "Launch ENV Initializations..."
 cd $scripts_dir
+
+# All the needed variables a given by parameter passing
+comment "command line is '$0 $namespace_env $DB_HOST $DB_PORT $DB_NAME $DB_USER'"
+
+comment "psql version..."
+psql -V
+check
+
+comment "Postgres server says : "
+pg_isready -d $DB_NAME -h $DB_HOST -p $DB_PORT -U $DB_USER
+check
+
+stage "Launch Database Initializations..."
 comment "Init communes"
 python3 main.py initCommunes
 
-python3 main.py initGrid
+comment "Init Grid"
+python3 main.py initGrid 5
+comment "InitDatas"
 python3 main.py initDatas
 
-# Multiprocessing task
-# python3 main.py computeFactors
+stage "Launch Computations..."
+comment "Computing factors"
+python3 main.py computeFactors # Possibly Multiprocessing task, Should have a list of townships
 
-# python3 main.py computeIndices
+comment "Computing Indices"
+python3 main.py computeIndices
 
-# Launching everything, it is possible to give a list of township
+# Launching everything, it is possible to give a list of townships
 # python3 main.py computeAll
 
-stage "Sleeping a while for debug purpose..."
-sleep 300
\ No newline at end of file
+stage "Dumping result database"
+#
+# Option "--no-password"  is set not to have to provide password by prompt.
+# This requires the presnece of /root/.pgpass file (600 mode) with such a content : "hostname:port:database:username:password"
+# https://stackoverflow.com/questions/50404041/pg-dumpall-without-prompting-password
+#
+comment "pg_dump -n base -h ${DB_HOST} -U ${DB_USER} --no-password --clean --if-exists --file=$backup_dir/$dump_name.sql ${DB_NAME}"
+pg_dump -n base -h ${DB_HOST} -U ${DB_USER} --no-password --clean --if-exists --file=$backup_dir/$dump_name.sql ${DB_NAME}
+check
+
+comment "Commpressing dump as $dump_name.tgz"
+tar cvzf $backup_dir/$dump_name.tgz $backup_dir/$dump_name.sql
+check
+
+stage "Uploading archive in repo with tag $archive_version"
+comment "Upload to file server 'Geo'"
+
+stage "Cleanup backup dir '$backup_dir'"
+comment "old sql files"
+find $backup_dir -name "*.sql" -exec rm -f {} \;
+check
+
+comment "old tgz files"
+find $backup_dir -name "*.tgz" -mtime +5 -exec rm -f {} \;
+check
+
+stage "End of script."
+exit 0
\ No newline at end of file
diff --git a/Dockerfiles/python/scripts/main.py b/Dockerfiles/python/scripts/main.py
index f18b195a035513569c27db66cc25059fdddec27a..2a21b9f01807cdf5332e5da584709376cab6d2b8 100644
--- a/Dockerfiles/python/scripts/main.py
+++ b/Dockerfiles/python/scripts/main.py
@@ -947,7 +947,7 @@ def main():
     if argv:
         firstArgv = sys.argv[1:][0]
 
-        # Switch case...
+        # Sfs2itch case...
         if firstArgv == 'initCommunes':
             initCommunes()
         elif firstArgv == 'initGrid':
diff --git a/Dockerfiles/python/scripts/utils.py b/Dockerfiles/python/scripts/utils.py
index 1a9c71eb26dc3a9d76da1663bd4e5377193ed324..213f83c9523aeeb01f4cc2eaf7d48d198a337758 100644
--- a/Dockerfiles/python/scripts/utils.py
+++ b/Dockerfiles/python/scripts/utils.py
@@ -395,7 +395,7 @@ def wfs2gp_df(layer_name, url, bbox=None, wfs_version="2.0.0", outputFormat='app
     # Concat params
     params = dict(service='WFS', version=wfs_version,request='GetFeature', typeName=layer_name, outputFormat=outputFormat, crs=targetProj)
     # Load data in Bytes
-    with BytesCollection(requests.get(url,params=params).content) as f:
+    with BytesCollection(requests.get(url,params=params, timeout=600).content) as f:
         # Make GDF
         df = gp.GeoDataFrame.from_features(f)
     
diff --git a/deployment/configMaps/pgdump-calqul.yml b/deployment/configMaps/pgdump-calqul.yml
new file mode 100644
index 0000000000000000000000000000000000000000..b2eaf405c04ce44bc1ab00dd9010c1045aaf8385
--- /dev/null
+++ b/deployment/configMaps/pgdump-calqul.yml
@@ -0,0 +1,22 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: calqul-pgdump-__NAMESPACE_ENV__
+  namespace: __NAMESPACE__
+  labels:
+    job-name: calqul-job-pgdump-__NAMESPACE_ENV__
+data:
+  psqldump.sh: |
+    #!/bin/bash
+    BACKUPDIR="/arb-data/backup"
+    ls -l /arb-data
+    while [ -f /arb-data/run/python-running ]
+    do
+      sleep 5
+      echo "Waiting for calculation to finish..."
+    done
+    echo "Generating a Postgres Dump..."
+    pg_dump -n "__POSTGRES_SCHEMA__" __POSTGRES_DB__ > ${BACKUPDIR}/__POSTGRES_SCHEMA__-__POSTGRES_DB___-__NAMESPACE_ENV___$(date -I).sql
+    echo "Deleting dumps older than 30 days"
+    find ${BACKUPDIR} -name "*.sql" -mtime +30 -exec rm -rf {} \;
+    sleep 300
\ No newline at end of file
diff --git a/deployment/job-calqul.yml b/deployment/job-calqul.yml
deleted file mode 100644
index 5f986c8778f7c21d636c73c5eed3ac4534b2f016..0000000000000000000000000000000000000000
--- a/deployment/job-calqul.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-apiVersion: batch/v1
-kind: Job
-metadata:
-  name: calqul-__NAMESPACE_ENV__
-spec:
-  # maximum duration the job can run => 40h 
-  activeDeadlineSeconds: 144000 
-  template:         
-    metadata:
-      name: calqul-__NAMESPACE_ENV__
-    spec:
-      volumes:
-      - name: arb-data
-        persistentVolumeClaim: 
-          claimName: pvc-01-__NAMESPACE__-claim
-      containers:
-      - name: calqul-python-__NAMESPACE_ENV__
-        image: registry.forge.grandlyon.com/erasme/script-recalcul-calque/calqul-python-__NAMESPACE_ENV__
-        volumeMounts:
-        - name: arb-data
-          mountPath: "/arb-data/source-files"
-          # subpath: source-files
-        - name: arb-data
-          mountPath: "/arb-data/generated-files"
-          # subpath: out
-      restartPolicy: Never
-
-  # Waiting for the Database POD to be ready. 
-  # ~~ NOT SURE IT IS WORKING ??? ~~
-  #
-  # initContainers:
-  # - name: wait-for-database
-  #   image: busybox:latest
-  #   imagePullPolicy: IfNotPresent
-  #   command: ['sh', '-c', 'until nc -vz ${POD_NAME}.${POD_NAMESPACE} __POSTGRES_PORT__; do echo "Waiting for ${POD_NAME} to get ready..."; sleep 3; done;']
-  #   env:
-  #     - name: POD_NAME
-  #       value: calqul-db-__NAMESPACE_ENV__
-  #     - name: POD_NAMESPACE
-  #       valueFrom:
-  #         fieldRef:
-  #           fieldPath: metadata.namespace
\ No newline at end of file
diff --git a/deployment/jobs/dump-calqul.yml b/deployment/jobs/dump-calqul.yml
new file mode 100644
index 0000000000000000000000000000000000000000..99a2d0671efd21eec07431d474fde1f994c46620
--- /dev/null
+++ b/deployment/jobs/dump-calqul.yml
@@ -0,0 +1,48 @@
+apiVersion: batch/v1
+kind: Job
+metadata:
+  name: calqul-job-pgdump-__NAMESPACE_ENV__
+spec:
+  # maximum duration the job can run => 1h 
+  activeDeadlineSeconds: 3600 
+  template:         
+    metadata:
+      name: calqul-job-pgdump-__NAMESPACE_ENV__
+    spec:
+      volumes:
+      - name: arb-data
+        persistentVolumeClaim: 
+          claimName: pvc-01-__NAMESPACE__-claim
+      - name: psqldump-volume
+        configMap:
+          name: calqul-pgdump-__NAMESPACE_ENV__
+          defaultMode: 0755
+      containers:
+      - name: calqul-job-pgdump-__NAMESPACE_ENV__
+        # image: "postgres:11"
+        image: registry.forge.grandlyon.com/erasme/script-recalcul-calque/calqul-db-__NAMESPACE_ENV__
+
+        env:
+        - name: POSTGRES_DB
+          value: "__POSTGRES_DB__"
+        - name: POSTGRES_PASSWORD
+          value: "__POSTGRES_PASSWORD__"
+        - name: POSTGRES_PORT
+          value: "__POSTGRES_PORT__"
+        - name: POSTGRES_SERVER
+          value: "__POSTGRES_SERVER__"
+        - name: POSTGRES_USER
+          value: "__POSTGRES_USER__"
+        - name: POSTGRES_SCHEMA
+          value: "__POSTGRES_SCHEMA__"
+        command: ["/bin/bash", "-c", "/usr/local/bin/psqldump.sh"]
+        volumeMounts:
+        - name: psqldump-volume
+          mountPath: "/usr/local/bin"
+        - name: arb-data
+          mountPath: "/arb-data"
+          subpath: "backup"
+      restartPolicy: Never
+
+
+
diff --git a/deployment/jobs/master-calqul.yml b/deployment/jobs/master-calqul.yml
new file mode 100644
index 0000000000000000000000000000000000000000..8497f71b3385ae17be9d9772bd953d5b472980ab
--- /dev/null
+++ b/deployment/jobs/master-calqul.yml
@@ -0,0 +1,75 @@
+apiVersion: batch/v1
+kind: Job
+metadata:
+  name: calqul-master-job-__NAMESPACE_ENV__
+spec:
+  # maximum duration the job can run => 40h 
+  activeDeadlineSeconds: 144000 
+  template:         
+    metadata:
+      name: calqul-master-job-__NAMESPACE_ENV__
+    spec:
+      volumes:
+      - name: arb-data
+        persistentVolumeClaim: 
+          claimName: pvc-01-__NAMESPACE__-claim
+      containers:
+      - name: calqul-python-__NAMESPACE_ENV__
+        image: registry.forge.grandlyon.com/erasme/script-recalcul-calque/calqul-python-__NAMESPACE_ENV__
+      resources:
+        requests:
+          cpu: 200m
+          memory: 256Mi
+        limits:
+          cpu: 1
+          memory: 1024Mi
+        env:
+          - name: PGPASSWORD
+            valueFrom:
+              secretKeyRef:
+                name: database-secret-__NAMESPACE_ENV__
+                key: password 
+          - name: http_proxy
+            value: "proxyhttppro.grandlyon.fr:8080"
+          - name: https_proxy
+            value: "proxyhttppro.grandlyon.fr:8080"
+        volumeMounts:
+        - name: arb-data
+          mountPath: "/arb-data/source-files"
+        - name: arb-data
+          mountPath: "/arb-data/generated-files"
+        - name: arb-data
+          mountPath: "/arb-data/run" # storing a file telling export-job the state of python script
+      restartPolicy: Never
+
+      # Clone or update sources data before calculation
+      initContainers:
+      - name: init-data-repo
+        image: registry.forge.grandlyon.com/erasme/script-recalcul-calque/calqul-git-lfs-__NAMESPACE_ENV__
+        env:
+          - name: GIT_USERNAME
+            valueFrom:
+              secretKeyRef:
+                name: arb-data-access-token
+                key: username
+          - name: GIT_PASSWORD
+            valueFrom:
+              secretKeyRef:
+                name: arb-data-access-token
+                key: password
+          - name: HTTP_PROXY
+            value: "http://proxyhttppro.grandlyon.fr:8080"
+          - name: HTTPS_PROXY
+            value: "http://proxyhttppro.grandlyon.fr:8080"
+        imagePullPolicy: IfNotPresent
+        command:
+        - /bin/sh
+        - -c
+        - if [ -d /arb-data/source-files/data-recalcul-calque/.git ]; then cd /arb-data/source-files/data-recalcul-calque; git pull origin main; else mkdir -p /arb-data/source-files/data-recalcul-calque; cd /arb-data/source-files; git lfs clone https://${GIT_USERNAME}:${GIT_PASSWORD}@forge.grandlyon.com/erasme/sources-recalcul-calque.git ./data-recalcul-calque/; fi; echo "Data ready !";
+        # -  rm -rf /arb-data/source-files/data-recalcul-calque; mkdir -p /arb-data/source-files/data-recalcul-calque; cd /arb-data/source-files; git lfs clone https://arb-data-access-token:sj_-yDyc3nnvAmWmP76h@forge.grandlyon.com/erasme/sources-recalcul-calque.git ./data-recalcul-calque/;  echo "Data ready !"; 
+        volumeMounts:
+        - name: arb-data
+          mountPath: "/arb-data/source-files"
+        - name: arb-data
+          mountPath: "/arb-data"
+          subpath: "run"
\ No newline at end of file
diff --git a/deployment/db-calqul.yml b/deployment/pods/db-calqul.yml
similarity index 93%
rename from deployment/db-calqul.yml
rename to deployment/pods/db-calqul.yml
index 0e06ff3fbcf2324889d492ea5b6cc09aef57e969..cb1cd5258dd277205b7e459c9ca7f55ab758b74d 100644
--- a/deployment/db-calqul.yml
+++ b/deployment/pods/db-calqul.yml
@@ -22,7 +22,7 @@ spec:
       imagePullSecrets:
         - name: forge-secret
       volumes:
-        - name: db-data
+        - name: arb-data
           persistentVolumeClaim: 
             claimName: pvc-01-__NAMESPACE__-claim
       containers:
@@ -35,7 +35,7 @@ spec:
         readinessProbe:
           tcpSocket:
             port: 5432
-          initialDelaySeconds: 120
+          initialDelaySeconds: 15
           periodSeconds: 10
         livenessProbe:
           tcpSocket:
@@ -68,7 +68,6 @@ spec:
         volumeMounts:
           # need a subpath as postgres wants an empty folder (the mounted folder `$PGDATA` has a `lost+found` directory)
           # see https://stackoverflow.com/questions/51168558/how-to-mount-a-postgresql-volume-using-aws-ebs-in-kubernete
-          - name: db-data
+          - name: arb-data
             mountPath: "/arb-data"
             subpath: pgdata
-
diff --git a/deployment/pods/git-calqul.yml b/deployment/pods/git-calqul.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5338e156a62e3b36837b7c3d513e1c49c8ab6c7b
--- /dev/null
+++ b/deployment/pods/git-calqul.yml
@@ -0,0 +1,55 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: calqul-git-lfs-__NAMESPACE_ENV__
+  namespace: __NAMESPACE__
+  labels:
+    apps: calqul-git-lfs-__NAMESPACE_ENV__
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: calqul-git-lfs-__NAMESPACE_ENV__
+      role: primary
+      tier: data-sources
+  template:
+    metadata:
+      labels:
+        app: calqul-git-lfs-__NAMESPACE_ENV__
+        role: primary
+        tier: data-sources
+    spec:
+      imagePullSecrets:
+        - name: forge-secret
+      volumes:
+        - name: arb-data
+          persistentVolumeClaim: 
+            claimName: pvc-01-__NAMESPACE__-claim
+      containers:
+      - name: calqul-git-lfs-__NAMESPACE_ENV__
+        image: registry.forge.grandlyon.com/erasme/script-recalcul-calque/calqul-git-lfs-__NAMESPACE_ENV__
+        env:
+          - name: GIT_USERNAME
+            valueFrom:
+              secretKeyRef:
+                name: arb-data-access-token
+                key: username
+          - name: GIT_PASSWORD
+            valueFrom:
+              secretKeyRef:
+                name: arb-data-access-token
+                key: password
+          - name: HTTP_PROXY
+            value: "http://proxyhttppro.grandlyon.fr:8080"
+          - name: HTTPS_PROXY
+            value: "http://proxyhttppro.grandlyon.fr:8080"
+        command:
+        - /bin/sh
+        - -c
+        - sleep 3600;
+        # - rm -rf /arb-data/source-files/data-recalcul-calque; mkdir -p /arb-data/source-files/data-recalcul-calque; cd /arb-data/source-files/; git lfs install --force; git clone https://${GIT_USERNAME}:${GIT_PASSWORD}@forge.grandlyon.com/erasme/sources-recalcul-calque.git ./data-recalcul-calque/; cd data-recalcul-calque; git pull origin main;
+        volumeMounts:
+        - name: arb-data
+          mountPath: "/arb-data/source-files"
+        - name: arb-data
+          mountPath: "/arb-data/generated-files"
diff --git a/deployment/pods/pvc-calqul.yml b/deployment/pods/pvc-calqul.yml
new file mode 100644
index 0000000000000000000000000000000000000000..f9fea80de8f93b84cd4f515f818e1c6b375e51c2
--- /dev/null
+++ b/deployment/pods/pvc-calqul.yml
@@ -0,0 +1,36 @@
+#
+# Pod d'accès au PVC. Utile pour remettre l'environnement de travail à blanc, y compris les fichiers Postgres.
+# 
+kind: Deployment
+apiVersion: apps/v1
+metadata:
+  name: calqul-pvc-__NAMESPACE_ENV__
+  namespace: __NAMESPACE__
+  labels:
+    app: calqul-pvc-__NAMESPACE_ENV__
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: calqul-pvc-__NAMESPACE_ENV__
+      role: secondary
+      tier: exploitation  
+  template:
+    metadata:
+      labels:
+        app: calqul-pvc-__NAMESPACE_ENV__
+        role: secondary
+        tier: exploitation
+    spec:
+      containers:
+        - name: calqul-pvc-__NAMESPACE_ENV__
+          image: registry.gitlab.grandlyon.fr/openshift-as-code/reposit-gl/busybox:1.0
+          command: ["sh", "-c", "tail -f /dev/null"]
+          imagePullPolicy: Always
+          volumeMounts:
+            - mountPath: /mnt/data
+              name: data
+      volumes:
+        - name: data
+          persistentVolumeClaim:
+            claimName: pvc-01-__NAMESPACE__-claim
\ No newline at end of file
diff --git a/deployment/secrets/database-secret.yml b/deployment/secrets/database-secret.yml
new file mode 100644
index 0000000000000000000000000000000000000000..598e57768b1ab0b54f2c2e68bf573a6d06030348
--- /dev/null
+++ b/deployment/secrets/database-secret.yml
@@ -0,0 +1,9 @@
+apiVersion: v1
+kind: Secret
+metadata:
+  name: database-secret-__NAMESPACE_ENV__
+  namespace: ns-arb-d01
+type: Opaque 
+data: 
+  username: UEdQQVNTV09SRA==
+  password: Y2FscXVs
\ No newline at end of file
diff --git a/deployment/service-calqul.yml b/deployment/services/db-calqul.yml
similarity index 100%
rename from deployment/service-calqul.yml
rename to deployment/services/db-calqul.yml