Aller au contenu

Architecture

Nom de domaine

Le nom de domaine est acheté sur OVH.com, et redirige les serveurs DNS vers :

  • nile.ns.cloudflare.com
  • penny.ns.cloudflare.com

DNS Cloudflare

Configuration DNS Cloudflare

Nous avons 3 sous-domaines :

  • api.diyae.fr pour les endpoints API
  • mqtt.diyae.fr pour les call enceintes en temps réel pour le serveur MQTT
  • pma.diyae.fr pour accéder à phpMyAdmin directement via l'URL

Nginx

Lorsque Cloudflare redirige les sous-domaines créés, nous les réceptons avec notre configuration Nginx.

Configuration api.diyae.fr

server {

    listen 80;
    server_name api.diyae.fr;
    location / {
        proxy_pass http://127.0.0.1:3010;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

Notre backend Fastify écoute sur le port 3010, donc nous redirigeons chaque call vers le port concerné.


Configuration mqtt.diyae.fr

server {

    listen 80;
    server_name mqtt.diyae.fr;
    # Logs spécifiques pour MQTT
    access_log /var/log/nginx/mqtt.diyae.fr_access.log;
    error_log /var/log/nginx/mqtt.diyae.fr_error.log;
    # Page d'info pour debug
    location / {
        return 200 'MQTT Server Active\nDirect TCP: mqtt.diyae.fr:1883\nWebSocket: ws://mqtt.diyae.fr/ws\nStatus: OK\n';
        add_header Content-Type text/plain;
    }
    # Health check
    location /health {
        return 200 'MQTT proxy OK';
        add_header Content-Type text/plain;
    }
    # Info sur les topics
    location /topics {
        return 200 'MQTT Topics:\n- diyae/{device_id}/register\n- diyae/{device_id}/state\n- diyae/{device_id}/cmd\n- diyae/{device_id}/status\n';
        add_header Content-Type text/plain;
    }
}

Ici, le broker MQTT écoute sur le port 1883 pour les connexions MQTT classiques (MQTT over TCP).


Configuration pma.diyae.fr

server {

    listen 80;
    server_name pma.diyae.fr;
    root /pma;
    index index.php index.html index.htm;
    # Sécurité de base
    location ~ /\.ht {
        deny all;
    }
    location ~ /(libraries|templates|setup/lib) {
        deny all;
    }
    # Configuration pour phpMyAdmin
    location / {
        try_files $uri $uri/ =404;
    }
    # Configuration PHP
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        # Augmenter les limites pour phpMyAdmin
        client_max_body_size 50M;
        fastcgi_read_timeout 300;
        fastcgi_send_timeout 300;
    }
    # Logs
    access_log /var/log/nginx/pma.diyae.fr_access.log;
    error_log /var/log/nginx/pma.diyae.fr_error.log;
}

Ici on définit l'emplacement du projet phpMyAdmin, et on lui dit d'utiliser la version PHP 8.2 installée.