- Ruby 100%
| defaults | ||
| docs | ||
| examples | ||
| files | ||
| handlers | ||
| meta | ||
| tasks | ||
| .ansible-lint | ||
| LICENCE.md | ||
| README.md | ||
Ansible Role: OpenProject
Ce rôle Ansible déploie OpenProject dans un conteneur Podman rootless avec une configuration flexible basée sur des variables d'environnement.
Description
OpenProject est un logiciel de gestion de projet open source qui offre:
- Gestion de tâches et planification
- Diagrammes de Gantt
- Tableaux Kanban/Scrum
- Wiki et documentation
- Gestion du temps et des coûts
- Et bien plus encore
Ce rôle utilise l'image all-in-one d'OpenProject qui inclut PostgreSQL, permettant un déploiement simple et rapide.
Prérequis
- Debian Bookworm ou Trixie
- Podman installé (via le rôle
podmanen dépendance) - Collections Ansible:
ansible.posixcontainers.podman
Installation
ansible-galaxy role install hutaeh.containers.openproject
Ou via requirements.yml:
---
roles:
- name: hutaeh.containers.openproject
Variables principales
Configuration de base
| Variable | Valeur par défaut | Description |
|---|---|---|
openproject_version |
"15" |
Version d'OpenProject |
openproject_port |
8080 |
Port d'écoute sur l'hôte |
openproject_host_name |
"localhost:8080" |
Nom d'hôte/domaine |
openproject_https |
false |
Activer le mode HTTPS |
openproject_default_language |
"en" |
Langue par défaut |
Utilisateur système
| Variable | Valeur par défaut | Description |
|---|---|---|
openproject_user |
openproject |
Utilisateur système |
openproject_group |
openproject |
Groupe système |
openproject_home |
/home/openproject |
Répertoire home |
Stockage
| Variable | Valeur par défaut | Description |
|---|---|---|
openproject_data_dir |
/opt/openproject |
Répertoire racine des données |
openproject_pgdata_dir |
/opt/openproject/pgdata |
Données PostgreSQL |
openproject_assets_dir |
/opt/openproject/assets |
Fichiers uploadés |
Sécurité
| Variable | Valeur par défaut | Description |
|---|---|---|
openproject_secret_key_base |
"" |
Clé secrète (générée auto si vide) |
openproject_auto_generate_secret |
true |
Générer la clé automatiquement |
Compte admin initial
| Variable | Valeur par défaut | Description |
|---|---|---|
openproject_seed_admin_user_name |
admin |
Nom d'utilisateur admin |
openproject_seed_admin_user_mail |
admin@example.net |
Email admin |
openproject_seed_admin_user_password |
admin |
Mot de passe admin |
⚠️ Important: Ces variables ne fonctionnent qu'au premier démarrage. Changez le mot de passe après la première connexion!
Configuration flexible avec variables d'environnement
Le rôle permet de définir n'importe quelle variable d'environnement OpenProject via le dictionnaire openproject_env_vars.
Structure
openproject_env_vars:
VARIABLE_NAME: "valeur"
AUTRE_VARIABLE: "autre_valeur"
Les variables commençant par OPENPROJECT_* peuvent être écrites avec ou sans le préfixe (le rôle les gère automatiquement).
Exemples d'utilisation
1. Déploiement basique
---
- hosts: servers
become: true
roles:
- role: hutaeh.containers.openproject
vars:
openproject_host_name: "openproject.example.com"
openproject_port: 8080
2. Configuration avec HTTPS derrière un reverse proxy
---
- hosts: servers
become: true
roles:
- role: hutaeh.containers.openproject
vars:
openproject_host_name: "openproject.example.com"
openproject_port: 8080
openproject_https: true
openproject_hsts: true
3. Configuration email SMTP
---
- hosts: servers
become: true
roles:
- role: hutaeh.containers.openproject
vars:
openproject_host_name: "openproject.example.com"
openproject_port: 8080
openproject_env_vars:
EMAIL_DELIVERY_METHOD: "smtp"
SMTP_ADDRESS: "smtp.gmail.com"
SMTP_PORT: "587"
SMTP_DOMAIN: "example.com"
SMTP_AUTHENTICATION: "plain"
SMTP_USER_NAME: "noreply@example.com"
SMTP_PASSWORD: "{{ vault_smtp_password }}"
SMTP_ENABLE_STARTTLS_AUTO: "true"
4. Configuration avec stockage S3
---
- hosts: servers
become: true
roles:
- role: hutaeh.containers.openproject
vars:
openproject_host_name: "openproject.example.com"
openproject_env_vars:
OPENPROJECT_ATTACHMENTS__STORAGE: "fog"
OPENPROJECT_FOG__CREDENTIALS__PROVIDER: "AWS"
OPENPROJECT_FOG__CREDENTIALS__AWS__ACCESS__KEY__ID: "{{ vault_aws_access_key }}"
OPENPROJECT_FOG__CREDENTIALS__AWS__SECRET__ACCESS__KEY: "{{ vault_aws_secret_key }}"
OPENPROJECT_FOG__DIRECTORY: "openproject-uploads"
OPENPROJECT_FOG__CREDENTIALS__REGION: "eu-west-1"
5. Configuration personnalisée du compte admin
---
- hosts: servers
become: true
roles:
- role: hutaeh.containers.openproject
vars:
openproject_host_name: "openproject.example.com"
openproject_seed_admin_user_name: "administrator"
openproject_seed_admin_user_mail: "admin@company.com"
openproject_seed_admin_user_password: "{{ vault_admin_password }}"
6. Configuration avancée complète
---
- hosts: servers
become: true
roles:
- role: hutaeh.containers.openproject
vars:
# Configuration de base
openproject_version: "15"
openproject_port: 8080
openproject_host_name: "pm.example.com"
openproject_https: true
openproject_default_language: "fr"
# Stockage personnalisé
openproject_data_dir: "/mnt/data/openproject"
# Secret key (depuis vault)
openproject_secret_key_base: "{{ vault_openproject_secret }}"
openproject_auto_generate_secret: false
# Variables d'environnement personnalisées
openproject_env_vars:
# Email
EMAIL_DELIVERY_METHOD: "smtp"
SMTP_ADDRESS: "smtp.example.com"
SMTP_PORT: "587"
SMTP_USER_NAME: "{{ vault_smtp_user }}"
SMTP_PASSWORD: "{{ vault_smtp_password }}"
# Cache Redis
OPENPROJECT_CACHE__MEMCACHE__SERVER: "redis:6379"
OPENPROJECT_RAILS__CACHE__STORE: "redis_store"
# Configuration avancée
OPENPROJECT_ACTIVITY__DAYS__DEFAULT: "14"
OPENPROJECT_SESSION__COOKIE__NAME: "openproject_session"
Intégration avec Traefik
Si vous utilisez le rôle hutaeh.containers.traefik, vous pouvez créer une configuration dynamique:
files/traefik/dynamic/openproject.yml:
http:
routers:
openproject:
rule: "Host(`openproject.example.com`)"
service: openproject
entryPoints:
- websecure
tls:
certResolver: letsencrypt
services:
openproject:
loadBalancer:
servers:
- url: "http://localhost:8080"
Variables d'environnement OpenProject
Voici quelques variables d'environnement utiles (liste non exhaustive):
Configuration générale
OPENPROJECT_HOST__NAME: Nom d'hôteOPENPROJECT_HTTPS: Mode HTTPS (true/false)OPENPROJECT_HSTS: HTTP Strict Transport SecurityOPENPROJECT_DEFAULT__LANGUAGE: Langue par défaut (en, fr, de, etc.)
EMAIL_DELIVERY_METHOD: Méthode d'envoi (smtp, sendmail)SMTP_ADDRESS: Serveur SMTPSMTP_PORT: Port SMTPSMTP_DOMAIN: DomaineSMTP_AUTHENTICATION: Type d'authentificationSMTP_USER_NAME: Utilisateur SMTPSMTP_PASSWORD: Mot de passe SMTPSMTP_ENABLE_STARTTLS_AUTO: Activer STARTTLS
Cache
OPENPROJECT_CACHE__MEMCACHE__SERVER: Serveur Memcache/RedisOPENPROJECT_RAILS__CACHE__STORE: Type de cache
Stockage S3
OPENPROJECT_ATTACHMENTS__STORAGE: "fog" pour S3OPENPROJECT_FOG__CREDENTIALS__PROVIDER: Provider (AWS, etc.)OPENPROJECT_FOG__CREDENTIALS__AWS__ACCESS__KEY__ID: Access KeyOPENPROJECT_FOG__CREDENTIALS__AWS__SECRET__ACCESS__KEY: Secret KeyOPENPROJECT_FOG__DIRECTORY: Nom du bucketOPENPROJECT_FOG__CREDENTIALS__REGION: Région AWS
Pour la liste complète, consultez la documentation officielle OpenProject.
Gestion du service
Le conteneur est géré par systemd en mode utilisateur:
# En tant que root
su - openproject
# Vérifier le statut
systemctl --user status container-openproject
# Redémarrer
systemctl --user restart container-openproject
# Voir les logs
journalctl --user -u container-openproject -f
# Arrêter
systemctl --user stop container-openproject
# Démarrer
systemctl --user start container-openproject
Sauvegarde et restauration
Sauvegarde
Les données importantes se trouvent dans:
- Base de données:
{{ openproject_pgdata_dir }} - Fichiers uploadés:
{{ openproject_assets_dir }}
Exemple de script de sauvegarde:
#!/bin/bash
BACKUP_DIR="/backups/openproject"
DATE=$(date +%Y%m%d_%H%M%S)
# Arrêter le service
systemctl --user stop container-openproject
# Sauvegarder
tar -czf "${BACKUP_DIR}/openproject_${DATE}.tar.gz" \
/opt/openproject/pgdata \
/opt/openproject/assets
# Redémarrer
systemctl --user start container-openproject
Restauration
# Arrêter le service
systemctl --user stop container-openproject
# Restaurer
cd /opt/openproject
tar -xzf /backups/openproject_YYYYMMDD_HHMMSS.tar.gz
# Redémarrer
systemctl --user start container-openproject
Mise à jour
Pour mettre à jour OpenProject:
- hosts: servers
become: true
roles:
- role: hutaeh.containers.openproject
vars:
openproject_version: "16" # Nouvelle version
Le rôle mettra à jour l'image et recréera le conteneur si nécessaire.
Troubleshooting
Le conteneur ne démarre pas
# Vérifier les logs
su - openproject
journalctl --user -u container-openproject -n 100
# Vérifier l'état du conteneur
podman ps -a
podman logs openproject
Problème de permissions
# Vérifier les permissions des volumes
ls -la /opt/openproject/
chown -R openproject:openproject /opt/openproject/
Port déjà utilisé
Si le port 8080 est occupé:
openproject_port: 8081 # Changer le port
Régénérer le secret
# Générer un nouveau secret
openssl rand -hex 64
# Le définir dans vos variables
openproject_secret_key_base: "nouveau_secret_ici"
Architecture
┌─────────────────────────────────────────┐
│ Host System (Debian) │
│ │
│ ┌───────────────────────────────────┐ │
│ │ User: openproject (rootless) │ │
│ │ │ │
│ │ ┌─────────────────────────────┐ │ │
│ │ │ Podman Container │ │ │
│ │ │ │ │ │
│ │ │ ┌──────────────────────┐ │ │ │
│ │ │ │ OpenProject App │ │ │ │
│ │ │ │ (Port 80 int.) │ │ │ │
│ │ │ └──────────────────────┘ │ │ │
│ │ │ │ │ │
│ │ │ ┌──────────────────────┐ │ │ │
│ │ │ │ PostgreSQL DB │ │ │ │
│ │ │ └──────────────────────┘ │ │ │
│ │ │ │ │ │
│ │ └─────────────────────────────┘ │ │
│ │ │ │ │
│ │ │ Network: host │ │
│ └─────────┼─────────────────────────┘ │
│ │ │
│ ▼ Port 8080 │
│ ┌─────────────────────┐ │
│ │ /opt/openproject/ │ │
│ │ ├── pgdata/ │ (volumes) │
│ │ └── assets/ │ │
│ └─────────────────────┘ │
└─────────────────────────────────────────┘
Sécurité
Bonnes pratiques
- Changez les identifiants par défaut immédiatement après le premier déploiement
- Utilisez Ansible Vault pour les secrets:
ansible-vault encrypt_string 'mot_de_passe' --name 'vault_admin_password' - Générez une clé secrète unique:
openssl rand -hex 64 - Utilisez HTTPS en production (via reverse proxy)
- Configurez un pare-feu approprié
- Sauvegardez régulièrement vos données
- Mettez à jour OpenProject régulièrement
Licence
GPL-3.0-or-later
Auteur
Hutaeh - HUTIT
Support
Pour les problèmes spécifiques à ce rôle, ouvrez une issue sur le dépôt. Pour les questions sur OpenProject lui-même, consultez la documentation officielle.