Stage 2 : Vikunja

DGA MI - Pôle Sup de La Salle

🌍 Introduction

Cette étape consiste à mettre en place un point d'entrée sécurisé (HTTPS) pour Vikunja. L'objectif est d'utiliser Nginx comme bouclier, gestionnaire de certificats, mais également comme serveur web statique pour héberger notre propre logo.

🔐 1. Génération des certificats SSL (OpenSSL)

En informatique réseau, le chiffrement repose sur un couple Clé Privée / Certificat Public. Pour ce projet, j'ai généré des certificats "auto-signés".

# Créer le dossier pour stocker les secrets SSL
mkdir -p /home/user/Documents/vikunja/nginx/ssl
cd /home/user/Documents/vikunja/nginx/ssl

# Génération du certificat auto-signé
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout vikunja.key \
  -out vikunja.crt \
  -subj "/C=FR/ST=France/L=Paris/O=Vikunja/CN=votre-domaine.local"

⚙️ 2. Configuration du Reverse Proxy & Alias Logo

Le fichier de configuration vikunja.conf définit comment Nginx doit rediriger le trafic entrant (HTTPS) vers le conteneur Vikunja, mais indique également où trouver le logo personnalisé sur le serveur.

server {
    listen 80;
    server_name _;
    # Redirection automatique HTTP (port 80) vers HTTPS (port 443)
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name _;

    # Emplacement des certificats à l'intérieur du conteneur
    ssl_certificate /etc/nginx/ssl/vikunja.crt;
    ssl_certificate_key /etc/nginx/ssl/vikunja.key;

    # Dossier pour les assets statiques (Logo personnalisé)
    location /images/mon-logo.png {
        alias /usr/share/nginx/html/images/logo.png;
    }

    # Redirection vers l'application Vikunja
    location / {
        # Résolution DNS interne : 'vikunja' correspond au nom du conteneur
        proxy_pass http://vikunja:3456; 
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Concept clé (Proxy Pass) : Au lieu de pointer vers une IP, Nginx pointe vers http://vikunja:3456. Podman utilise son propre DNS interne pour traduire le nom du conteneur en IP, ce qui rend la configuration insensible aux redémarrages des services.

🐳 3. Déploiement du conteneur Nginx

L'image Nginx est déployée en lui "montant" nos fichiers de configuration locaux, nos certificats, et notre dossier contenant le logo.

# Déploiement
podman run -d \
  --name nginx \
  --network vikunja-net \
  -p 80:80 \
  -p 443:443 \
  -v /home/user/Documents/vikunja/nginx/conf.d:/etc/nginx/conf.d:ro \
  -v /home/user/Documents/vikunja/nginx/ssl:/etc/nginx/ssl:ro \
  -v /home/user/Documents/vikunja/images:/usr/share/nginx/html/images:ro \
  nginx:trixie-perl

🎨 4. Intégration du Logo & Preuves de fonctionnement

Plutôt que de chercher à uploader une image dans l'application, Nginx expose le logo local (stocké en dehors du conteneur Vikunja) via une URL directe. Il suffit ensuite de rajouter l'option suivante dans le fichier config.yml de Vikunja :

service:
  customlogourl: "https://votre-ip-ou-domaine/images/mon-logo.png"

✅ Validation : Accès HTTPS sécurisé avec logo DGA personnalisé

1. Page de connexion (Logo + Cadenas HTTPS visibles)

Page de login Vikunja HTTPS DGA

2. Tableau de bord (Logo intégré à la barre de navigation)

Tableau de bord Vikunja HTTPS DGA

Bilan de l'intégration : Ces captures démontrent le succès de la configuration globale. Le trafic réseau est bien chiffré (présence du cadenas SSL) grâce au conteneur Nginx, qui intercepte le port 443 avant de router la requête vers Vikunja. De plus, la directive alias de Nginx fonctionne parfaitement, puisque le logo de la DGA est correctement distribué à la place du logo d'origine.