⚠ La porta 443 di questo computer non sembra essere accessibile tramite il nome host: metabolism.logophilia.eu ----

Grazie per il feedback, apprezzo davvero il tempo dedicato. Non voglio fare lo smargiasso, ma:

[2/5] Preparazione configurazione
✓ Le porte 80 e 443 sono libere per l'uso

Infatti, inizialmente dice proprio «libere per l’uso». Detto questo, ora ho la mia istanza attiva e funzionante, con l’aiuto di Gemini (principalmente per quanto riguarda l’uso di Docker, roba del genere lol). Vorrei offrire il mio «runbook» per qualsiasi altro utente Virtualmin, perché: «liberare la porta 443» non è la soluzione qui. Il resto del mio post sarà proprio questo; se dovessi pubblicarlo altrove, ad esempio in una nuova discussione, per favore indicami dove andare; credo di non essere l’unico con questa configurazione e potrebbe essere utile per altri. Grazie ancora!

Se si utilizza un VPS gestito da Webmin/Virtualmin e si impiega un sottodominio:

Il Runbook Definitivo per Virtualmin + Discourse *

  • (1) Pulizia dei residui (se si sta riprovando, come ho fatto io):

    rm -rf /var/discourse/shared/standalone/ssl/*

    rm -rf /var/discourse/shared/standalone/letsencrypt

    rm -rf /var/discourse/shared/standalone/state

  • (2) Eliminazione dei template:

    Devi eliminare completamente le righe templates/web.ssl.template.yml e templates/web.letsencrypt.ssl.template.yml da app.yml. Il parser personalizzato del launcher le valuterà anche se precedute da #.

  • (3) Configurazione email e variabili:

    Modifica DISCOURSE_SKIP_EMAIL_SETUP da '1' a '0', altrimenti Discourse non potrà connettersi e verificare il DiscordID;

    Aggiungi DISCOURSE_FORCE_HTTPS: true in modo che il backend generi URL sicuri.

    Promemoria amichevole: Assicurati che DISCOURSE_SMTP_USER_NAME sia impostato sul nome dell’account mailbox grezzo (ad esempio 'logophilia'), non sull’indirizzo email completo (ad esempio 'logophilia@logophilia.eu'), e avvolgi le credenziali tra virgolette singole (') per bypassare eventuali bug di analisi dei caratteri YAML.

  • (4) Configurazione del blocco expose:

    Assicurati che il blocco expose: in app.yml contenga un mapping HTTP; mappare 443=>8443 è opzionale/ridondante, poiché Virtualmin termina la logica SSL prima di inoltrarla:

    expose:
      - 8080:80
    

    ora puoi ricominciare a ricostruire:

    cd /var/discourse
    ./launcher rebuild app
    
  • (5) Configurazione del sottodominio e del percorso proxy:

    • Crea il tuo sottodominio in Virtualmin come al solito e proteggilo con un certificato SSL Let’s Encrypt (viene fatto automaticamente, dico solo: assicurati che non generi errori per motivi non correlati).
    • Vai su Proxy Paths (Virtualmin → il tuo sottodominio → Configurazione Web → Proxy Paths), crea un nuovo mapping / verso http://localhost:8080/, lascia «serve locally» deselezionato, ma attiva Proxy WebSocket su per consentire aggiornamenti in tempo reale e flussi di notifiche.
  • (6) Direttive per l’header CSRF:

    • In Webmin ➔ Servers ➔ Apache Webserver ➔ [trova qui la configurazione del tuo sottodominio e clicca sulla configurazione per 443] ➔ Edit Directives, inserisci le seguenti righe proprio sopra il blocco proxy di Virtualmin per Let’s Encrypt (di solito «ProxyPass /.well-known !») per facilitare l’inoltro del token CSRF:
    ProxyPreserveHost On
    RequestHeader set X-Forwarded-Proto "https"
    RequestHeader set X-Forwarded-For %{REMOTE_ADDR}s
    

    ProxyPreserveHost On: Dice a Discourse il nome del tuo dominio effettivo invece di «localhost».
    RequestHeader set X-Forwarded-Proto "https": Dice esplicitamente a Discourse che l’utente sta utilizzando una connessione sicura, in linea con l’impostazione DISCOURSE_FORCE_HTTPS: true.
    RequestHeader set X-Forwarded-For: Passa il vero IP del visitatore al contenitore in modo che i log di sicurezza funzionino.

  • (7) Handshake pulito del contenitore:

    Mentre il lungo (scusa… ma è vero;-) processo di ricostruzione finisce, assicurati che eventuali blueprint di contenitori bloccati vengano rimossi con docker rm -f app in modo che l’esecuzione di ./launcher start app avvii un’istanza completamente nuova legata alla porta 8080. Controlla che docker ps mostri qualcosa sotto «ports» simile a:

    # docker ps
    CONTAINER ID   IMAGE                 COMMAND        CREATED          STATUS          PORTS                                                                                NAMES
    d21772a21e36   local_discourse/app   "/sbin/boot"   45 minutes ago   Up 45 minutes   0.0.0.0:8080->80/tcp, [::]:8080->80/tcp, 0.0.0.0:8443->443/tcp, [::]:8443->443/tcp   app
    

    (Come puoi vedere, ho lasciato la direttiva 443=>8443 nel mio app.yml, funziona in entrambi i modi.)

  • (8) Monitoraggio e avvio:

    Segui il flusso di avvio con docker logs -f app fino al completamento delle migrazioni del database e all’avvio dei worker per l’elaborazione delle richieste. Fondamentalmente, una serie di righe «INFO» in rapida successione.

  • (9) Finalizzazione:

    Apri il tuo sottodominio in un browser, clicca su Register e lascia che il sistema invii un’email di convalida alla tua casella di posta.

*) fino a prova contraria :wink: