--- title: UpSnap description: Installer UpSnap pour réveiller à distance les machines de votre réseau local via Wake-on-LAN, exposé avec SWAG. --- :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} [UpSnap](https://github.com/seriousm4x/UpSnap) est un conteneur qui permet d'allumer, d'éteindre ou de mettre en veille vos machines à distance. Il utilise principalement le Wake-On-Lan (WoL) sur le réseau et propose des fonctions avancées. ![Beszel](/img/serveex/upsnap.webp) ## Installation ::file-tree --- tree: /: - srv: - docker: - upsnap: - compose.yaml - .env - data/ --- :: ::steps{level="3"} ### Déployer la stack Ouvrez Dockge, cliquez sur `compose`, nommez la stack `upsnap`, puis copiez-collez ce qui suit : ```yaml [compose.yaml] --- services: upsnap: container_name: upsnap image: ghcr.io/seriousm4x/upsnap:5 network_mode: host restart: unless-stopped volumes: - /srv/docker/upsnap/data:/app/pb_data environment: - TZ=Europe/Paris - UPSNAP_SCAN_RANGE=${SCAN_RANGE} - UPSNAP_SCAN_TIMEOUT=500ms - UPSNAP_PING_PRIVILEGED=true dns: - ${DNS} entrypoint: /bin/sh -c "./upsnap serve --http 0.0.0.0:8095" healthcheck: test: curl -fs "http://localhost:8095/api/health" || exit 1 interval: 10s ``` ::tip{icon=""} ✨ __Astuce :__ ajoutez le label watchtower à chaque conteneur pour automatiser les mises à jour ```yaml [compose.yaml] services: upsnap: #... labels: - com.centurylinklabs.watchtower.enable=true ``` :: ### Renseigner vos variables d'environnement Remplissez le `.env`, par exemple : ```properties [.env] RANGE=192.168.1.0/24 # scanne tous les appareils du réseau local ayant une IP entre 192.168.0.1 et 192.168.1.255 DNS=192.168.1.1 # IP du DNS pour résoudre les noms de domaine, typiquement l'IP de votre box ``` Déployez le conteneur et allez sur `http://ipdevotreserveur:8095`. Suivez simplement les étapes pour créer votre compte ! ### Terminé ! :: ::caution __Si ça ne marche pas :__ vérifiez les règles de votre pare-feu. :: ## Exposer UpSnap avec Swag ::warning UpSnap ne gère pas l'authentification multifacteur. L'exposer sur internet pourrait compromettre les machines connectées. Ne le faites que si vous utilisez un système d'authentification multifacteur comme [TinyAuth](/serveex/security/tinyauth) ou [Authentik](/serveex/advanced/authentik/). Sinon, évitez de l'exposer avec SWAG et utilisez plutôt un VPN comme [Wireguard](/serveex/core/wireguard). :: Vous voudrez peut-être y accéder à distance depuis tous vos appareils. Pour cela, nous allons exposer UpSnap via Swag. ::note{icon=""} 📋 __Au préalable :__

Nous partons du principe que vous avez créé un sous-domaine dans votre [zone DNS](/general/networking/dns), du type `upsnap.mondomaine.fr` avec un `CNAME` vers `mondomaine.fr`. Par ailleurs, à moins d'utiliser Cloudflare Zero Trust, vous devriez déjà avoir redirigé le port `443` de votre box vers le port `443` de votre serveur dans vos [règles NAT](/general/networking/nat). :: ::steps{level="3"} ### Ajouter le réseau d'UpSnap à SWAG Allez dans Dockge et modifiez le compose de SWAG en y ajoutant le réseau d'UpSnap : ```yaml [compose.yaml] --- services: swag: container_name: # ... # ... networks: # Rattache le conteneur au réseau personnalisé # ... - upsnap # Nom du réseau déclaré dans la stack networks: # Définit le réseau personnalisé # ... upsnap: # Nom du réseau déclaré dans la stack name: upsnap_default # Nom réel du réseau externe external: true # Indique qu'il s'agit d'un réseau externe ``` Redémarrez la stack en cliquant sur « deploy » et attendez que SWAG soit pleinement opérationnel. ::note Nous partons ici du principe que le nom du réseau d'upsnap est `upsnap_default`. Vous pouvez vérifier la connexion dans le tableau de bord de SWAG sur `http://ipdevotreserveur:81`. :: ### Créer le fichier subdomain.conf Dans les dossiers de Swag, créez le fichier `upsnap.subdomain.conf`. ::tip{icon="" to="/serveex/files/file-browser-quantum"} ✨ __Astuce :__ vous pouvez utiliser **File Browser Quantum** pour naviguer dans vos fichiers et éditer vos documents plutôt que des commandes dans le terminal. :: ```bash [Terminal] sudo nano /srv/docker/swag/config/nginx/proxy-confs/upsnap.subdomain.conf ``` Et collez la configuration suivante : ```nginx [upsnap.subdomain.conf] ## Version 2023/12/19 server { listen 443 ssl; listen [::]:443 ssl; server_name upsnap.*; include /config/nginx/ssl.conf; client_max_body_size 0; #if ($lan-ip = yes) { set $geo-whitelist yes; } #if ($geo-whitelist = no) { return 404; } if ($geo-blacklist = no) { return 404; } # enable for ldap auth (requires ldap-location.conf in the location block) #include /config/nginx/ldap-server.conf; # enable for Authelia (requires authelia-location.conf in the location block) #include /config/nginx/authelia-server.conf; # enable for Authentik (requires authentik-location.conf in the location block) #include /config/nginx/authentik-server.conf; location / { # enable the next two lines for http auth #auth_basic "Restricted"; #auth_basic_user_file /config/nginx/.htpasswd; # enable for ldap auth (requires ldap-server.conf in the server block) #include /config/nginx/ldap-location.conf; # enable for Authelia (requires authelia-server.conf in the server block) #include /config/nginx/authelia-location.conf; # enable for Authentik (requires authentik-server.conf in the server block) #include /config/nginx/authentik-location.conf; include /config/nginx/proxy.conf; include /config/nginx/resolver.conf; set $upstream_app upsnap; set $upstream_port 8095; set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port; } } ``` Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter. ### Terminé ! :: Et voilà ! Vous avez exposé UpSnap ! ## Protéger UpSnap avec TinyAuth Ajoutez la vérification forward-auth de [TinyAuth](/serveex/security/tinyauth) directement dans `upsnap.subdomain.conf`, de la même façon que dans [le tutoriel TinyAuth](/serveex/security/tinyauth#protecting-an-app-via-reverse-proxy) : ```nginx [upsnap.subdomain.conf]{26-38,41-42} ## Version 2023/12/19 server { listen 443 ssl; listen [::]:443 ssl; server_name upsnap.*; include /config/nginx/ssl.conf; client_max_body_size 0; #if ($lan-ip = yes) { set $geo-whitelist yes; } #if ($geo-whitelist = no) { return 404; } if ($geo-blacklist = no) { return 404; } # enable for ldap auth (requires ldap-location.conf in the location block) #include /config/nginx/ldap-server.conf; # enable for Authelia (requires authelia-location.conf in the location block) #include /config/nginx/authelia-server.conf; # enable for Authentik (requires authentik-location.conf in the location block) #include /config/nginx/authentik-server.conf; location /tinyauth { internal; proxy_pass http://tinyauth:3000/api/auth/nginx; proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Forwarded-Uri $request_uri; } location @tinyauth_login { return 302 https://tinyauth.mondomaine.fr/login?redirect_uri=$scheme://$http_host$request_uri; } location / { auth_request /tinyauth; error_page 401 = @tinyauth_login; # enable the next two lines for http auth #auth_basic "Restricted"; #auth_basic_user_file /config/nginx/.htpasswd; # enable for ldap auth (requires ldap-server.conf in the server block) #include /config/nginx/ldap-location.conf; # enable for Authelia (requires authelia-server.conf in the server block) #include /config/nginx/authelia-location.conf; # enable for Authentik (requires authentik-server.conf in the server block) #include /config/nginx/authentik-location.conf; include /config/nginx/proxy.conf; include /config/nginx/resolver.conf; set $upstream_app upsnap; set $upstream_port 8095; set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port; } } ``` ::note{to="/serveex/security/tinyauth#exposing-tinyauth-with-swag"} Le bloc `location /tinyauth` s'exécute dans le conteneur de SWAG lui-même, SWAG doit donc être sur le réseau Docker de TinyAuth pour le joindre par son nom (`tinyauth` ici). Cela devrait déjà être en place depuis **l'exposition de TinyAuth**. Si vous rencontrez une erreur, revérifiez que le fichier compose de SWAG a toujours ce réseau rattaché. :: ::tip{icon=""} ✨ Vous pouvez protéger cette application avec [Authentik](/serveex/advanced/authentik) plutôt que TinyAuth, en ouvrant `upsnap.subdomain.conf` et en retirant le `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. N'oubliez pas de [créer une application et un provider dans Authentik](/serveex/advanced/authentik#protecting-an-app-via-reverse-proxy). ::