Operación

Proxy inverso HTTPS

Ejemplos listos para adaptar para Caddy, Nginx y Traefik, tanto dentro como fuera de Docker.

Elija el ejemplo que corresponda a la ubicación del proxy. El nombre nasdash solo funciona si ambos contenedores comparten la misma red de Docker. Un proxy instalado en el host suele utilizar 127.0.0.1:2504.

Caddy instalado en el host

Publique NasDash únicamente en la interfaz de bucle (loopback):

services:
  nasdash:
    ports:
      - "127.0.0.1:2504:2504"

Luego, en Caddyfile:

Caddyfile
nasdash.example.com {
  encode zstd gzip
  reverse_proxy 127.0.0.1:2504
}

Caddy obtiene el certificado si el DNS público apunta al servidor y los puertos necesarios para el desafío son accesibles.

Nginx instalado en el host

server {
    listen 443 ssl http2;
    server_name nasdash.example.com;

    ssl_certificate     /etc/letsencrypt/live/nasdash.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/nasdash.example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:2504;
        proxy_http_version 1.1;
        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;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

La gestión de certificados no la gestiona NasDash. Pruebe la configuración de Nginx antes de recargarla.

Caddy en el mismo Compose

services:
  nasdash:
    image: ghcr.io/lucas-lepajollec/nasdash:latest
    expose:
      - "2504"
    networks: [web]

  caddy:
    image: caddy:2-alpine
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy-data:/data
      - caddy-config:/config
    networks: [web]

networks:
  web:

volumes:
  caddy-data:
  caddy-config:
Caddyfile
nasdash.example.com {
  reverse_proxy nasdash:2504
}

Traefik en el mismo Compose

El ejemplo asume una red externa proxy ya utilizada por Traefik y un resolutor denominado letsencrypt:

services:
  nasdash:
    image: ghcr.io/lucas-lepajollec/nasdash:latest
    networks: [proxy]
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.nasdash.rule=Host(`nasdash.example.com`)"
      - "traefik.http.routers.nasdash.entrypoints=websecure"
      - "traefik.http.routers.nasdash.tls=true"
      - "traefik.http.routers.nasdash.tls.certresolver=letsencrypt"
      - "traefik.http.services.nasdash.loadbalancer.server.port=2504"

networks:
  proxy:
    external: true

Verificaciones tras la publicación

curl -I https://nasdash.example.com/api/health

Verifique también el inicio de sesión, el cierre de sesión, los enlaces de servicio, la carga de widgets y la ausencia de contenido mixto. Nunca agregue secretos de NasDash a las etiquetas del proxy si su inspección es accesible para otros usuarios.