---
title: Cannery
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, tracking, inventaire, munitions, survival, django, python]
confidence: medium
contested: false
sources: [https://selfh.st/apps/cannery, https://github.com/cannery-app/cannery]
---

# Cannery 🥫

> Un gestionnaire d'inventaire spécialisé munitions et équipements de survie, construit sur Django, fork d'un projet antérieur.

| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | https://cannery.app/ |
| **GitHub** | https://github.com/cannery-app/cannery |
| **License** | AGPL-3.0 |
| **Langage principal** | Python (Django + Phoenix LiveView) |
| **Étoiles GitHub** | ⭐0 (projet archivé/relancé) |
| **Dernière MAJ** | 2025-08-04 |
| **Catégorie** | [[cat-tracking]] |

## Description

Cannery est un **gestionnaire d'inventaire spécialisé** dans les **munitions, armes, équipements de tir et de survie**. Le projet a une histoire : à l'origine écrit en **Elixir/Phoenix LiveView** (« Cannery v1 »), il a été réécrit en **Django** (« Cannery v2 ») avant que le mainteneur principal ne cesse l'activité. La version Django est elle aussi en sommeil.

Le cas d'usage est précis : un tireur sportif, un chasseur ou un prepper veut **retracer précisément** ses stocks de munitions (calibre, marque, lot, date d'achat, prix, nombre), ses armes (numéro de série, date d'acquisition, valeur d'assurance), et ses **recharges** (composants : amorces, poudre, projectiles, étuis). Cannery offre des formulaires adaptés à ces besoins spécifiques, là où un Grocy ou un Homebox reste générique.

L'application fournit aussi des **rapports de valeur**, l'**historique d'utilisation** (cartes tirées à l'entraînement), et un **alerte de stock bas**. L'API REST est exposée pour intégrations tierces (scripts d'import, dashboards Grafana).

⚠️ **Projet à l'abandon / archivé** (⭐0, **bus factor 0** à ce stade). À utiliser uniquement comme base de fork, ou comme inspiration pour un projet similaire. Le code reste lisible et bien structuré, parfait pour un port personnel. Pour un usage en production, préférer Grocy ou Homebox (génériques mais vivants).

## Installation
### Via Docker (recommandé)
```yaml
services:
  cannery:
    container_name: cannery
    image: ghcr.io/cannery-app/cannery:latest
    restart: unless-stopped
    ports:
      - "8089:4000"
    environment:
      - SECRET_KEY_BASE=***-base-64-...-long
      - DATABASE_URL=postgresql://cannery:***@db:5432/cannery
      - HOST=aventure.example.com
    depends_on:
      db:
        condition: service_healthy

  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      - POSTGRES_DB=cannery
      - POSTGRES_USER=cannery
      - POSTGRES_PASSWORD=***    volumes:
      - cannery-db:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U cannery"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  cannery-db:
```

### Installation manuelle
1. Pré-requis : Elixir 1.14+, Erlang 25+, Node 20+, PostgreSQL 14+.
2. Cloner : `git clone https://github.com/cannery-app/cannery.git`
3. `mix deps.get && cd assets && npm install && npm run deploy && cd ..`
4. `mix ecto.setup` (migrations + seed)
5. Configurer `.env` avec `SECRET_KEY_BASE` (générer via `mix phx.gen.secret`).
6. Compiler en release : `MIX_ENV=prod mix release` puis lancer le binaire.

## Configuration

- Créer le **premier compte** via l'interface web, qui devient admin.
- Configurer les **unités de mesure** par défaut (boîtes de 50, sacs de 1000…).
- Définir les **calibres et catégories** personnalisées (9mm, .223, 12 gauge, etc.).
- Activer l'**authentification à deux facteurs** (TOTP) pour le compte admin.
- Brancher le **SMTP** pour les alertes email (stock bas, expiration amorces).

## Alternatives
### Open source
- **Grocy** — gestion d'inventaire domestique complète (alimentaire + objets), très mature
- **Homebox** — inventaire ménager moderne, multi-photos
- **Inventree** — orienté makers/électronique
- **Part-DB** — inventaire de composants électroniques
### Propriétaires
- **Gunstoc** — spécialisé chasse/tir, freemium
- **RangeLog** — suivi des sessions de tir, pas un inventaire
- **Ammoseeker** — agrégateur de prix, pas un tracker de stock

## Sécurité

- **Changer `SECRET_KEY_BASE`** par une valeur aléatoire forte (64+ caractères).
- **HTTPS obligatoire** en production (reverse proxy Traefik/Caddy).
- **Activer 2FA** sur le compte admin — c'est un inventaire d'objets de valeur.
- **Sauvegardes PostgreSQL** régulières (`pg_dump`) — les données saisies manuellement représentent des heures de travail.
- **Ne pas exposer** l'instance publiquement sans authentification (données sensibles : numéros de série d'armes).
- **RGPD** : si vous invitez d'autres utilisateurs, définir clairement qui voit quoi.

## Ressources
- Site officiel (legacy) : https://cannery.app/
- Dépôt GitHub : https://github.com/cannery-app/cannery
- Annonce de réécriture : https://github.com/cannery-app/cannery/discussions
- selfh.st : https://selfh.st/apps/cannery

## Pages Liées
- [[cat-tracking]]
- [[recettes-docker-compose]]
