Synology [Tuto] Dockhand avec socket-proxy et PostgreSQL

  • Vague de SPAM

    Suite à une vague de spam sur le forum, les inscriptions sont temporairement limitées.

    Après votre inscription, un membre de l'équipe devra valider votre compte avant qu'il ne soit activé. Nous sommes désolés pour la gêne occasionnée et vous remercions de votre patience.

Titux

Apprenti
Membre Confirmé
1 Novembre 2023
55
48
33
Aujourd'hui petit tuto pour installer Dockhand avec une base PostgreSQL et le socket Proxy sécurisé sur un Synology.
Logiciel à la mode en ce moment sur les sites d'information.
Personnellement, je n'ai pas d'avis, je vous laisse le choix de dire le meilleur entre Portainer, Arcane, Dockhand ou Container Manager (voir l'article https://www.cachem.fr/dockhand-arcane-portainer/ )

Objectif​

Déployer Dockhand (gestionnaire Docker web) sur un NAS Synology avec :
  • Base de données PostgreSQL (performances optimales)
  • Socket Proxy pour sécuriser l'accès au socket Docker
  • Chiffrement des credentials avec AES-256
  • Optimisations spécifiques Synology
  • Accès réseau local uniquement

Prérequis​

  • Synology DSM 7.x
  • Container Manager installé (via Package Center)
  • Accès SSH activé (Panneau de configuration → Terminal & SNMP)
  • Connaissances de base en SSH et Docker

Etape 1 Créer la structure de dossiers​

Via File Station
/volume1/docker/dockhand/data et /volume1/docker/dockhand/postgres

Ou via SSH
Bash:
# Créer le dossier principal et les sous-dossiers
sudo mkdir -p /volume1/docker/dockhand/{data,postgres}

Etape 2 Créer les réseaux Docker

Pourquoi créer les réseaux manuellement et non via Container Manager ?

Le réseau socket-proxy est interne (pas d'accès Internet) pour isoler le socket Docker. Impossible à faire via Container Manager.
Le réseau dockhand-internal permet la communication entre les services. Possible via Container Manager

Bash:
# Créer le réseau interne pour le socket proxy (SANS accès Internet)
sudo docker network create socket-proxy --internal

# Créer le réseau pour la communication entre services
sudo docker network create dockhand-internal

Vérification :
Bash:
sudo docker network ls | grep -E "socket-proxy|dockhand-internal"

Vous devriez voir :
Markdown (GitHub flavored):
NETWORK ID     NAME                DRIVER    SCOPE
xxxxx          socket-proxy        bridge    local
yyyyy          dockhand-internal   bridge    local

Etape 3 Créer le fichier .env

Sur votre pc via un fichier texte indiquer cela :
Code:
# Mot de passe PostgreSQL
DB_PASSWORD=VOTRE_MOT_DE_PASSE_POSTGRES_ICI

# Clé de chiffrement Dockhand
ENCRYPTION_KEY=VOTRE_CLE_CHIFFREMENT_ICI

Il existe plein de solution de génération de clés, je ne détaille pas.

Ensuite placer le fichier .env dans /volume1/docker/dockhand

Etape 4 Créer le stack

Via Container Manager créer un nouveau projet :
  • Nom du projet = jotty
  • Chemin = /volume1/docker/jotty/
  • Source = Créer un fichier docker-compose.yml et copier cela :
YAML:
version: '3.8'

services:
  # PostgreSQL
  postgres:
    image: postgres:16-alpine
    container_name: dockhand-postgres
    restart: unless-stopped
    environment:
      - POSTGRES_DB=dockhand
      - POSTGRES_USER=dockhand
      - POSTGRES_PASSWORD=${DB_PASSWORD}
    volumes:
      - /volume1/docker/dockhand/postgres:/var/lib/postgresql/data
    networks:
      - dockhand-internal
    security_opt:
      - no-new-privileges:true
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U dockhand"]
      interval: 10s
      timeout: 5s
      retries: 5

  # Socket Proxy - LA BARRIÈRE DE SÉCURITÉ
  socket-proxy:
    image: tecnativa/docker-socket-proxy:v0.4.2
    container_name: dockhand-socket-proxy
    restart: unless-stopped
    environment:
      # Permissions minimales
      - CONTAINERS=1
      - IMAGES=1
      - NETWORKS=1
      - VOLUMES=1
      - EVENTS=1
      - POST=1
      - DELETE=1
      - INFO=1
      - SYSTEM=1
      - ALLOW_START=1
      - ALLOW_STOP=1
      - ALLOW_RESTARTS=1
      # Terminal (désactive si tu n'en as pas besoin)
      - EXEC=0  # Mettre à 0 pour désactiver l'accès terminal
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro  # READ ONLY !
    networks:
      - socket-proxy
    security_opt:
      - no-new-privileges:true

  # Dockhand
  dockhand:
    image: fnsys/dockhand:latest
    container_name: dockhand
    restart: unless-stopped
    ports:
      - "4789:3000"
    depends_on:
      postgres:
        condition: service_healthy
      socket-proxy:
        condition: service_started
    environment:
      - PUID=1026  # Ton PUID à modifier si besoin
      - PGID=100   # Ton PGID à modifier si besoin
      - DATA_DIR=/app/data
      - DATABASE_URL=postgres://dockhand:${DB_PASSWORD}@postgres:5432/dockhand
      - SKIP_DF_COLLECTION=true  # Important pour Synology
      - ENCRYPTION_KEY=${ENCRYPTION_KEY}
    volumes:
      - /volume1/docker/dockhand/data:/app/data
    networks:
      - dockhand-internal
      - socket-proxy
    security_opt:
      - no-new-privileges:true

networks:
  socket-proxy:
    external: true  # Pas d'accès Internet
  dockhand-internal:
    external: true

⚠️ Points importants :
  • Si votre UID n'est pas 1026, modifiez PUID=1026 avec votre valeur
  • Le port 4789 est personnalisable (changez si déjà utilisé)
  • EXEC=0 désactive l'accès terminal aux containers (mettez 1 si vous le voulez)

Etape 5 Démarrer Dockhand

Configuration initiale de Dockhand

1. Accéder à l'interface web​

Ouvrez votre navigateur : http://IP_DE_VOTRE_NAS:4789
Remplacez IP_DE_VOTRE_NAS par l'IP locale de votre Synology (ex : 192.168.1.10)

2. Première connexion (pas d'authentification par défaut)​

SÉCURITÉ IMPORTANTE :

À la première connexion, aucune authentification n'est requise. Vous devez immédiatement activer l'authentification :
  1. Cliquez sur ⚙️ Settings (en haut à droite)
  2. Allez dans Authentication
  3. Activez Enable authentication
  4. Créez votre compte admin :
    • Username : votre_nom
    • Password : mot de passe fort
    • Email : votre@email.com
  5. Cliquez sur Save
  6. Reconnectez-vous avec vos identifiants

3. Activer MFA (Authentification à deux facteurs) - RECOMMANDÉ​

  1. Une fois connecté, cliquez sur votre avatar (en haut à droite)
  2. Allez dans Profile
  3. Section Security → Cliquez sur Enable MFA
  4. Scannez le QR code avec votre application préféré.
  5. Entrez le code à 6 chiffres pour confirmer
  6. SAUVEGARDEZ LES CODES DE RÉCUPÉRATION (affichés une seule fois !)

4. Configurer l'environnement Docker​

  1. Allez dans ⚙️ SettingsEnvironments
  2. Éditez l'environnement "default" (ou créez-en un nouveau)
  3. Configurez :
    • Connection type : Direct (HTTP/HTTPS)
    • Host : socket-proxy:2375
    • Protocol : HTTP (c'est sécurisé car réseau interne)
    • Name : "Synology Local" (ou autre nom)
  4. Cliquez sur Save
  5. Cliquez sur Test connexion pour vérifier
2026-02-13 09_35_44-Greenshot.png
Vous devriez voir : Connection successful

Pourquoi cette configuration est sécurisée ?​

ComposantSécurité apportée
Socket ProxyFiltre les commandes Docker dangereuses (empêche --privileged, modifications système, etc.)
Socket READ-ONLYLe socket Docker est monté en :ro, impossible de le modifier
Réseau interneLe socket-proxy est sur un réseau SANS accès Internet
Port local uniquementPort 3789 accessible uniquement depuis votre réseau local (pas d'exposition Internet)
PostgreSQL isoléBase de données sur réseau interne, pas de port exposé
Chiffrement AES-256Tous les mots de passe/secrets sont chiffrés dans la base de données
no-new-privilegesEmpêche l'escalade de privilèges dans les containers
SKIP_DF_COLLECTIONOptimisation pour Synology (évite les timeouts)

Ressources​

Félicitations ! Vous avez maintenant une installation Dockhand sécurisée sur votre Synology !

Bon test à tous.
 
  • J'aime
Réactions: morgyann