Esecuzione di Discourse su / mentre si serve un'app personalizzata su /tickets sullo stesso dominio

Ciao a tutti,

Sto cercando di confermare l’architettura corretta per servire un’applicazione personalizzata a un sotto-percorso mantenendo Discourse alla radice (/), senza modificare gli interni di Discourse.

Cosa voglio (obiettivo finale)

https://mydomain.com/         → Discourse
https://mydomain.com/tickets  → Sistema di ticketing personalizzato (Go + Gin)

Requisiti:

  1. Discourse deve rimanere a / e l’app personalizzata deve vivere a /tickets
  2. Stesso dominio
  3. Nessun plugin di Discourse

Ambiente attuale

  1. OVH VPS (Ubuntu) Discourse in esecuzione in Docker (/var/discourse)
  2. App Go personalizzata in esecuzione sullo stesso server a 127.0.0.1:8080
  3. Nginx esterno installato sull’host (non all’interno del container)

NON sto cercando di eseguire Discourse in una sottocartella come /forum. Ah, e prima che qualcuno lo chieda, sì, ho provato a usare il plugin per i ticket di Discourse - non funziona come vorrei.

Puoi farlo facilmente con nginx, anche se non è consigliato, non sono a conoscenza che discourse utilizzi la rotta /tickets per qualsiasi cosa.

Grazie per la rapida risposta! Sto usando nginx e ho difficoltà. Questa è la mia configurazione e ancora niente da fare.

Questo è all’interno del mio file app.yml

ports:
  - "127.0.0.1:4000:4000"
  #- "80:80" # http
  #- "443:443" # https

/etc/nginx/sites-enabled/filename

server {
    listen 80;
    server_name mydomain.com;

    # ---- Tickets app ----
    location ^~ /tickets {
        proxy_pass http://127.0.0.1:5000;
        proxy_http_version 1.1;
        proxy_redirect 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;

        # Discourse auth headers
        proxy_set_header X-Discourse-Username $http_x_discourse_username;
        proxy_set_header X-Discourse-User-Id $http_x_discourse_user_id;
        proxy_set_header X-Discourse-Groups $http_x_discourse_groups;
    }

    # ---- Discourse ----
    location / {
        proxy_pass http://127.0.0.1:4000;
        proxy_http_version 1.1;
        proxy_redirect 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;
    }
}

Puoi spiegare esattamente dove stai avendo difficoltà?

2 Mi Piace

Penso che quelle siano probabilmente le tue migliori istruzioni, comunque. Seguirai quelle istruzioni, ma in modo inverso. Farai in modo che il tuo proxy inverso esterno serva / a Discourse e /tickets alla tua applicazione.

@pfaffman Quindi, quello che ho capito è: riutilizzare il concetto, non la configurazione — mettere un reverse proxy esterno davanti che instrada:

  • / → Discourse

  • /tickets → la mia applicazione personalizzata

Discourse rimane completamente ignaro di /tickets.
Quindi seguire questa guida, giusto: Serve Discourse from a subfolder (path prefix) instead of a subdomain

1 Mi Piace

Penso che l’nginx esterno sia il modo più semplice per farlo. Sarebbe possibile creare un template che permettesse a quello interno di farlo, ma è più complicato e, penso, con pochi vantaggi.

Sì, ma non è necessario apportare modifiche al container di Discourse se non rimuovere i template ssl/let’s encrypt e magari usare un socket. (Quindi, in realtà, non molto di quell’argomento è di grande aiuto.)

Ce l’ho fatta funzionare!

Grazie a entrambi per le vostre risposte!

Anche il link “Tickets” che ho aggiunto all’intestazione di Discourse funziona, quando è impostato su vuoto NON su self, poiché /tickets viene quindi trattato come una rotta di Discourse e tenta solo di cambiare la vista react. Vuoto forza un ricaricamento completo della pagina.

1 Mi Piace

Se vuoi risolvere questo problema, sono abbastanza sicuro che un componente tema possa farlo aggiungendo una rotta per /tickets e dicendogli di fare… qualcosa (non sono un esperto di Ember). Inoltre, penso che potresti aggiungere un altro sottodominio al tuo server Discourse (come tickets.mydomain.com) usando DISCOURSE_HOST_ALIASES e poi collegarti a quel dominio, che quindi farebbe un reindirizzamento, in modo che Ember non tenti di prendere la rotta.