Initial vault setup
This commit is contained in:
@@ -0,0 +1,161 @@
|
||||
---
|
||||
title: PlanarAlly
|
||||
created: 2026-06-07
|
||||
updated: 2026-06-07
|
||||
type: app
|
||||
tags: [catalogue, gaming, vtt, jdr, tabletop, django, python, multijoueur]
|
||||
confidence: high
|
||||
contested: false
|
||||
sources: [https://selfh.st/apps/?tag=Gaming, https://www.planarally.io/]
|
||||
---
|
||||
|
||||
# 🐉 PlanarAlly
|
||||
|
||||
> **Virtual Tabletop (VTT) self-hosted en Python/Django** — l'alternative open-source sérieuse à Foundry VTT pour vos parties de JDR en ligne.
|
||||
|
||||
## 📋 Informations Générales
|
||||
|
||||
| Champ | Valeur |
|
||||
| :--- | :--- |
|
||||
| **Site web** | [planarally.io](https://www.planarally.io/) |
|
||||
| **GitHub** | [Kruptein/PlanarAlly](https://github.com/Kruptein/PlanarAlly) |
|
||||
| **License** | AGPL-3.0 |
|
||||
| **Langage** | Python (Django) + TypeScript (client) |
|
||||
| **Étoiles** | ⭐84 (catalogue) |
|
||||
| **Dernière MAJ** | 2025.x (release 2025.1) |
|
||||
| **Catégorie** | [[cat-gaming\|Gaming]] |
|
||||
|
||||
## 📝 Description
|
||||
|
||||
**PlanarAlly** est un **Virtual Tabletop (VTT)** self-hosted écrit en **Python/Django** côté serveur, avec un client **TypeScript** (React-like) moderne. Il permet aux maîtres du jeu (DM/MJ) et à leurs joueurs de se retrouver autour d'une table virtuelle pour jouer à **Donjons & Dragons, Pathfinder, Call of Cthulhu, ou tout autre JDR** avec cartes, tokens, mesures, et plus encore.
|
||||
|
||||
L'application se distingue par son **système de vision avancé** : chaque token a un champ de vision, une ligne de vue (Line of Sight) qui dépend des murs, et un **fog of war** dynamique. Le DM peut aussi définir des zones de lumière (luminosité, couleur) qui ne se révèlent aux joueurs que lorsque leurs tokens s'en approchent. C'est l'un des VTT open-source les plus aboutis sur ce point.
|
||||
|
||||
L'architecture est **client-serveur** : un backend Django gère l'état de la partie (synchronisation temps réel via websockets) et un client TypeScript gère le rendu canvas. Vous pouvez soit **build le client manuellement**, soit utiliser une image Docker **pré-buildée** qui embarque le client et le serveur. PlanarAlly supporte aussi les **macros** (scripts Python exécutés en jeu) et un système de **notes partagées** entre le DM et les joueurs.
|
||||
|
||||
**Fonctionnalités clés** :
|
||||
- ✅ **Line of Sight** dynamique par token (calcul sur serveur)
|
||||
- ✅ **Fog of War** révélé progressivement
|
||||
- ✅ **Système d'éclairage** (zones de lumière, ombres, jour/nuit)
|
||||
- ✅ **Mesures** (cases, distances configurables par map)
|
||||
- ✅ **Layers multiples** : background, terrain, tokens, GM, fog
|
||||
- ✅ **Notes partagées** (MJ ↔ joueurs)
|
||||
- ✅ **Macros Python** côté serveur (extensibilité)
|
||||
- ✅ **Templates / assets** réutilisables (blocs de donjons, marqueurs)
|
||||
- ✅ **Multijoueur temps réel** via websockets
|
||||
- ✅ **Partage d'écran** (optionnel, via WebRTC peer-to-peer)
|
||||
- ✅ **Self-hosted 100%** : vos parties restent privées
|
||||
|
||||
## 🚀 Installation
|
||||
|
||||
### Option 1 : Docker (recommandé, client pré-buildé)
|
||||
|
||||
```yaml
|
||||
# docker-compose.yml
|
||||
services:
|
||||
planarally:
|
||||
container_name: planarally
|
||||
image: kruptein/planarally:latest # ou :v2025.1
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8443:8443"
|
||||
volumes:
|
||||
- ./planarally/data:/app/data # base SQLite + médias uploadés
|
||||
- ./planarally/config:/app/config # config serveur
|
||||
environment:
|
||||
- TZ=Europe/Paris
|
||||
- PA_SECRET=*** Change...t
|
||||
- PA_HOST=0.0.0.0
|
||||
- PA_PORT=8443
|
||||
- PA_WEB_PORT=8443
|
||||
```
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Accéder à `https://IP:8443`. Le serveur utilise un certificat auto-signé par défaut — à remplacer ou à mettre derrière un reverse proxy ([[app-traefik]], [[app-caddy]]).
|
||||
|
||||
### Option 2 : Build manuel (client + serveur)
|
||||
|
||||
```bash
|
||||
git clone https://github.com/Kruptein/PlanarAlly.git
|
||||
cd PlanarAlly
|
||||
|
||||
# Backend Django
|
||||
cd server
|
||||
pip install -r requirements.txt
|
||||
python manage.py migrate
|
||||
python manage.py runserver 0.0.0.0:8000
|
||||
|
||||
# Client (autre terminal)
|
||||
cd ../client
|
||||
npm install
|
||||
npm run build
|
||||
# Servir le build statique via Nginx/Caddy
|
||||
```
|
||||
|
||||
### Option 3 : Utiliser le dashboard hébergé (sans self-host)
|
||||
|
||||
L'équipe propose un dashboard hébergé gratuit sur [planarally.io](https://www.planarally.io/) pour ceux qui ne veulent pas auto-héberger — mais l'**auto-hébergement est l'option recommandée** pour la confidentialité de vos parties.
|
||||
|
||||
## ⚙️ Configuration
|
||||
|
||||
1. **Premier compte** : s'inscrire au premier accès sur l'UI — le premier compte créé devient administrateur.
|
||||
2. **Carte** : créer un "Location" (donjon, ville, etc.), uploader une image de carte (`.jpg`/`.png`, jusqu'à ~20 Mo recommandé).
|
||||
3. **Calibration** : clic droit sur la carte → "Set grid size" pour configurer la taille d'une case (ex. 5ft = 70px).
|
||||
4. **Tokens** : glisser-déposer depuis la sidebar, configurer le champ de vision (portée, angle, type : normal/grand-angle/...).
|
||||
5. **MJ vs Joueurs** : activer/désactiver le "fog of war" et le "DM layer" depuis le panneau de droite.
|
||||
6. **Macros** : onglet "Macros" pour écrire des scripts Python qui peuvent lire/modifier l'état de la partie.
|
||||
7. **Reverse proxy** : à mettre derrière [[app-traefik]] ou [[app-caddy]] avec **WebSocket** correctement relayé (Upgrade/Connection headers), sinon le multijoueur ne marche pas.
|
||||
|
||||
## 🔄 Alternatives
|
||||
|
||||
### Open Source (VTT self-hosted)
|
||||
|
||||
- **Foundry VTT** — Référence, ~50 USD licence unique, très riche (la cible que PlanarAlly vise)
|
||||
- **Owlbear Rodeo** — Simple, gratuit pour usage basique, hébergé ou self-hosted
|
||||
- **Astra** — Encore en développement, basé sur Phaser
|
||||
- **Tabletop Simulator** — Non self-hosted, propriétaire
|
||||
- **Roll20** — Propriétaire, hébergé
|
||||
- **MapTool** — Java desktop, self-hostable, plus ancien
|
||||
- **Fantasy Grounds** — Propriétaire, Unity-based
|
||||
|
||||
### Comparaison rapide
|
||||
|
||||
| Critère | PlanarAlly | Foundry VTT | Owlbear Rodeo |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| Prix | Gratuit (AGPL) | ~50 USD licence | Freemium |
|
||||
| Self-hosted | ✅ | ✅ | ✅ (limité) |
|
||||
| Line of Sight | ✅ Avancé | ✅ Très avancé | ❌ Basique |
|
||||
| Fog of War | ✅ Dynamique | ✅ | ✅ |
|
||||
| Lighting | ✅ Zones | ✅ Très avancé | ❌ |
|
||||
| Macros | ✅ Python | ✅ JS/Slott | ❌ |
|
||||
| Modules | Limité | ✅ Énorme écosystème | ❌ |
|
||||
| Licence | AGPL-3.0 | Propriétaire | AGPL-3.0 |
|
||||
|
||||
## 🔐 Sécurité
|
||||
|
||||
- **HTTPS obligatoire** : les websockets et l'auth MJ/joueurs exigent TLS. Mettre derrière un reverse proxy ([[app-traefik]] / [[app-caddy]]).
|
||||
- **Compte admin** : le premier compte créé est admin. Protégez-le avec un mot de passe fort + 2FA si possible.
|
||||
- **`PA_SECRET`** : 32+ caractères aléatoires (`openssl rand -hex 32`).
|
||||
- **Confidentialité des parties** : en self-hosted, vos parties ne transitent par aucun serveur tiers. C'est un **avantage énorme** vs Roll20/Foundry hébergé pour les campagnes sensibles.
|
||||
- **Base de données** : `./data/db.sqlite3` — sauvegarder régulièrement.
|
||||
- **Pas d'auth native** : pour ajouter 2FA ou OAuth, il faut passer par un proxy d'authentification ([[app-authelia]], [[app-authentik]]).
|
||||
|
||||
## 📚 Ressources
|
||||
|
||||
- [Site officiel](https://www.planarally.io/)
|
||||
- [Documentation self-hosting](https://www.planarally.io/server/setup/self-hosting/)
|
||||
- [GitHub Kruptein/PlanarAlly](https://github.com/Kruptein/PlanarAlly)
|
||||
- [Discord communautaire](https://discord.gg/4rd4mus)
|
||||
- [Blog & guides](https://www.planarally.io/blog/)
|
||||
|
||||
## Pages Liées
|
||||
|
||||
- [[cat-gaming]] — Catégorie Gaming
|
||||
- [[app-traefik]] — Reverse proxy (WebSockets!)
|
||||
- [[app-authelia]] — Ajouter 2FA
|
||||
- [[app-foundry-vtt]] — Alternative payante (si plus tard ajoutée)
|
||||
- [[recettes-docker-compose]] — Templates Docker
|
||||
- [[securisation-home-lab]] — Durcir l'infra
|
||||
Reference in New Issue
Block a user