Penpot
Le rôle Penpot déploie l’application à l’aide de Docker Compose, configure les différents services nécessaires à son fonctionnement et assure le démarrage de l’ensemble des conteneurs.
Il est responsable de :
- la création du répertoire d’installation
- le déploiement du fichier
docker-compose.yaml - le démarrage des services Penpot
- le redémarrage des services lorsque la configuration est modifiée
Penpot a été retenu comme outil de conception d’interfaces car il est open source et peut être auto-hébergé sans coût de licence. Il constitue une alternative crédible à Figma tout en permettant de conserver la maîtrise complète des données du projet.
Fonctionnement
Section titled “Fonctionnement”Le répertoire d’installation se situe ici :
cd /srv/apps/penpotLe rôle déploie Penpot à l’aide d’un fichier docker-compose.yaml généré depuis un template Jinja2.
L’application est composée de plusieurs conteneurs :
- Frontend
- Backend
- PostgreSQL
- Valkey
- Mailcatcher
- Exporter
- MCP
Tous les services communiquent via un réseau Docker dédié. Seul le frontend expose un port sur le VPS. Le frontend reste uniquement accessible localement (127.0.0.1) et est publié sur Internet via Caddy.
Structure du rôle
Section titled “Structure du rôle”roles/penpot/├── defaults/│ └── main.yml # Variables du rôle├── handlers/│ └── main.yml # Redémarrage de Penpot si nécessaire├── tasks/│ ├─ install.yml # Installation de Penpot│ └── main.yml # Point d'entrée du rôle└── templates/ └── docker-compose.yaml.j2 # Template du Docker Compose à déployerArchitecture
Section titled “Architecture”Client │ ▼Caddy │ reverse_proxy ▼127.0.0.1:9001 │Docker Compose │ ▼Penpot Frontend │ ├── Backend ├── PostgreSQL ├── Valkey ├── Mailcatcher ├── Exporter └── MCPLes variables
Section titled “Les variables”Les variables sont contenues dans le fichier main.yml dans le dossier defaults.
Variables globales
Section titled “Variables globales”| Variable | Type | Description |
|---|---|---|
penpot_directory |
string | Répertoire contenant le projet Docker Compose |
penpot_version |
string | Version de l’image à utiliser |
penpot_public_uri |
string | Adresse URL accessible depuis Internet |
penpot_frontend_bind_address |
string | Adresse IP sur laquelle publier le service |
penpot_frontend_port |
int | Port exposé sur le VPS |
penpot_mailcatch_bind_address |
string | Adresse IP sur laquelle publier le service de mail |
penpot_mailcatch_port |
int | Port exposé sur le VPS pour le service de mail |
penpot_postgres_database |
string | Nom de la base de données |
penpot_postgres_username |
string | Nom du compte utilisateur de la base de données |
penpot_postgres_password |
string | Mot de passe du compte utilisateur de la base de données |
penpot_secret_key |
string | Clé secrète utilisée par Penpot pour signer les sessions et les jetons. |
Exemple de fichier de configuration
Section titled “Exemple de fichier de configuration”penpot_directory: /srv/apps/penpot
penpot_version: "2.16"
penpot_public_uri: "https://penpot.corentin-talour.fr"
penpot_frontend_bind_address: "127.0.0.1"penpot_frontend_port: 9001
penpot_mailcatch_bind_address: "127.0.0.1"penpot_mailcatch_port: 1080
penpot_postgres_database: penpotpenpot_postgres_username: penpotpenpot_postgres_password: penpot
# À déplacer ensuite dans Ansible Vault.penpot_secret_key: "change-this-insecure-key"Déploiement
Section titled “Déploiement”Le rôle réalise les opérations suivantes :
- Création du répertoire d’installation.
- Génération du fichier
docker-compose.yamldepuis un template Jinja2. - Déploiement des services avec Docker Compose.
- Redémarrage automatique des services en cas de modification du fichier de configuration.
Handler
Section titled “Handler”Le rôle contient un handler chargé de redémarrer le conteneur Penpot lorsqu’une modification du fichier docker-compose.yaml est détectée.
Le handler est défini dans le fichier suivant handlers/main.yml.
Le handler est appelé par la tâche qui déploie le fichier, celle-ci : Deploy Penpot Docker Compose file.
La directive notify déclenche le handler uniquement lorsque le fichier de configuration a réellement été modifié.
Cela permet d’éviter un redémarrage inutile du service à chaque exécution du playbook.
Vérification
Section titled “Vérification”Vérifier les conteneurs
Section titled “Vérifier les conteneurs”docker compose psTous les services doivent être en état running.
Vérifier Penpot
Section titled “Vérifier Penpot”curl http://127.0.0.1:9001Une réponse HTTP doit être retournée.
Vérifier les journaux
Section titled “Vérifier les journaux”docker compose logsAucune erreur critique ne doit apparaître.