diff --git a/pica-mobilizon/app/Dockerfile b/pica-mobilizon/app/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..492d30a55d729446d84105491739190b2b2dcc6b
--- /dev/null
+++ b/pica-mobilizon/app/Dockerfile
@@ -0,0 +1,55 @@
+# inspired from https://framagit.org/Windyo/mobilizon/-/blob/a1e0b9730e9c63de6058c3f5d803b2743efafed4/docker/app/Dockerfile
+
+# **** Temporary docker image ****
+# elixir version MUST match
+FROM elixir:1.10.4 as builder
+ARG MOBILIZON_GIT_URL
+ARG MOBILIZON_GIT_TAG
+ARG NODE_V
+ENV MIX_ENV prod
+ENV INSTANCE_CONFIG prod
+RUN apt-get update -y \
+	&& apt-get install -y apt-utils \
+	&& curl -sL https://deb.nodesource.com/setup_"$NODE_V".x | bash - \
+	&& apt-get install -y nodejs build-essential inotify-tools postgresql-client git curl gnupg xvfb libgtk-3-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 python3-pip cmake \
+	&& apt-get clean \
+	&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
+	&& npm install -g yarn wait-on
+RUN useradd -ms /bin/bash -p ! mobilizon
+USER mobilizon
+WORKDIR /home/mobilizon
+RUN git clone -b "$MOBILIZON_GIT_TAG" "$MOBILIZON_GIT_URL" ./build
+WORKDIR /home/mobilizon/build
+COPY ./prod.secret.exs /home/mobilizon/build/config/
+RUN mix local.hex --force \
+	&& mix local.rebar --force
+RUN mix deps.get
+RUN mix deps.compile
+RUN mix compile
+WORKDIR /home/mobilizon/build/js
+RUN yarn install \
+	&& yarn run build
+WORKDIR /home/mobilizon/build
+RUN rm -rf ./.dockerignore ./.gitignore ./.gitlab-ci.yml ./CHANGELOG.md ./CONTRIBUTING.md ./docker ./docker-compose.test.yml ./docker-compose.yml ./Dockerfile ./docs ./js ./Makefile ./README.md ./SECURITY.md ./setup_db.psql ./support \
+        && curl https://dbip.mirror.framasoft.org/files/dbip-city-lite-latest.mmdb --output GeoLite2-City.mmdb -s \
+        && mv GeoLite2-City.mmdb /home/mobilizon/build/priv/data/GeoLite2-City.mmdb
+
+# Final docker image
+FROM elixir:1.10.4-slim
+ENV INIT=FALSE \
+	ADMIN_EMAIL=test@test.com \
+	ADMIN_PASSWORD=passwd \
+	MIX_ENV=prod \
+	INSTANCE_CONFIG=prod
+RUN useradd -ms /bin/bash -p ! mobilizon  \
+        && apt-get update \
+ 	&& apt-get install -y git \
+        && apt-get clean \
+        && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
+COPY --from=builder /home/mobilizon/build/ /home/mobilizon/live/
+COPY --from=builder /home/mobilizon/.mix/ /home/mobilizon/.mix/
+COPY ./entrypoint.sh /home/mobilizon/entrypoint.sh
+RUN chmod +x /home/mobilizon/entrypoint.sh
+WORKDIR /home/mobilizon/live
+USER mobilizon
+ENTRYPOINT [ "/home/mobilizon/entrypoint.sh" ]
diff --git a/pica-mobilizon/app/entrypoint.sh b/pica-mobilizon/app/entrypoint.sh
new file mode 100755
index 0000000000000000000000000000000000000000..b8245708da86f7ede2f47b6522997d5eaad40d78
--- /dev/null
+++ b/pica-mobilizon/app/entrypoint.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+set -e
+export MIX_ENV=prod
+if [ "$INIT" = TRUE ]; then
+	echo "Initialization. Only run this once."
+	mix ecto.migrate 
+	mix mobilizon.users.new "$ADMIN_EMAIL" --admin --password "$ADMIN_PASSWORD" 
+	mix phx.server 
+else
+	echo "Running normal mode."
+	mix ecto.migrate --no-deps-check
+	mix phx.server --no-deps-check
+fi
+
+exec "$@"
diff --git a/pica-mobilizon/app/prod.secret.exs b/pica-mobilizon/app/prod.secret.exs
new file mode 100644
index 0000000000000000000000000000000000000000..a653f5589b5aa7f8b6b60597fd57b940ef31afcb
--- /dev/null
+++ b/pica-mobilizon/app/prod.secret.exs
@@ -0,0 +1,52 @@
+# Mobilizon instance configuration
+# Via Thomas Clavier
+
+# Warning : cfg is overrided by the ../docker-compose.yml and ../secrets/*.secrets files
+
+import Config
+
+config :mobilizon, Mobilizon.Web.Endpoint,
+   url: [host: System.get_env("MOBILIZON_INSTANCE_HOST", "mobilizon.lan")],
+   http: [port: System.get_env("MOBILIZON_INSTANCE_LISTEN_PORT", "4000")],
+   secret_key_base: System.get_env("MOBILIZON_SECRET_KEY_BASE", "ZcvexeC7cnwtKR8ADMBDwrYu2aYHUyjrOu4yA181Z112HNu/I5jyRleo4hoxOMqQ")
+
+config :mobilizon, Mobilizon.Web.Auth.Guardian,
+  secret_key: System.get_env("MOBILIZON_SECRET_KEY", "KsdUIvp6hQ7b97yxUZcDQyGH0g4LS3fF0OvIsIATpkKzd1MDvSS4KexWXsjXeMQZ")
+
+config :mobilizon, :instance,
+  name: System.get_env("MOBILIZON_INSTANCE_NAME", "Mobilizon"),
+  description: "Change this to a proper description of your instance",
+  hostname: System.get_env("MOBILIZON_INSTANCE_HOST", "mobilizon.lan"),
+  registrations_open: System.get_env("MOBILIZON_INSTANCE_REGISTRATIONS_OPEN", "false"),
+  demo: false,
+  allow_relay: true,
+  federating: true,
+  email_from: System.get_env("MOBILIZON_INSTANCE_EMAIL", "noreply@mobilizon.lan"),
+  email_reply_to: System.get_env("MOBILIZON_INSTANCE_EMAIL", "noreply@mobilizon.lan")
+
+config :mobilizon, Mobilizon.Storage.Repo,
+  adapter: Ecto.Adapters.Postgres,
+  username: System.get_env("MOBILIZON_DATABASE_USERNAME", "username"),
+  password: System.get_env("MOBILIZON_DATABASE_PASSWORD", "password"),
+  database: System.get_env("MOBILIZON_DATABASE_DBNAME", "mobilizon"),
+  hostname: System.get_env("MOBILIZON_DATABASE_HOST", "postgres"),
+  port: System.get_env("MOBILIZON_DATABASE_PORT", "5432"),
+  pool_size: 10
+
+config :mobilizon, Mobilizon.Web.Email.Mailer,
+  adapter: Bamboo.SMTPAdapter,
+  server: System.get_env("MOBILIZON_SMTP_SERVER", "localhost"),
+  hostname: System.get_env("MOBILIZON_SMTP_HOSTNAME", "localhost"),
+  port: System.get_env("MOBILIZON_SMTP_PORT", "25"),
+  username: System.get_env("MOBILIZON_SMTP_USERNAME", nil),
+  password: System.get_env("MOBILIZON_SMTP_PASSWORD", nil),
+  # can be `:always` or `:never`
+  tls: :if_available,
+  allowed_tls_versions: [:tlsv1, :"tlsv1.1", :"tlsv1.2", :"tlsv1.3"],
+  # can be `true`
+  ssl: System.get_env("MOBILIZON_SMTP_SSL", "false"),
+  retries: 1,
+  # can be `true`
+  no_mx_lookups: false,
+  # can be `:if_available`. If your smtp relay requires authentication set it to `:always`.
+  auth: :always
diff --git a/pica-mobilizon/db/Dockerfile b/pica-mobilizon/db/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..01800da65b9d967608bc1421757d56cf1f9a5e8f
--- /dev/null
+++ b/pica-mobilizon/db/Dockerfile
@@ -0,0 +1,5 @@
+# Same Dockerfile as official image, but different extensions :
+# https://github.com/postgis/docker-postgis/blob/7639baab95220201b87476b2dd09e011423ebd55/12-3.0/alpine/initdb-postgis.sh
+FROM postgis/postgis:12-3.0-alpine
+
+COPY ./initdb-postgis.sh /docker-entrypoint-initdb.d/10_postgis.sh
diff --git a/pica-mobilizon/db/initdb-postgis.sh b/pica-mobilizon/db/initdb-postgis.sh
new file mode 100644
index 0000000000000000000000000000000000000000..6a716a6fa7c61eafbaa3d1ee224b42e18bce7d26
--- /dev/null
+++ b/pica-mobilizon/db/initdb-postgis.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+set -e
+
+# Perform all actions as $POSTGRES_USER
+export PGUSER="$POSTGRES_USER"
+
+# Create the 'template_postgis' template db
+"${psql[@]}" <<- 'EOSQL'
+CREATE DATABASE template_postgis IS_TEMPLATE true;
+EOSQL
+
+# Load PostGIS into both template_database and $POSTGRES_DB
+for DB in template_postgis "$POSTGRES_DB"; do
+	echo "Loading PostGIS extensions into $DB"
+	"${psql[@]}" --dbname="$DB" <<-'EOSQL'
+		CREATE EXTENSION IF NOT EXISTS postgis;
+		CREATE EXTENSION IF NOT EXISTS pg_trgm;
+		CREATE EXTENSION IF NOT EXISTS unaccent;
+EOSQL
+done
diff --git a/pica-mobilizon/docker-compose.yml b/pica-mobilizon/docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..97f68aebb7d7e4f23752e3caa6d018e5ba918d6e
--- /dev/null
+++ b/pica-mobilizon/docker-compose.yml
@@ -0,0 +1,73 @@
+# inspired from https://framagit.org/Windyo/mobilizon/-/blob/a1e0b9730e9c63de6058c3f5d803b2743efafed4/docker/docker-compose.yml
+
+version: "3.7"
+
+networks:
+    proxy:
+      external: true
+    mobilizon:
+
+volumes:
+    mobilizon-data:
+        name: mobilizon-data
+    mobilizon-db:
+        name: mobilizon-db
+
+services:
+    mobilizon:
+        image: registry.picasoft.net/pica-mobilizon:1.0.0
+        build:
+            context: ./app
+            dockerfile: Dockerfile
+            args:
+                - NODE_V=14
+                - MOBILIZON_GIT_URL=https://framagit.org/framasoft/mobilizon.git
+                - MOBILIZON_GIT_TAG=1.0.0
+                - MIX_ENV=prod
+        container_name: mobilizon-app
+        volumes:
+            - mobilizon-data:/app
+            - /etc/localtime:/etc/localtime:ro
+        environment:
+            - MIX_ENV=prod
+            # setup the instance config
+            - MOBILIZON_INSTANCE_HOST=mobilizon.picasoft.net
+            - MOBILIZON_INSTANCE_NAME=Instance Mobilizon de Picasoft
+            - MOBILIZON_INSTANCE_REGISTRATIONS_OPEN=true
+            - MOBILIZON_INSTANCE_EMAIL=mobilizon@picasoft.net
+            - MOBILIZON_DATABASE_HOST=mobilizon-db
+            # standard ports, don't really need changing
+            - MOBILIZON_DATABASE_PORT=5432
+            - MOBILIZON_INSTANCE_LISTEN_PORT=4000
+        env_file:
+            - ./secrets/mobilizon-db.secrets
+            - ./secrets/mobilizon-app.secrets
+        labels:
+            traefik.enable: true
+            traefik.http.routers.mobilizon-app.entrypoints: websecure
+            traefik.http.routers.mobilizon-app.rule: Host(`mobilizon.picasoft.net`)
+            traefik.http.services.mobilizon-app.loadbalancer.server.port: 4000
+        networks:
+            - proxy
+            - mobilizon
+        depends_on:
+            - mobilizon-db
+        restart: unless-stopped
+    
+    mobilizon-db:
+        image: registry.picasoft.net/pica-postgres-postgis:12-alpine
+        build:
+            context: ./db
+            dockerfile: Dockerfile
+            args:
+                - POSTGRES_DB=postgres_mobilizon
+        container_name: mobilizon-db
+        volumes:
+            - mobilizon-db:/var/lib/postgresql/data
+            - /etc/localtime:/etc/localtime:ro
+        env_file:
+            - ./secrets/mobilizon-db.secrets
+        networks:
+            - mobilizon
+        restart: unless-stopped
+        
\ No newline at end of file
diff --git a/pica-mobilizon/secrets/mobilizon-app.secrets.example b/pica-mobilizon/secrets/mobilizon-app.secrets.example
new file mode 100644
index 0000000000000000000000000000000000000000..468c18486b1fc93491a8a3a098aac768bdf178c5
--- /dev/null
+++ b/pica-mobilizon/secrets/mobilizon-app.secrets.example
@@ -0,0 +1,9 @@
+INIT=FALSE
+ADMIN_EMAIL=your@email.com
+ADMIN_PASSWORD=yourpasswordtologin
+MOBILIZON_SMTP_SERVER=host.fr
+MOBILIZON_SMTP_HOSTNAME=your.host.fr
+MOBILIZON_SMTP_PORT=25
+MOBILIZON_SMTP_USERNAME=your@email.com
+MOBILIZON_SMTP_PASSWORD=yourpasswordtologin
+MOBILIZON_SMTP_SSL=false
diff --git a/pica-mobilizon/secrets/mobilizon-db.secrets.example b/pica-mobilizon/secrets/mobilizon-db.secrets.example
new file mode 100644
index 0000000000000000000000000000000000000000..d9d43fd004c4229f7e848e8a1bd663610c7ee02c
--- /dev/null
+++ b/pica-mobilizon/secrets/mobilizon-db.secrets.example
@@ -0,0 +1,6 @@
+POSTGRES_DB=postgres_mobilizon
+POSTGRES_USER=mobilizon
+POSTGRES_PASSWORD=superSecretPsswrd
+MOBILIZON_DATABASE_DBNAME=postgres_mobilizon
+MOBILIZON_DATABASE_USERNAME=mobilizon
+MOBILIZON_DATABASE_PASSWORD=superSecretPsswrd