Anytype + Docker - Vos notes chiffrées et synchronisées, sans cloud en 5 minutes chrono
Salut les amis, j'espère que vous allez bien.
Alors cette semaine je vous propose un tuto sur AnyType. Si vous n'en avez jamais entendu parler, c'est parce que vous ne lisez pas assez attentivement mon site ^^ et comme j'ai eu plein de bons retours dessus, je me suis dit que j'allais vous expliquer comment installer tout ça en local sur votre machine et bien sûr le synchroniser entre tous vos appareils.
Si je vous en parle, c'est par hasard, c'est parce que je suis en train progressivement d'essayer de sortir de pas mal de services que j'utilise, notamment Apple Notes. J'ai testé évidemment avant ça Notion et puis Obsidian mais j'arrive pas à m'y faire.
Alors qu'AnyType je le trouve un petit peu plus agréable, plus sympa à utiliser. Donc voilà, c'est totalement subjectif mais j'assume.
Installer Anytype
Allez on commence, direction anytype.io... Téléchargez le client pour votre système (Mac, Windows, Linux, et même iOS/Android pour le mobile) et installez-le. Rien de sorcier jusque là...
Au premier lancement, l'app vous demande de créer votre Vault (votre coffre-fort numérique) et vous donne une phrase de récupération de 12 mots.
Petite parenthèse, vous pouvez passer l'app en Français si vous êtes plus à l'aise.
Notez-la par exemple sur des papiers que vous mettrez en sécurité à différents endroits (banque, coffre fort...etc) car c'est votre seul moyen de récupérer vos données si vous perdez l'accès. Hé oui, y'a pas de "mot de passe oublié", et pas de support technique qui va vous sauver... c'est le deal du local-first.
Ensuite, passez tout le blabla, le sondage, l'ajout de votre email...etc. Tout ça, on n'en a rien à faire.
Et vous vous retrouvez avec ça:
Monter son serveur de sync avec Docker
Par défaut, Anytype vous file 1 Go de stockage cloud gratuit pour la sync entre vos appareils. C'est correct, mais si vous préférez tout garder chez vous (et c'est un peu le but de ce tuto), on va monter ça sur notre propre serveur.
Et pour cela, on va utiliser un projet qui s'appelle any-sync-bundle. Il s'agit d'un wrapper communautaire qui regroupe tous les services de sync dans un seul container. Anytype a aussi un repo officiel avec docker-compose, mais any-sync-bundle est nettement plus simple à déployer, vous allez voir...
Ce qu'il vous faut
Pour ce faire, vous allez avoir besoin d'un serveur avec Docker. Ça peut être un NAS Synology, un Raspberry Pi 4, un VPS à 5 balles par mois, ou encore un vieux PC de récup qui tourne sous Linux... peu importe.
Bon, prévoyez quand même 512 Mo de RAM et un peu d'espace disque, hein. Ah et vous aurez aussi besoin d'ouvrir 2 ports pour y accèder depuis l'extérieur : TCP 33010 (DRPC) et UDP 33020 (QUIC). Et c'est tout.
En ce qui me concerne, je ne m'embête même pas à ouvrir des ports car je m'y connecte via mon VPN local (qui peut être un Tailscale aussi)
Lancer le container
On va maintenant lancer le containeur Docker. Pour cela, créez le dossier anytype-data sur votre serveur puis dedans un sous dossier data et lancez la commande docker suivante dans ce dossier :
mkdir -p /anytype-data && mkdir -p /anytype-data/data && cd /anytype-data docker run -d \ --name anytype-sync \ --restart unless-stopped \ -e ANY_SYNC_BUNDLE_INIT_EXTERNAL_ADDRS="VOTRE_IP_SYNOLOGY" \ -p 33010:33010 \ -p 33020:33020/udp \ -v $(pwd)/data:/data \ ghcr.io/grishy/any-sync-bundle:latest
Et si comme moi, vous préférez un docker-compose.yml, utilisez ça :
version: "3.8"
services:
anytype-sync:
image: ghcr.io/grishy/any-sync-bundle:latest
container_name: anytype-sync
restart: unless-stopped
environment:
- ANY_SYNC_BUNDLE_INIT_EXTERNAL_ADDRS=VOTRE_IP_SYNOLOGY
ports:
- "33010:33010"
- "33020:33020/udp"
volumes:
- ./data:/data
Et remplacez VOTRE_IP_SYNOLOGY par l'IP de votre serveur. Si c'est un VPS avec un nom de domaine, mettez le domaine à la place et si vous utilisez Tailscale, mettez l'IP Tailscale du serveur comme ça, ça fonctionnera en remote et en local.
Vérifier que ça tourne
Ensuite, ça devrait charger l'image et se lancer. Et pour voir si ça tourne, tapez la commande :
docker logs anytype-sync
Ensuite, cherchez un message du genre "all services started". Ou allez dans le terminal du container (sur Syno) pour voir si c'est démarré :
Si c'est là, c'est bon, votre serveur de synchronisation est opérationnel ! Sauf si vous voyez des erreurs du genre "port already in use"... dans ce cas, vérifiez qu'aucun autre service ne tourne déjà sur les ports 33010/33020 (vous pouvez utiliser la commande lsof -i :33010 par exemple)
Récupérer la config client
Maintenant faut récupérer la config pour le client et celle-ci se trouve ici :
cat ~/anytype-data/data/client-config.yml
Ce fichier YAML, c'est ce que vous allez donner à l'app Anytype pour qu'elle se connecte à VOTRE serveur au lieu du cloud. Récupérez-le sur votre machine via SCP, clé USB, AirDrop... comme vous préférez.
Attention, le fichier bundle-config.yml dans le même répertoire contient les clés privées de votre serveur. Sauvegardez-le précieusement. Si vous le perdez, c'est game over pour vos données. Sérieusement, copiez-le ailleurs MAINTENANT.
Connecter l'app au serveur
Maintenant que le serveur tourne, on va brancher l'appli cliente dessus.
Les identités dans Anytype sont liées au réseau donc quand vous passez en self-hosted, il faut créer un nouveau compte. Si vous aviez déjà des données sur le cloud Anytype, vous devez donc les exporter avant de faire la bascule.
Sur Desktop
Déconnectez-vous du compte actuel comme ceci :
Puis sur l'écran d'accueil, cliquez sur la roue crantée (Settings) et sélectionnez "Self-hosted" et uploadez le fichier client-config.yml.
Puis créez vous un nouveau compte pour plus de sécurité, ou entrez vos mots clés et hop, c'est connecté.
Sur Mobile
C'est le même principe. Vous allez dans paramètres, sélectionnez "Self-hosted", uploadez la config. Utilisez le même compte que sur desktop pour que la synchronisation fonctionne entre vos appareils.
Tester la sync
Maintenant, on va tester que tout fonctionne bien... Créez une note sur l'ordi et attendez quelques secondes. Ensuite, vérifiez sur votre téléphone et si la note apparaît... c'est gagné ! Y'a zéro cloud externe, c'est chiffré et tout passe par votre serveur !
Accès distant
Maintenant, si votre serveur est à la maison et que vous voulez sync depuis l'extérieur, deux options :
Soit vous mettez en place un reverse proxy (Nginx ou Caddy) si vous avez déjà un domaine configuré. Ou alors, moi ce que je fais, c'est un Tailscale pour un réseau privé mesh sans ouvrir de ports supplémentaires. Perso, c'est la deuxième option que je recommande... vous l'installez sur le serveur et vos appareils, et vous avez votre VPN en 2 minutes.
Les concepts clés
Bon maintenant que tout est en place, voyons comment ça fonctionne concrètement car Anytype c'est pas juste un bloc-notes amélioré. C'est carrément un système d'objets reliés entre eux. Voici un petit vocable pour vous aider à vous y retrouver :
Vault : C'est votre coffre-fort qui contient l'ensemble de vos données.
Spaces : Ce sont des espaces séparés (perso, boulot, projets...) et chaque Space est indépendant, avec ses propres objets et réglages. C'est l'idéal pour cloisonner.
Objects : TOUT est un objet dans Anytype. Une note, une tâche, un contact, un bookmark, un projet... tout. Et chaque objet peut être relié aux autres.
Types : C'est la catégorie d'un objet... Note, Tâche, Projet, Contact... et vous pouvez même créer vos propres Types custom.
Properties (anciennement "Relations") : En gros, ce sont les champs qui relient les objets entre eux. Par exemple, un projet peut avoir une Property "Responsable" qui pointe vers un objet Contact. Grâce à ces properties / relations, vos données forment un vrai graphe de connaissances. C'est pas juste des pages dans des dossiers comme dans Apple Notes.
Organiser son espace
Créer un Space et des objets
Dans la sidebar, créez un nouveau Space et donnez-lui un nom ("Perso", "Boulot"...). Ensuite, à l'intérieur, vous avez accès à tous les types de blocs : texte, listes, images, code, tableaux...
Et pour créer un objet typé, genre une Tâche ou un Contact, utilisez le + dans la sidebar ou tapez / et cherchez le Type voulu. Vous pouvez ensuite lui ajouter des Properties pour le relier à d'autres objets.
Sets et vues
Une liste, c'est une vue filtrée de vos objets par Type ou par Propriété. Vous créez une liste "Mes tâches" et hop, vous avez une vue kanban, liste ou grille avec filtres et tris. Vous pouvez trier par date, filtrer par statut, grouper par projet...
C'est votre propre Trello, mais hébergé chez vous et ça, Apple Notes par exemple, ne sait pas le faire.
Templates
Vous pouvez aussi créer un modèle pour chaque Type. Comme ça, quand vous faites un nouveau projet, le modèle pré-remplit automatiquement la structure de base et y'a p
lus besoin de repartir de zéro à chaque fois.
Importer ses données
Si vous venez de Notion ou Obsidian
, c'est facile : Settings > Import > Notion, connectez votre workspace via l'API et l'import se fait tout seul. Les formules deviennent du texte statique (pas de miracle), mais la structure globale est préservée.
Si vous venez d'Apple Notes, comme moi, c'est un peu plus artisanal. Apple Notes n'exporte pas en Markdown nativement, du coup il faut ruser : sélectionnez vos notes, glissez-les sur le bureau (ça crée des fichiers texte), puis importez via Settings > Import > Markdown dans Anytype. Autre option, passez par un outil comme Exporter pour convertir vos notes en fichiers .md propres avant l'import.
C'est pas aussi propre qu'un import Notion, mais bon, ça fera le taf. D'ailleurs, une fois que tout est dedans et que vous avez commencé à organiser vos Spaces avec des Types et des Properties, vous allez vite comprendre pourquoi on ne revient pas en arrière.
Backup et mise à jour
Maintenant, pour la sauvegarde de votre serveur, vos données sont dans le répertoire data/. Un simple rsync ou un snapshot ZFS suffira car c'est juste des fichiers sur le disque, donc pas besoin de logiciel compliqué.
Et pour mettre à jour le serveur, si vous utilisez docker run :
docker pull ghcr.io/grishy/any-sync-bundle:latest docker stop anytype-sync && docker rm anytype-sync
Puis relancez la même commande docker run qu'au début
Si vous utilisez docker-compose :
docker compose -f docker-compose.yml pull
docker compose -f docker-compose.yml up -d
Comme vos données sont dans le volume monté (data/), pas dans le container, y'a pas de perte de données à la mise à jour.
Et voilà comment vos notes peuvent rester chez vous, chiffrées, tout ça gratuitement, avec un serveur Docker qui se met en place en moins de 5 minutes. Apple Notes peut bien aller se rhabiller !
J'espère que ça vous aura plu et encore merci pour le soutien !