No description
Find a file
2026-02-12 18:35:38 +01:00
defaults Fix lint 2026-02-12 18:35:38 +01:00
docs Première version du rôle 2026-01-14 01:52:33 +01:00
examples Fix lint 2026-02-12 18:35:38 +01:00
files Première version du rôle 2026-01-14 01:52:33 +01:00
handlers Fix lint 2026-02-12 18:35:38 +01:00
meta Fix lint 2026-02-12 18:35:38 +01:00
tasks Fix lint 2026-02-12 18:35:38 +01:00
.ansible-lint Première version du rôle 2026-01-14 01:52:33 +01:00
LICENCE.md Première version du rôle 2026-01-14 01:52:33 +01:00
README.md Première version du rôle 2026-01-14 01:52:33 +01:00

Ansible Role: OpenProject

License

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 podman en dépendance)
  • Collections Ansible:
    • ansible.posix
    • containers.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ôte
  • OPENPROJECT_HTTPS: Mode HTTPS (true/false)
  • OPENPROJECT_HSTS: HTTP Strict Transport Security
  • OPENPROJECT_DEFAULT__LANGUAGE: Langue par défaut (en, fr, de, etc.)

Email

  • EMAIL_DELIVERY_METHOD: Méthode d'envoi (smtp, sendmail)
  • SMTP_ADDRESS: Serveur SMTP
  • SMTP_PORT: Port SMTP
  • SMTP_DOMAIN: Domaine
  • SMTP_AUTHENTICATION: Type d'authentification
  • SMTP_USER_NAME: Utilisateur SMTP
  • SMTP_PASSWORD: Mot de passe SMTP
  • SMTP_ENABLE_STARTTLS_AUTO: Activer STARTTLS

Cache

  • OPENPROJECT_CACHE__MEMCACHE__SERVER: Serveur Memcache/Redis
  • OPENPROJECT_RAILS__CACHE__STORE: Type de cache

Stockage S3

  • OPENPROJECT_ATTACHMENTS__STORAGE: "fog" pour S3
  • OPENPROJECT_FOG__CREDENTIALS__PROVIDER: Provider (AWS, etc.)
  • OPENPROJECT_FOG__CREDENTIALS__AWS__ACCESS__KEY__ID: Access Key
  • OPENPROJECT_FOG__CREDENTIALS__AWS__SECRET__ACCESS__KEY: Secret Key
  • OPENPROJECT_FOG__DIRECTORY: Nom du bucket
  • OPENPROJECT_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

  1. Changez les identifiants par défaut immédiatement après le premier déploiement
  2. Utilisez Ansible Vault pour les secrets:
    ansible-vault encrypt_string 'mot_de_passe' --name 'vault_admin_password'
    
  3. Générez une clé secrète unique:
    openssl rand -hex 64
    
  4. Utilisez HTTPS en production (via reverse proxy)
  5. Configurez un pare-feu approprié
  6. Sauvegardez régulièrement vos données
  7. 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.