Files
2026-06-09 18:40:21 +02:00

93 lines
4.1 KiB
Markdown

---
title: Vanilla Cookbook
created: 2026-06-08
updated: 2026-06-08
type: app
tags: [catalogue, recipes, self-hosted, php]
confidence: medium
contested: false
sources:
- https://github.com/jt196/vanilla-cookbook
---
# Vanilla Cookbook 🍰
> Gestionnaire de recettes **minimaliste et simple** en PHP, sans framework lourd ni base de données complexe.
| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | https://github.com/jt196/vanilla-cookbook |
| **GitHub** | https://github.com/jt196/vanilla-cookbook |
| **License** | MIT |
| **Langage** | PHP (sans framework lourd) |
| **Étoiles** | 150 |
| **Dernière MAJ** | 2026-05-25 |
| **Catégorie** | [[cat-recipes]] |
## Description
Vanilla Cookbook est un **gestionnaire de recettes minimaliste** écrit en PHP, pensé pour les utilisateurs qui veulent un outil simple et fonctionnel sans la complexité des gros projets comme Mealie ou Tandoor. Pas de framework JS moderne, pas de base PostgreSQL à administrer : juste du PHP, un peu de JavaScript vanilla, et SQLite pour le stockage.
L'application couvre l'**essentiel** : création de recettes avec ingrédients, étapes, photos, tags ; organisation par catégories ; recherche full-text basique ; import/export JSON ; planification de repas ; liste de courses. L'interface est volontairement dépouillée, légère et rapide à charger même sur un Raspberry Pi.
C'est l'outil idéal pour un **petit homelab** ou un **serveur familial** qui veut héberger un livre de recettes commun sans déployer une stack Docker de 500 Mo. Vanilla Cookbook consomme moins de 30 Mo de RAM et fonctionne avec PHP 8.0+ et SQLite. Son auteur, **jt196**, le maintient activement avec des releases régulières.
## Installation
### Docker Compose
```yaml
services:
cookbook:
image: jt196/vanilla-cookbook:latest
container_name: vanilla-cookbook
environment:
- APP_URL=https://cookbook.example.com
- DB_TYPE=sqlite
- PHP_TIMEZONE=Europe/Paris
volumes:
- ./data:/var/www/html/data
- ./uploads:/var/www/html/uploads
ports:
- "8085:80"
labels:
- traefik.enable=true
- traefik.http.routers.cookbook.rule=Host(`cookbook.example.com`)
- traefik.http.routers.cookbook.entrypoints=websecure
- traefik.http.routers.cookbook.tls.certresolver=letsencrypt
- traefik.http.services.cookbook.loadbalancer.server.port=80
restart: unless-stopped
```
### Installation PHP classique
```bash
git clone https://github.com/jt196/vanilla-cookbook.git
cd vanilla-cookbook && composer install
php -S 0.0.0.0:8085
```
## Configuration
1. Cloner le repo et ajuster les permissions sur `./data` et `./uploads` (chown `www-data`).
2. Configurer **`APP_URL`** et la **timezone PHP** dans `.env`.
3. Créer le **compte admin** depuis l'UI au premier lancement.
4. (Optionnel) Configurer un **reverse proxy** (Caddy, Nginx, Traefik) pour HTTPS.
5. Importer vos recettes existantes via le **fichier JSON** (export depuis Paprika, Mealie, etc.).
## Alternatives
- **Open source** : [[app-mealie]] (référence, plus complet), [[app-tamari]] (Python), [[app-norish]] (multi-users), [[app-bar-assistant]] (cocktails), Tandoor Recipes, Grocy, RecipeSage, Forkful, RecipeMD (Markdown), Cooklang, Foodsoft (coop).
- **Propriétaire** : Paprika Recipe Manager, CopyMeThat, Plan to Eat, Yummly, BigOven, Cookpad, Samsung Food.
## Sécurité
- **Permissions strictes** sur le dossier `./data` (SQLite) : `chmod 700` recommandé.
- **HTTPS obligatoire** via reverse proxy (Let's Encrypt, Caddy).
- **Désactiver l'inscription ouverte** après création du premier compte admin.
- **Backups réguliers** de `./data` (SQLite) et `./uploads` (photos).
- **PHP-FPM** plutôt que mod_php pour réduire la surface d'attaque sur Apache/Nginx.
## Ressources
- Code : https://github.com/jt196/vanilla-cookbook
- Releases : https://github.com/jt196/vanilla-cookbook/releases
- Issues : https://github.com/jt196/vanilla-cookbook/issues
## Pages Liées
- [[cat-recipes]] — Catégorie parente
- [[app-mealie]] — Référence en gestion de recettes
- [[app-tamari]] — Alternative Python minimaliste
- [[recettes-docker-compose]] — Modèles de stacks