La vitrine de vos projets open source, à l'écoute de leurs utilisateurs.
Avenger présente vos logiciels libres et recueille les retours de leurs utilisateurs, auto-hébergé, en français :
L'image contient toute l'application : l'interface Angular et l'API Symfony, servies par FrankenPHP sur le port 8080. Il lui faut seulement une base PostgreSQL, fournie par le fichier Compose ci-dessous.
| Tag | Contenu |
|---|---|
0.4.0, latest | Administrateurs gérés en ligne, service de mail dans l'interface, notifications des tickets par e-mail ; interface plus accessible |
0.3.0 | Import / export d'un produit pour le passer d'un Avenger à un autre (page, icône, wiki, tickets au choix) |
0.2.0 | Aucune variable obligatoire : le mot de passe de la base est généré lui aussi au premier démarrage |
0.1.0 | Première version : projets, wiki, tickets, widget, icônes, assistant d'installation |
Plateforme : linux/amd64. Sources : GitHub, licence MIT.
compose.yamlDans un dossier vide (mkdir avenger && cd avenger), créez compose.yaml :
# Avenger with its database. No variable is required: docker compose up -d
# The secrets (database password, application secret, key passphrase) are generated on the first
# start and kept in the avenger_data volume. Optional settings: see .env.example.
# Portainer: paste this file as a stack, nothing to enter.
# Installation code: docker compose logs avenger
x-avenger-environment: &avenger-environment
# Optional: generated on the first start and kept in /data/secrets when empty
APP_SECRET: ${APP_SECRET:-}
JWT_PASSPHRASE: ${JWT_PASSPHRASE:-}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-}
# Behind a reverse proxy: its addresses, for the visitors' real IP (rate limits)
TRUSTED_PROXIES: ${TRUSTED_PROXIES:-}
services:
# Generates the missing secrets, then stops: the database needs its password first
init:
image: iemperor/avenger:${AVENGER_VERSION:-latest}
command: ["init"]
environment: *avenger-environment
volumes:
- avenger_data:/data
restart: "no"
healthcheck:
disable: true
avenger:
image: iemperor/avenger:${AVENGER_VERSION:-latest}
restart: unless-stopped
ports:
- "${AVENGER_PORT:-8080}:8080"
environment: *avenger-environment
volumes:
- avenger_data:/data
security_opt:
- no-new-privileges:true
depends_on:
database:
condition: service_healthy
database:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: avenger
POSTGRES_USER: avenger
# Generated by the init service in Avenger's volume, read-only here
POSTGRES_PASSWORD_FILE: /avenger/secrets/postgres_password
healthcheck:
test: ["CMD", "pg_isready", "-d", "avenger", "-U", "avenger"]
interval: 5s
timeout: 5s
retries: 10
volumes:
- database_data:/var/lib/postgresql/data
- avenger_data:/avenger:ro
depends_on:
init:
condition: service_completed_successfully
volumes:
avenger_data:
database_data:
Ou téléchargez-le :
curl -O https://raw.githubusercontent.com/imperiumclansoftware/avenger/main/docker/compose.yaml
Avec Portainer : Stacks > Add stack, collez ce fichier dans l'éditeur web. Il n'y a rien à saisir dans Environment variables.
docker compose up -d
docker compose logs avenger
Au premier démarrage, le service init génère les secrets (mot de passe de la base, secret de
l'application, phrase de passe des clés de connexion) dans le volume avenger_data, puis s'arrête. La
base démarre avec ce mot de passe, puis Avenger applique les migrations et affiche un code
d'installation :
[OK] Code d'installation : ABCD-EFGH
Ouvrez http://<serveur>:8080. L'assistant demande :
Vous êtes ensuite connecté à l'administration. Le code est détruit et l'assistant se ferme
définitivement. Le code s'obtient aussi avec docker compose exec avenger php bin/console app:setup:code.
Aucune n'est obligatoire. Pour en changer une, créez un fichier .env à côté de compose.yaml
(modèle), ou
saisissez-la dans la stack Portainer.
| Variable | Défaut | Rôle |
|---|---|---|
AVENGER_PORT | 8080 | Port publié sur la machine hôte |
AVENGER_VERSION | latest | Tag de l'image |
TRUSTED_PROXIES | — | Derrière un reverse proxy : ses adresses (ex. 172.16.0.0/12), pour l'adresse réelle des visiteurs, utilisée par les limites d'envoi |
APP_SECRET | généré | Secret de l'application |
JWT_PASSPHRASE | généré | Protège les clés de connexion de l'administration |
POSTGRES_PASSWORD | généré | Mot de passe de la base du fichier Compose |
DATABASE_URL | construite | Base PostgreSQL externe, à la place de celle du fichier Compose (postgresql://utilisateur:mot-de-passe@hôte:5432/base?serverVersion=16) |
Un secret fourni par l'environnement l'emporte sur celui du volume. Sans valeur, le secret conservé
dans /data/secrets est utilisé, ou généré au premier démarrage. Un secret existant n'est jamais
régénéré.
| Volume | Contenu |
|---|---|
avenger_data (/data) | Secrets (secrets/), clés de connexion (jwt/), icônes des produits (icons/) |
database_data | Base PostgreSQL : produits, wiki, tickets, comptes |
Sauvegardez les deux volumes : la base sans avenger_data ne s'ouvre plus, son mot de passe est dans
avenger_data.
docker compose stop
docker run --rm -v avenger_avenger_data:/data -v "$PWD":/backup alpine tar -czf /backup/avenger-data.tar.gz -C /data .
docker compose exec -T database pg_dump -U avenger avenger > avenger.sql # avec la base démarrée
docker compose start
(Le préfixe des volumes, avenger_, est le nom du dossier qui contient compose.yaml.)
L'image sert du HTTP. Pour un accès depuis Internet, placez-la derrière un reverse proxy (Caddy,
Traefik, Nginx Proxy Manager…) et renseignez TRUSTED_PROXIES. Exemple avec Caddy :
avenger.example.org {
reverse_proxy avenger:8080
}
docker compose pull
docker compose up -d
Les migrations s'appliquent au démarrage ; les secrets, les clés, les icônes et la base sont conservés.
Depuis la 0.1.0, gardez votre .env : son POSTGRES_PASSWORD est celui de votre base. Il est recopié
dans le volume au premier démarrage, puis reste utilisé.
Dans l'administration, l'onglet Intégration de chaque produit donne le code à copier, par exemple :
<script src="https://avenger.example.org/widget.js" data-product="mon-produit" defer></script>
Documentation complète : docs/widget.md.
www-data), no-new-privileges, aucun secret dans
l'image. PHP 8.4.27 minimum (failles PHP2Shell corrigées).GET /api/health (healthcheck de l'image).docker compose exec avenger php bin/console app:admin:create <e-mail> (mot de passe saisi masqué).| Symptôme | Cause et solution |
|---|---|
| « base de données injoignable » au démarrage | Le volume de la base existait avant celui d'Avenger : donnez son mot de passe d'origine par POSTGRES_PASSWORD |
| « la clé de connexion … ne s'ouvre pas avec JWT_PASSPHRASE » | La phrase de passe a changé : remettez l'ancienne, ou supprimez /data/jwt pour générer de nouvelles clés (les administrateurs devront se reconnecter) |
| Plus de code d'installation dans les journaux | Avenger est déjà installé : connectez-vous sur /admin. Mot de passe perdu : app:admin:create <e-mail> le redéfinit |
| Tous les visiteurs atteignent la limite de tickets en même temps | Avenger voit l'adresse du reverse proxy : renseignez TRUSTED_PROXIES |
Content type
Image
Digest
sha256:d21a7ffb2…
Size
93.1 MB
Last updated
3 days ago
docker pull iemperor/avenger