Initial vault setup
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
---
|
||||
title: Snac
|
||||
created: 2026-06-07
|
||||
updated: 2026-06-07
|
||||
type: app
|
||||
tags: [catalogue, activitypub-fediverse, microblogging, c, minimal, fediverse, single-binary, no-javascript]
|
||||
confidence: high
|
||||
contested: false
|
||||
sources: [https://selfh.st/apps/?tag=activitypub-fediverse, https://codeberg.org/grunfink/snac2]
|
||||
---
|
||||
|
||||
# ⚡ Snac
|
||||
|
||||
> **Le serveur ActivityPub le plus minimaliste du Fediverse** — un binaire C de quelques centaines de Ko, sans JavaScript, sans framework, qui fait juste le job.
|
||||
|
||||
## 📋 Informations Générales
|
||||
|
||||
| Champ | Valeur |
|
||||
| :--- | :--- |
|
||||
| **Site web** | [codeberg.org/grunfink/snac2](https://codeberg.org/grunfink/snac2) |
|
||||
| **GitHub / Codeberg** | [grunfink/snac2](https://codeberg.org/grunfink/snac2) |
|
||||
| **Licence** | MIT |
|
||||
| **Langage** | C99 |
|
||||
| **Étoiles GitHub** | 104 ⭐ |
|
||||
| **Dernière MAJ** | 2026-06 |
|
||||
| **Catégorie** | [[cat-activitypub-fediverse\|ActivityPub / Fediverse]] |
|
||||
|
||||
## 📝 Description
|
||||
|
||||
**Snac** (ou **snac2** dans sa version actuelle) est l'œuvre de **grunfink**, un développeur C chevronné. C'est un **serveur ActivityPub minimaliste écrit en C99 pur**, qui se veut l'antithèse de Mastodon et consorts : **un seul binaire**, **pas de framework**, **pas de JavaScript côté client**, **pas de base de données externe** (juste un fichier JSON par utilisateur), **consommation mémoire ridiculement faible** (souvent < 30 Mo de RSS).
|
||||
|
||||
L'ambition est de fournir un **nœud Fediverse personnel** pour quelqu'un qui veut être présent sur le réseau sans pour autant administrer un Mastodon ou un Pleroma. Snac est mono-instance, mono-utilisateur (ou multi-comptes techniques sur la même instance), avec une **interface web volontairement dépouillée** qui sert du HTML brut — pas de SPA, pas de CDN, pas de tracking. Les posts sont des **statiques HTML** générés à la volée.
|
||||
|
||||
Côté fédération, Snac est **remarquablement compatible** : il parle ActivityPub avec Mastodon, Pleroma, Akkoma, Misskey, Pixelfed, Bookwyrm, Peertube, Mobilizon, Mbin, et le reste du Fediverse. Les **messages privés**, **boosts**, **favoris**, **follows**, **listes**, **signets** sont gérés. L'auteur publie régulièrement des **extensions ActivityPub** adoptées petit à petit par d'autres serveurs (ex : support natif des `Hashtag`).
|
||||
|
||||
Forces : **binaire unique, binaire static, ultra-léger, parfait pour un Raspberry Pi Zero 2**, code auditable (le C99 est ce qui se lit le mieux), licence MIT permissive. Faiblesses : pas de GUI d'administration (admin en CLI), pas d'upload d'images volumineux par défaut, pas de support S3, pas de cluster.
|
||||
|
||||
## 🚀 Installation
|
||||
|
||||
### Option recommandée : binaire natif compilé
|
||||
|
||||
```bash
|
||||
# Dépendances : gcc, make, libssl-dev, python3 (pour générer le cert auto-signé)
|
||||
git clone https://codeberg.org/grunfink/snac2.git
|
||||
cd snac2
|
||||
make
|
||||
sudo make install
|
||||
```
|
||||
|
||||
### Lancement (derrière un reverse proxy TLS)
|
||||
|
||||
```bash
|
||||
# Créer un utilisateur Snac dédié
|
||||
sudo useradd -r -d /var/lib/snac -s /bin/false snac
|
||||
sudo -u snac snac init /var/lib/snac/vous.example.org
|
||||
|
||||
# Lancer le serveur
|
||||
sudo -u snac snac httpd /var/lib/snac/vous.example.org 127.0.0.1 8001
|
||||
```
|
||||
|
||||
### Reverse proxy Caddy
|
||||
|
||||
```caddyfile
|
||||
akkoma.example.org {
|
||||
reverse_proxy 127.0.0.1:8001
|
||||
}
|
||||
```
|
||||
|
||||
### Option 2 : Docker (image communautaire)
|
||||
|
||||
```yaml
|
||||
# docker-compose.yml
|
||||
services:
|
||||
snac:
|
||||
image: grunfink/snac2:latest
|
||||
container_name: snac
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ./data:/var/lib/snac
|
||||
ports:
|
||||
- "8001:8001"
|
||||
command: snac httpd /var/lib/snac/vous.example.org 0.0.0.0 8001
|
||||
```
|
||||
|
||||
## ⚙️ Configuration Initiale
|
||||
|
||||
1. **Initialiser l'instance** : `snac init /var/lib/snac/votre-domaine`.
|
||||
2. **Créer le premier compte admin** : `snac adduser /var/lib/snac/votre-domaine pseudo`.
|
||||
3. **Configurer un reverse proxy** : **obligatoire** — Snac n'inclut pas le TLS. Caddy/Nginx/Traefik avec Let's Encrypt.
|
||||
4. **Activer la fédération** : tester en suivant un compte Mastodon distant, vérifier `/.well-known/webfinger`.
|
||||
5. **Uploads média** : par défaut stockés dans `/var/lib/snac/data`, taille max configurable.
|
||||
6. **Sauvegardes** : un simple `cp -r /var/lib/snac` suffit — c'est toute la base de données (1 fichier JSON par compte + les médias).
|
||||
|
||||
## 🔄 Alternatives
|
||||
|
||||
### Open Source
|
||||
- [[app-ktistec]] — Approche minimaliste en Crystal.
|
||||
- [[app-mitra]] — Microblog Fediverse en Rust.
|
||||
- [[app-pleroma]] — Le microblogging Fediverse en Elixir, plus complet.
|
||||
- [[app-akkoma]] — Fork de Pleroma.
|
||||
- [[app-mastodon]] — Le standard, en Ruby.
|
||||
|
||||
### Propriétaires (ce que cette app remplace)
|
||||
- **Twitter / X** — centralisé, traque publicitaire.
|
||||
- **Threads** (Meta) — non fédéré, lié à Instagram.
|
||||
- **Substack Notes** — centralisé, pas de fédération.
|
||||
|
||||
## 🔐 Sécurité
|
||||
|
||||
- **Pas d'auth intégrée** : Snac n'a pas de mot de passe admin par défaut (accès via `snac` CLI en root). L'utilisateur web ne s'authentifie que par **cookies de session** générés après login.
|
||||
- **Cookies de session** : flags `Secure` et `HttpOnly` par défaut, expires au redémarrage si non renouvelés.
|
||||
- **HTTPS obligatoire** : derrière Caddy/Nginx, configurer HSTS strict.
|
||||
- **Validation ActivityPub** : Snac vérifie la signature HTTP des requêtes fédérées (requis par le protocole), bloque les instances malveillantes.
|
||||
- **CSRF** : protection native via tokens sur les formulaires.
|
||||
- **Pas de base de données** : le fichier JSON est lisible et auditable, mais **sauvegardez-le régulièrement** car une corruption = données perdues.
|
||||
- **Mises à jour** : l'auteur publie souvent, **suivre les commits** car le format JSON peut évoluer.
|
||||
|
||||
## 📚 Ressources
|
||||
|
||||
- [Codeberg grunfink/snac2](https://codeberg.org/grunfink/snac2)
|
||||
- [Manuel Snac (en)](https://codeberg.org/grunfink/snac2/raw/HEAD/snac.1)
|
||||
- [Fediverse.blog — Snac guide](https://fediverse.blog/~/snac/)
|
||||
|
||||
## Pages Liées
|
||||
- [[cat-activitypub-fediverse]] — Catégorie parente
|
||||
- [[app-ktistec]] — Approche minimaliste en Crystal
|
||||
- [[app-mitra]] — Microblog Fediverse en Rust
|
||||
- [[recettes-docker-compose]] — Templates Docker
|
||||
Reference in New Issue
Block a user