diff --git a/docker/README.md b/docker/README.md
index e93db2e0f64c888041ce7596d67394ff067e74fa..c9f30b43ea6819cf34f846ca5580426484042012 100644
--- a/docker/README.md
+++ b/docker/README.md
@@ -4,13 +4,13 @@ Duniter is the software that supports the [Äž1 libre-currency blockchain](https:
 
 [Duniter v2s](https://git.duniter.org/nodes/rust/duniter-v2s) is a complete rewrite of Duniter based on the Substrate / Polkadot framework. **This is alpha state work in progress.**
 
-# Minimal docker-compose file for an RPC (non validator) node
+## Minimal docker-compose file for an mirror node
 
 ```
 version: "3.5"
 
 services:
-  duniter-rpc:
+  duniter-mirror:
     image: duniter/duniter-v2s:latest
     restart: unless-stopped
     ports:
@@ -23,16 +23,16 @@ services:
       # p2p
       - 30333:30333
     volumes:
-      - data-rpc:/var/lib/duniter/
+      - data-mirror:/var/lib/duniter/
     environment:
       - DUNITER_CHAIN_NAME=gdev
       - DUNITER_NODE_NAME=<my-node-name>
 
 volumes:
-  data-rpc:
+  data-mirror:
 ```
 
-# Minimal docker-compose file for a validator node
+## Minimal docker-compose file for a validator node
 
 ```
 version: "3.5"
@@ -57,26 +57,34 @@ volumes:
   data-validator:
 ```
 
-# Environment variables
+## Environment variables
 
 | Name | Description | Default |
 | ---- | ----------- | ------- |
 | `DUNITER_NODE_NAME` | The node name. This name will appear on the Substrate telemetry server when telemetry is enabled. | Random name |
 | `DUNITER_CHAIN_NAME` | The currency to process. "gdev" uses the embeded chainspec. A path allows to use a local json raw chainspec. | `dev` (development mode) |
-| `DUNITER_PUBLIC_ADDR` | The libp2p public address base. See [libp2p documentation](https://docs.libp2p.io/concepts/fundamentals/addressing/). This variable is useful when the node is behind a reverse-proxy with its ports not directly exposed.<br>Note: the `p2p/<peer_id>` part of the address shouldn't be set in this variable. It is automatically added by Duniter. | duniter-v2s guesses one from the node's IPv4 address. |
+| `DUNITER_PUBLIC_ADDR` | The libp2p public address base. See [libp2p documentation](https://docs.libp2p.io/concepts/fundamentals/addressing/). This variable is useful when the node is behind a reverse proxy with its ports not directly exposed.<br>Note: the `p2p/<peer_id>` part of the address shouldn't be set in this variable. It is automatically added by Duniter. | duniter-v2s guesses one from the node's IPv4 address. |
 | `DUNITER_LISTEN_ADDR` | The libp2p listen address. See [libp2p documentation](https://docs.libp2p.io/concepts/fundamentals/addressing/). This variable is useful when running a validator node behind a reverse proxy, to force the P2P end point in websocket mode with:<br>  `DUNITER_LISTEN_ADDR=/ip4/0.0.0.0/tcp/30333/ws` | Non validator node: `/ip4/0.0.0.0/tcp/30333/ws`<br>Validator node: `/ip4/0.0.0.0/tcp/30333` |
 | `DUNITER_RPC_CORS` | Value of the polkadot `--rpc-cors` option. | `all` |
 | `DUNITER_VALIDATOR` | Boolean (`true` / `false`) to run the node in validator mode. Configure the polkadot options `--validator --rpc-methods Unsafe`. | `false` |
 | `DUNITER_DISABLE_PROMETHEUS` | Boolean to disable the Prometheus endpoint on port 9615. | `false` |
-| `DUNITER_DISABLE_TELEMETRY` | Boolean to disable connecting to the Substrate tememetry server. | `false` |
+| `DUNITER_DISABLE_TELEMETRY` | Boolean to disable connecting to the Substrate telemetry server. | `false` |
 | `DUNITER_PRUNING_PROFILE` | * `default`<br> * `archive`: keep all blocks and state blocks<br> * `light`: keep only last 256 state blocks and last 14400 blocks (one day duration) | `default` |
 
-# Other duniter options
+## Other Duniter options
 
-You can pass any other option to duniter using the `command` docker-compose element:
+You can pass any other option to Duniter using the `command` docker-compose element:
 ```
     command:
       # workaround for substrate issue #12073
       # https://github.com/paritytech/substrate/issues/12073
       - "--wasm-execution=interpreted-i-know-what-i-do"
 ```
+
+## Start Duniter
+
+Once you are happy with your `docker-compose.yml` file, run in the same folder:
+
+```bash
+docker compose up -d
+```
\ No newline at end of file
diff --git a/docker/compose/gdev-mirror.docker-compose.yml b/docker/compose/gdev-mirror.docker-compose.yml
deleted file mode 100644
index 039ab56b7d51fe7513101ada257a7c65b42ba2a9..0000000000000000000000000000000000000000
--- a/docker/compose/gdev-mirror.docker-compose.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-# This is a docker template for running a gdev mirror
-
-version: "3.5"
-
-services:
-  duniter-rpc:
-    image: duniter/duniter-v2s:latest
-    restart: unless-stopped
-    ports:
-      # telemetry
-      - 127.0.0.1:9615:9615
-      # rpc
-      - 127.0.0.1:9933:9933
-      # rpc-ws
-      - 127.0.0.1:9944:9944
-      # p2p
-      - 30333:30333
-    volumes:
-      - ./node.key:/etc/duniter/node.key
-      - duniter-rpc-data:/var/lib/duniter/
-    environment:
-      - DUNITER_CHAIN_NAME=gdev
-      # SERVER_DOMAIN should be replaced by a domain name that point on your server
-      - DUNITER_PUBLIC_ADDR=/dns/${SERVER_DOMAIN?SERVER_DOMAIN should be set}/tcp/30333/ws
-
-volumes:
-  duniter-rpc-data:
diff --git a/docker/compose/gdev-validator.docker-compose.yml b/docker/compose/gdev-validator.docker-compose.yml
deleted file mode 100644
index 655dd1a209be43b04b7fe132bb2df10a00b517ae..0000000000000000000000000000000000000000
--- a/docker/compose/gdev-validator.docker-compose.yml
+++ /dev/null
@@ -1,45 +0,0 @@
-version: "3.5"
-
-services:
-  duniter-rpc:
-    image: duniter/duniter-v2s:latest
-    restart: unless-stopped
-    ports:
-      # telemetry
-      - 127.0.0.1:9615:9615
-      # rpc
-      - 127.0.0.1:9933:9933
-      # rpc-ws
-      - 127.0.0.1:9944:9944
-      # p2p
-      - 30333:30333
-    volumes:
-      - ./node.key:/etc/duniter/validator-node.key
-      - duniter-rpc-data:/var/lib/duniter/
-    environment:
-      - DUNITER_CHAIN_NAME=gdev
-      # RPC_SERVER_DOMAIN should be replaced by a domain name that point on your server
-      - DUNITER_PUBLIC_ADDR=/dns/${RPC_SERVER_DOMAIN?RPC_SERVER_DOMAIN should be set}/tcp/30333/ws
-
-  duniter-validator:
-    image: duniter/duniter-v2s:latest
-    restart: unless-stopped
-    ports:
-      # telemetry
-      - 127.0.0.1:9616:9615
-      # rpc
-      - 127.0.0.1:9934:9933
-      # rpc-ws
-      - 127.0.0.1:9945:9944
-      # p2p
-      - 30334:30333
-    volumes:
-      - ./node.key:/etc/duniter/validator-node.key
-      - duniter-validator-data:/var/lib/duniter/
-    environment:
-      - DUNITER_CHAIN_NAME=gdev
-      # VALIDATOR_SERVER_DOMAIN should be replaced by a domain name that point on your server
-      - DUNITER_PUBLIC_ADDR=/dns/${VALIDATOR_SERVER_DOMAIN?VALIDATOR_SERVER_DOMAIN should be set}/tcp/30333
-      - DUNITER_VALIDATOR=true
-    command:
-      - "--pruning=14400"
diff --git a/docker/compose/live-template.docker-compose.yml b/docker/compose/live-template.docker-compose.yml
index 643ae8c4ea970ba5a13a9a4e4cc1b3d8cf80e9f8..8c2aba285224ba0aacfe1919deb46475bde044ea 100644
--- a/docker/compose/live-template.docker-compose.yml
+++ b/docker/compose/live-template.docker-compose.yml
@@ -1,3 +1,5 @@
+# this template is used in /scripts/create-live-network.sh script
+
 version: "3.5"
 
 services:
diff --git a/docs/user/nginx_reverse_proxy.md b/docs/user/nginx_reverse_proxy.md
new file mode 100644
index 0000000000000000000000000000000000000000..b315cea8e312f9f72236ad660bdbab03371fd2e2
--- /dev/null
+++ b/docs/user/nginx_reverse_proxy.md
@@ -0,0 +1,52 @@
+
+# Nginx reverse proxy example
+
+In `/etc/nginx/sites-enabled/gdev.YOUR_DOMAIN` put (you can probably do simpler):
+
+```nginx
+server {
+  server_name gdev.YOUR_DOMAIN.fr;
+
+  listen 443 ssl http2;
+  listen [::]:443 ssl http2;
+  ssl_certificate /etc/nginx/ssl/YOUR_DOMAIN.cert;
+  ssl_certificate_key /etc/nginx/ssl/YOUR_DOMAIN.key;
+
+  root /nowhere;
+
+  add_header X-Frame-Options SAMEORIGIN;
+  add_header X-XSS-Protection "1; mode=block";
+  proxy_redirect off;
+  proxy_buffering off;
+  proxy_set_header Host $host;
+  proxy_set_header X-Real-IP $remote_addr;
+  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+  proxy_set_header X-Forwarded-Proto $scheme;
+  proxy_set_header X-Forwarded-Port $server_port;
+  proxy_read_timeout 90;
+
+  location /http {
+    proxy_pass http://localhost:9933;
+    proxy_http_version 1.1;
+  }
+  location /ws {
+    proxy_pass http://localhost:9944;
+
+    proxy_set_header Upgrade $http_upgrade;
+    proxy_set_header Connection "upgrade";
+    proxy_http_version 1.1;
+
+    proxy_read_timeout 1200s;
+    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+    proxy_set_header Host $host;
+  }
+}
+```
+
+and replace `YOUR_DOMAIN` by your domain each time.
+
+- [generate your ssl certificates](https://github.com/acmesh-official/acme.sh) with let's encrypt
+  if you don't already have a wildcard certificate.
+- `service nginx reload`
+
+Your node is now online as a rpc node. It's fully capable for wallet use.
diff --git a/docs/user/rpc.md b/docs/user/rpc.md
index cf43bd114777cc60ef9a53431f7cfc860216bded..907ef1c70da326d48ebfed1ccf1d154889294117 100644
--- a/docs/user/rpc.md
+++ b/docs/user/rpc.md
@@ -4,68 +4,11 @@
 
 ### Duniter part
 
-- Add this docker-compose template on your server:
-  [docker/compose/gdev-rpc.docker-compose.yml](https://git.duniter.org/nodes/rust/duniter-v2s/-/blob/master/docker/compose/gdev-mirror.docker-compose.yml)
-- Rename the file : `mv gdev-mirror.docker-compose.yml docker-compose.yml`
-- In the same folder, create a `.env` file that defime environment variables `SERVER_DOMAIN`:
+See [docker documentation](../../docker/README.md) to install, configure, and start a node.
 
-```bash
-SERVER_DOMAIN=YOUR_DOMAIN
-```
+### Reverse proxy part
 
-- Do `docker compose up -d` to start your node
-
-### Reverse-proxy part (with Nginx)
-
-In `/etc/nginx/sites-enabled/gdev.YOUR_DOMAIN` put (you can probably do simpler):
-
-```nginx
-server {
-  server_name gdev.YOUR_DOMAIN.fr;
-
-  listen 443 ssl http2;
-  listen [::]:443 ssl http2;
-  ssl_certificate /etc/nginx/ssl/YOUR_DOMAIN.cert;
-  ssl_certificate_key /etc/nginx/ssl/YOUR_DOMAIN.key;
-
-  root /nowhere;
-
-  add_header X-Frame-Options SAMEORIGIN;
-  add_header X-XSS-Protection "1; mode=block";
-  proxy_redirect off;
-  proxy_buffering off;
-  proxy_set_header Host $host;
-  proxy_set_header X-Real-IP $remote_addr;
-  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-  proxy_set_header X-Forwarded-Proto $scheme;
-  proxy_set_header X-Forwarded-Port $server_port;
-  proxy_read_timeout 90;
-
-  location /http {
-    proxy_pass http://localhost:9933;
-    proxy_http_version 1.1;
-  }
-  location /ws {
-    proxy_pass http://localhost:9944;
-
-    proxy_set_header Upgrade $http_upgrade;
-    proxy_set_header Connection "upgrade";
-    proxy_http_version 1.1;
-
-    proxy_read_timeout 1200s;
-    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-    proxy_set_header Host $host;
-  }
-}
-```
-
-and replace `YOUR_DOMAIN` by your domain each time.
-
-- [generate your ssl certificates](https://github.com/acmesh-official/acme.sh) with let's encrypt
-  if you don't already have a wildcard certificate.
-- `service nginx reload`
-
-Your node is now online as a rpc node. It's fully capable for wallet use.
+See [nginx reverse proxy](./nginx_reverse_proxy.md).
 
 To go further, read [How to become a (black)smith](./smith.md)
 
diff --git a/docs/user/smith.md b/docs/user/smith.md
index e0fa28c4f31f0f41efbbd5b0dfbb0a56f920c2f4..588d3d28bc9180cdb666e4c04d5f2367f8951cec 100644
--- a/docs/user/smith.md
+++ b/docs/user/smith.md
@@ -4,67 +4,11 @@
 
 ### Duniter part
 
-- Add this docker-compose on your server :
-  [docker/compose/gdev-validator.docker-compose.yml](https://git.duniter.org/nodes/rust/duniter-v2s/-/blob/master/docker/compose/gdev-validator.docker-compose.yml)
-- Create a `.env` file that define environment variable `SERVER_DOMAIN`:
+See [docker documentation](../../docker/README.md) to install, configure, and start a node. For a smith node, you want to set `DUNITER_VALIDATOR` to `true`.
 
-```bash
-SERVER_DOMAIN=YOUR_DOMAIN
-```
+### Reverse proxy part
 
-- `docker compose up -d` to start your node
-
-### Reverse-proxy part (with Nginx)
-
-In `/etc/nginx/sites-enabled/gdev.YOUR_DOMAIN` put (you can probably do simpler):
-
-```nginx
-server {
-  server_name gdev.YOUR_DOMAIN.fr;
-
-  listen 443 ssl http2;
-  listen [::]:443 ssl http2;
-  ssl_certificate /etc/nginx/ssl/YOUR_DOMAIN.cert;
-  ssl_certificate_key /etc/nginx/ssl/YOUR_DOMAIN.key;
-
-  root /nowhere;
-
-  add_header X-Frame-Options SAMEORIGIN;
-  add_header X-XSS-Protection "1; mode=block";
-  proxy_redirect off;
-  proxy_buffering off;
-  proxy_set_header Host $host;
-  proxy_set_header X-Real-IP $remote_addr;
-  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-  proxy_set_header X-Forwarded-Proto $scheme;
-  proxy_set_header X-Forwarded-Port $server_port;
-  proxy_read_timeout 90;
-
-  location /http {
-    proxy_pass http://localhost:9933;
-    proxy_http_version 1.1;
-  }
-  location /ws {
-    proxy_pass http://localhost:9944;
-
-    proxy_set_header Upgrade $http_upgrade;
-    proxy_set_header Connection "upgrade";
-    proxy_http_version 1.1;
-
-    proxy_read_timeout 1200s;
-    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-    proxy_set_header Host $host;
-  }
-}
-```
-
-and replace `YOUR_DOMAIN` by your domain each time.
-
-- [generate your ssl certificates](https://github.com/acmesh-official/acme.sh) with let's encrypt
-  if you don't already have a wildcard certificate.
-- `service nginx reload`
-
-Your node is now online as a rpc node. It's fully capable for wallet use.
+See [nginx reverse proxy](./nginx_reverse_proxy.md).
 
 ## Join the Smith WoT
 
@@ -84,9 +28,9 @@ When you have at least 3 certifications, your'in!
 - Generate and publish your session keys
   1. create an ssh bridge from your desktop/laptop to your server : `ssh -L 9945:localhost:9945 SSH_USER@YOUR_SERVER`
   2. In your browser go to [polkadotjs : ws://localhost:9945](https://polkadot.js.org/apps/?rpc=ws%3A%2F%2Flocalhost%3A9945#/explorer)
-  3. In the UI : developer > appel RPC > author > rotateKey() and run
-  4. copy the result in clipboard
-  5. In the UI : developer > extrinsics > YOUR_SMITH_ACCOUNT > authorityMembers > setSessionKeys(keys) then copy your session keys and run the query.
+  3. In the UI : developer > appel RPC > author > rotateKey() and copy the result in clipboard
+  4. In the UI : developer > extrinsics > YOUR_SMITH_ACCOUNT > authorityMembers > setSessionKeys(keys) then paste your session keys and run the query.
+  5. In the UI : developer > extrinsics > YOUR_SMITH_ACCOUNT > authorityMembers > claimMembership(keys)
   6. **wait 48h to verify you keep sync**
 - Join
   - In the UI : developer > extrinsics > YOUR_SMITH_ACCOUNT > authorityMembers > goOnline()