Dalua Web Service avec Tailscale, Docker et Nginx

Un client a approché l’équipe Kegate pour obtenir de l’aide afin d’accéder à ses caméras IP Dalua via Internet, depuis n’importe où dans le monde. Tailscale, un outil puissant pour créer des réseaux privés et sécurisés sur Internet, s’est avéré être la solution parfaite. Lorsqu’il est combiné avec Docker et Nginx, il offre une méthode idéale pour exposer vos sites web ou services locaux, comme une instance Dalua, de manière sécurisée et accessible depuis n’importe quel endroit. Voici comment mettre en place cette configuration.

Étape 1 : Créer la configuration Nginx

Créez un fichier de configuration Nginx pour servir de proxy inversé à votre site web local Dalua. Cette configuration gérera également les connexions WebSocket.

nginx.conf :

				
					worker_processes auto;

events {
    worker_connections 1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server {
        listen 6443;
        server_name localhost;

        location / {
            proxy_pass http://192.168.68.112/; # Site web local Dalua
            proxy_ssl_verify off;
            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;

            # En-têtes WebSocket
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    }
}
				
			

Enregistrez ce fichier sous le nom nginx.conf dans un dossier (par exemple, ./cctv-server/).

Étape 2 : Créer le fichier Docker Compose

Créez un fichier docker-compose.yml pour définir les services :

  • Tailscale : agit comme un VPN sécurisé pour exposer le serveur Nginx local.

  • Nginx : sert de proxy inversé pour votre site web Dalua.

docker-compose.yml :

				
					services:
  ts-cctv-ma:
    image: tailscale/tailscale:latest
    hostname: cctv-ma
    environment:
      - TS_AUTHKEY=tskey-client-k8RuW <- add yours here
      - TS_EXTRA_ARGS=--advertise-tags=tag:homelab --accept-dns=true --accept-routes=true
      - TS_SERVE_CONFIG=/config/serve.json
      - TS_STATE_DIR=/var/lib/tailscale
      - TS_USERSPACE=false
    volumes:
      - ./ts/state:/var/lib/tailscale
      - ./ts/config:/config
    restart: unless-stopped
    cap_add:
      - net_admin
      - sys_module
    devices:
     - /dev/net/tun

  cctv-ma:
    image: nginx:latest
    network_mode: service:ts-cctv-ma
    volumes:
      - ./cctv-server/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./cctv-server/certs:/etc/nginx/certs:ro
    restart: always
    command: >
      sh -c "rm -f /etc/nginx/conf.d/default.conf &&
             nginx -g 'daemon off;'"
				
			

Enregistrez ce fichier sous le nom docker-compose.yml.

Étape 3 : Configurer Tailscale Serve

Créez un fichier serve.json pour définir comment Tailscale doit transmettre le trafic vers votre serveur Nginx local.

serve.json :

				
					{
    "TCP": {
      "443": {
        "HTTPS": true
      }
    },
    "Web": {
      "${TS_CERT_DOMAIN}:443": {
        "Handlers": {
          "/": {
            "Proxy": "http://127.0.0.1:6443"
          }
        }
      }
    }
}
				
			

Placez ce fichier dans ./ts/config/.

Étape 4 : Démarrer les services

Exécutez la commande suivante pour démarrer les services Tailscale et Nginx :

				
					docker-compose up -d
				
			

Cela :

  1. Démarrera Tailscale et s’authentifiera avec la clé d’authentification fournie.

  2. Démarrera Nginx et le configurera pour transmettre les requêtes à votre site web Dalua.

  3. Exposera le site web local via Tailscale.

Étape 5 : Vérifier la configuration

  1. Accédez à votre site web via le domaine fourni par Tailscale (par exemple, https://cctv-ma.<votre-domaine-tailscale>.ts.net).

  2. Utilisez les outils de développement de votre navigateur pour vérifier si les connexions WebSocket (ws:// ou wss://) fonctionnent correctement.

Étape 6 : Conseils de débogage

  • Vérifier les journaux :

    • Journaux Tailscale : docker logs ts-cctv-ma

    • Journaux Nginx : docker logs cctv-ma

  • Tester la connectivité :

    • Depuis le conteneur Nginx :

				
					curl http://192.168.68.112
				
			

Depuis le conteneur Tailscale :

				
					curl http://127.0.0.1:6443
				
			
  • Mettre à jour les certificats : Si vous rencontrez des problèmes liés au SSL, utilisez des certificats auto-signés ou configurez Tailscale pour ignorer la validation des certificats.

Conclusion

Avec cette configuration, vous avez exposé avec succès votre site web local Dalua de manière sécurisée en utilisant Tailscale, Docker et Nginx. Cette solution garantit un accès sécurisé sur Internet tout en simplifiant la gestion des connexions WebSocket et du proxy inversé.

N’hésitez pas à personnaliser davantage la configuration pour répondre à vos besoins spécifiques !

Articles Connexes