Synology Sync-In via Docker (Container Manager) + Ngnix Proxy Manager

Titux

Apprenti
Membre Confirmé
1 Novembre 2023
34
27
28
Bonjour à tous,

Aujourd'hui, je vous propose un tutorial pou installer Sync-In sur votre Synology via Container Manager et derrière le reverse proxy NPM (Ngnix Proxy Manager).
Sync-in est une plateforme open source sécurisée pour stocker, partager, synchroniser et collaborer sur vos fichiers.
Elle se présente comme une alternative à ownCloud, nextCloud ou encore à Synology Drive.
La plateforme open source Sync-in a été créé par Johan Legrand, un développeur français et elle est développée en TypeScript,

Pour avoir plus d'info, voici les sources que j'ai utilisé pour réussir la mise en place :
Prérequis pour réussir :
  • Savoir ce connecté en SSH au NAS
  • Avoir 1Go ou 2 Go de mémoire à allouer au projet
  • Avoir Docker Engine version 24 ou supérieure (ok sous DSM 7)
  • Avoir NPM d'installer pour la gestion du certificat et gérer les 2 host nécessaire.
  • Connaitre le PUID & le PGID de l'utilisateur Synology ayant les droits sur le dossier /volume1/docker

  • Étape 1 : création des dossiers.
Nous allons partir du principe que les dossiers doivent être créés dans /volume1/docker/sync-in
Il nous faut donc :
  • data
  • mariadb
  • onlyoffice
  • static
2025-10-29 23_55_33-Word.png

Dans le dossier onlyoffice, il faut créer :
  • logs
  • data
  • redis
  • rabbitmq
  • lib
  • fonts
  • database
2025-10-29 23_57_20-Word.png
  • Étape 2 : Donner les droits
Dans le futur conteneur MariaDB, le processus tourne avec l’utilisateur mysql (UID 999).
Mais sur Synology, le propriétaire du dossier /volume1/docker/sync-in/mariadb peut parfois empêcher MariaDB de créer les fichiers initiaux s’il n’a pas les bonnes permissions en écriture.
Résultat :
  • MariaDB croit initialiser la base.
  • Mais il n’arrive pas à écrire les fichiers système.
  • Et il ignore totalement les variables d’environnement (MARIADB_ROOT_PASSWORD, etc.).
  • Donc : tu te retrouves sans mot de passe root valide.

Action : Il faut alors donner les droits à l'utilisateur mysql du conteneur au dossier /volume1/docker/sync-in/mariadb.
Connecter vous en SSH à votre NAS (je ne détaille pas cette action) avec le compte root et taper ces deux commandes :

Code:
chown -R 999:999 /volume1/docker/sync-in/mariadb
chmod -R 770 /volume1/docker/sync-in/mariadb

  • Étape 3 : Création du fichier environment.yaml
Avant de lancer le projet, il faut créer le fichier environment.yaml et le placer dans /volume1/docker/sync-in
Pour réaliser le fichier, toutes les infos sont disponible ici : https://sync-in.com/fr/docs/setup-guide/server
Voici mes conseils :
YAML:
# Toutes les infos dispo : https://sync-in.com/fr/docs/setup-guide/server
server:
  host: 0.0.0.0 # Adresse IP d'écoute du serveur
  trustProxy: true #Active la gestion des proxies ex. : number, true, false, ou IP https://sync-in.com/fr/docs/setup-guide/proxy#valeurs-possibles

mysql:
  url: "mysql://root:passwordmariadb@syncin-db:3306/sync_in" # Reprendre le même mot de passe du docker-compose - URL de connexion MySQL ex. : mysql://user:password@localhost:3306/database

mail:
  host: "smtp.mail.ovh.net" # Hôte du serveur SMTP
  port: 587
  sender: "Captain Tsubasa<captain@tsubasa.fr>" # Adresse d’envoi ex. : Sync-in<notification@sync-in.com>
  auth:
    user: "captain@tsubasa.fr" # Nom d’utilisateur SMTP
    pass: "passwordmail" # Mot de passe SMTP de votre boite mail.
  secure: false # Connexion SSL true ou false / Je laisse false afin de passer en STARTTLS.
  ignoreTLS: false # Désactive l’utilisation de STARTTLS même si le serveur l’annonce true ou false, par défaut : false
  rejectUnauthorized: true # Rejette la connexion si le certificat TLS du serveur est invalide true ou false, par défaut : false
  logger: false # Active les logs SMTP true ou false
  debug: false # Active le mode débogage true ou false

auth:
  #encryptionKey: keyxencrypt # Clé de chiffrement des secrets utilisateurs dans la base de données, optionnelle mais recommandée.
# Une fois la MFA activée, toute modification ou suppression de la clé de chiffrement rendra les secrets invalides, empêchant toute authentification ultérieure.
  mfa:
    totp:
      enabled: true # Activer l’authentification TOTP pour tous les utilisateurs true ou false, par défaut : true
      issuer: Sync-in # Nom affiché dans l’application d’authentification, valeur par défaut : Sync-in
  cookieSameSite: strict # Politique SameSite pour les cookies : lax, strict, par défaut : strict
  token:
    access:
      secret: keyxencrypt # Secret JWT pour les tokens d’accès
      expiration: "30m" # Durée de validité du token d’accès ex. : 30m
    refresh:
      secret: keyxencrypt # Secret JWT pour les tokens de rafraîchissement
      expiration: "4h" # Durée de validité du token de rafraîchissement ex. : 4h

applications:
  files:
    dataPath: /app/data # Chemin où sont stockées les données utilisateurs. Doit etre identique que l'environnement de l'instance sync-in : - /volume1/docker/sync-in/data:/app/data:rw
    maxUploadSize: 5368709120 # Taille maximale d’un fichier à téléverser par défaut : 5368709120 -> 5 Go
    onlyoffice:
      enabled: true # Active l’intégration OnlyOffice true ou false, par défaut : false
      externalServer: https://onlyoffice.tsubasa.fr # URL de votre serveur OnlyOffice ex. : https://onlyoffice.my-domain.com
      secret: keyxencrypt # Secret JWT partagé avec OnlyOffice. Doit etre identique que l'environnement de l'instance syncin-onlyoffice
      verifySSL: true # Vérifie le certificat SSL true ou false, par défaut : false

Il faut modifier en fonction de vos infos :
Pour générer un secret de 32 caractères, vous pouvez aller là : https://it-tools.tech/token-generator?numbers=false&length=32 ou faire
Code:
openssl rand -hex 32
en SSH.

  • Étape 4 : Création du projet sync-in
Avec container manager, le 1er étape est de créer un réseau bridge intitulé syncin_network
La seconde est de créé un projet :
2025-10-30 00_21_00-Word.png

Voici le docker-compose :
YAML:
version: "3.8"

services:

  sync_in:
    image: syncin/server:latest
    container_name: sync-in
    restart: unless-stopped
    healthcheck:
      test: ["CMD-SHELL", "nc -z 127.0.0.1 8080 || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 90s
    depends_on:
      - mariadb
      - onlyoffice
    ports:
      - 33000:8080
    environment:
      - INIT_ADMIN=true
      - INIT_ADMIN_LOGIN=administrateur
      - INIT_ADMIN_PASSWORD=passwordsyncin # Eviter les caractéres spécial; Cela permet d'initialisé le compte administrateur. Je conseil de modifier le mot de passe à la 1er connexion.
      - PUID=1026 # A vérifier de votre coté
      - PGID=100 # A vérifier de votre coté
    volumes:
      - /volume1/docker/sync-in/environment.yaml:/app/environment/environment.yaml
      - /volume1/docker/sync-in/data:/app/data:rw
      - /volume1/docker/sync-in/static:/app/static/releases:ro
    logging:
      driver: json-file
      options:
        max-size: "25m"
        max-file: "5"
    networks:
      - syncin_network

  mariadb:
    image: mariadb:latest
    container_name: syncin-db
    restart: unless-stopped
    security_opt:
      - no-new-privileges=false
    command: --innodb_ft_cache_size=16000000 --max-allowed-packet=1G
    environment:
      - MYSQL_ROOT_PASSWORD=passwordmariadb # Je vous conseil d'utiliser + - / ! en caracteres speciaux pour eviter une mauvaise interpretation dans le conteneur. Il faut que ce mot de passe soit identique dans le fichier environment.yaml
      - MYSQL_DATABASE=sync_in
      - TZ=Europe/Paris
    volumes:
      - /volume1/docker/sync-in/mariadb:/var/lib/mysql:rw
    networks:
      - syncin_network

  onlyoffice:
    image: onlyoffice/documentserver:latest
    hostname: onlyoffice
    container_name: syncin-onlyoffice
    restart: unless-stopped
    healthcheck:
      test: timeout 10s bash -c ':> /dev/tcp/127.0.0.1/80' || exit 1
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 90s
    logging:
      driver: json-file
      options:
        max-size: "25m"
        max-file: "5"
    ports:
      - 33005:80
    environment:
      - JWT_ENABLED=true
      - JWT_SECRET=keyencrypt # Generer une clès 32 et copier à l'identique dans le fichier environment.yaml
      - TZ=Europe/Paris
    volumes:
      - /volume1/docker/sync-in/onlyoffice/logs:/var/log/onlyoffice:rw
      - /volume1/docker/sync-in/onlyoffice/data:/var/www/onlyoffice/Data:rw
      - /volume1/docker/sync-in/onlyoffice/redis:/var/lib/redis:rw
      - /volume1/docker/sync-in/onlyoffice/rabbitmq:/var/lib/rabbitmq:rw
      - /volume1/docker/sync-in/onlyoffice/lib:/var/lib/onlyoffice:rw
      - /volume1/docker/sync-in/onlyoffice/fonts:/usr/share/fonts/truetype/custom:rw
      - /volume1/docker/sync-in/onlyoffice/database:/var/lib/postgresql:rw
    networks:
      - syncin_network

networks:
  syncin_network:
    external: true
    name: syncin_network

Il faut modifier en fonction de vos infos :
  • INIT_ADMIN_PASSWORD=passwordsyncin
  • MYSQL_ROOT_PASSWORD=passwordmariadb
  • JWT_SECRET=keyencrypt

Il est important de vérifier le correspondance du mot de base de la base maria db entre le docker-compose.yaml et environment.yaml.
Même chose pour le secret d'OnlyOffice.
Enregistrer mais ne lancer pas le projet, nous allons faire la partie reverse proxy avant.

  • Étape 5 : Reverse proxy avec NPM
Il faut créer deux host qui pointeront vers l'instance sync-in et l'instance syncin-onlyoffice.
sync-in doit pointer vers http://VOTRE_IP_DU_NAS:33000
syncin-onlyoffice http://VOTRE_IP_DU_NAS:33005
Les ports doivent etre identique à ceux incorporer dans le docker-compse.
Toutes les infos pour réussir sont là : https://sync-in.com/fr/docs/setup-guide/proxy
Je n'ai pas essayé avec le reverse proxy de Synology et je ne suis pas sur qu'il puisse avoir toutes les options nécessaire. Je ne pourrais pas vous accompagner si vous voulez essayer avec lui.
De plus je ne vais pas expliquer comment avoir un certificat pour votre sous domaine. Pour ceux avec un site chez OVH, je vous conseil ce tuto pour avoir un certificat wilcard : https://domopi.eu/configurer-un-certificat-lets-encrypt-wildcard-avec-npm/
Pour éviter de parler plus, voici les captures d'écrans :

Pour le sous domaine syncin.votredomaine.fr
2025-10-30 00_35_04-Word.png2025-10-30 00_36_59-Word.png
2025-10-30 00_38_05-Word.png

Dans advanced veuillez copier/coller l'info du dessous en adaptant votre IP du NAS :

YAML:
# === Sync-in Advanced Configuration (NPM-friendly) ===

# Timeout élevés pour la co-édition
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;

# Autoriser les fichiers volumineux
client_max_body_size 5G;

# WebSocket spécifique à Sync-in
location /socket.io/ {
    proxy_pass http://VOTRE_IP_NAS:33000;
    proxy_http_version 1.1;
}

# Configuration spéciale pour WebDAV Sync-in
location /webdav {
    proxy_pass http://VOTRE_IP_NAS:33000/webdav;
    proxy_buffering off;
    client_max_body_size 0;
}

Faire la même chose avec un second host pour onlyoffice.votredomaine.fr
2025-10-30 00_41_32-Word.png2025-10-30 00_36_59-Word.png


2025-10-30 00_42_51-Word.png


Dans advanced veuillez copier/coller l'info du dessous :

YAML:
# === OnlyOffice Advanced Configuration ===

# Timeout élevés pour édition collaborative
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;

# Fichiers volumineux (documents, tableurs, etc.)
client_max_body_size 5G;

  • Étape 5 : Lancer le projet
Maintenant vous pouvez lancer le projet dans container manager.
Attention, il faut attendre au moins 5 minutes que l'instance sync-db (mariadb) ce lance et initialise la base.
Je vous conseille de couper votre conteneur sync-in, pendant ce temps.

Si vous voulez etre sûr que sync-in ce lance, vérifier les logs de sync-db. Si vous voyer apparaitre cela, il est ok :
2025-10-30 00_48_02-Sync-in _ Explorateur de fichiers.png

Il vous reste plus qu'à vous connecter avec le compte administrateur et le mot de passe mis dans le docker-compose :
2025-10-30 00_49_57-Word.png

Amusez vous bien. Et changer de suite le mot de passe administrateur.
Je ne détail pas l'utilisation mais sachez qu'il est possible de faire monter un dossier webdav sur Windows. Ou d'installer une application (https://sync-in.com/fr/downloads) pour accéder aux documents. Vous pouvez activer le MFA

Merci de m'avoir lu.

PS : Désolé pour mes éventuelles fautes, je n'ai pas utilisé l'IA pour faire le tuto.
PS2 : Le nom de domaine tsubasa.fr est bien fictif.
PS3: Je vous préparer un tuto sur Nextcloud AIO
 
Dernière édition:
Merci pour ce tuto - qui viendra compléter ceux que tu as référencés.
Sync-In est sans aucun doute, à mon avis, la meilleure application de Synchro qui s'approche de près de Drive (ergonomie, partage de fichiers, cloud collaboratif ...).
 
  • J'aime
Réactions: Titux
Oui, elle rapide grâce à son système d'indexation différentes des autres solutions.
Des nouveautés sont en cours de développement, j'espère voir une application officielle sur android ou iOS. Et à la limite la gestion de calendrier et contact en option serait sympa.
Je n'ai pas fouiller mais je vais le faire pour essayer de changer le logo afin de le personnaliser.
Mais tests sont vraiment sympas depuis quelques jours.
Si on veut juste de la collaboration de fichier, je suis d'accord avec toi, on est dans l'une des meilleures solutions open source ou non.