# Discourse aus einem Unterordner (Pfad-Präfix) statt einer Subdomain bereitstellen

**URL:** https://meta.discourse.org/t/serve-discourse-from-a-subfolder-path-prefix-instead-of-a-subdomain/30507
**Category:** Self-Hosting
**Tags:** docker, subfolder, how-to, advanced-setup
**Created:** [26. Juni 2015 um 19:18 UTC](https://meta.discourse.org/t/serve-discourse-from-a-subfolder-path-prefix-instead-of-a-subdomain/30507 "2015-06-26T19:18:04Z")
**Posts on this page:** 1
**Showing post:** 1

<div class="post-metadata">

### Author: ![Discourse](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/discourse/32/148734_2.png) [@Discourse](https://meta.discourse.org/u/Discourse)
#### Post date: [26. Juni 2015 um 19:18 UTC](https://meta.discourse.org/t/serve-discourse-from-a-subfolder-path-prefix-instead-of-a-subdomain/30507/1 "2015-06-26T19:18:05Z")

</div>

> ### ⚠ Offizielle Erklärung von Discourse zur Subfolder-Einrichtung
> 
> Wir unterstützen Subfolder-Einrichtungen für unsere gehosteten Kunden ab der Enterprise-Ebene. Aufgrund der hohen technischen Komplexität empfehlen wir dringend, diese Einrichtung nicht zu verwenden, es sei denn, Sie haben umfangreiche Erfahrung mit benutzerdefinierten Subfolder-Einrichtungen.
> 
> Es ist entscheidend, dass Sie ein tiefes Verständnis haben für
> 
> - NGINX-Einrichtung im Discourse-Docker-Container
> - Sicheres Weiterleiten der ursprünglichen IP-Adresse mit benutzerdefinierten Headern in der Proxy-Kette
> - Rate-Limiting am Frontend-Proxy-Server
> 
> Wenn all das für Sie seltsam und fremd klingt, **empfehlen wir dringend** , diese Einrichtung zu vermeiden.

Um Discourse aus einem Subfolder (auch bekannt als Pfad-Präfix) auf Ihrer Domain zu bedienen, wie [https://www.example.com/=SUBFOLDER=](https://www.example.com/=SUBFOLDER=), hier ist die Anleitung!

### Docker-Konfiguration

Fügen Sie im `env`-Abschnitt Ihrer Docker-Container-yml-Datei die Einstellung `DISCOURSE_RELATIVE_URL_ROOT` mit dem gewünschten Subfolder hinzu. Stellen Sie sicher, dass es _nicht_ mit einem `/` endet.

Das Bearbeiten dieses Feldes aktualisiert die gesamte Anleitung.

```plaintext
env:
  ...
  DISCOURSE_RELATIVE_URL_ROOT: /=SUBFOLDER=

```

Der `run`-Abschnitt benötigt einige Änderungen, um alle Discourse-Routen an den richtigen Ort zu leiten. Hier ist ein vollständiger `run`-Abschnitt mit Subfolder-Unterstützung:

```plaintext
run:
    - exec:
        cd: $home
        cmd:
          - mkdir -p public/=SUBFOLDER=
          - cd public/=SUBFOLDER= && ln -s ../uploads && ln -s ../backups
    - replace:
       global: true
       filename: /etc/nginx/conf.d/discourse.conf
       from: proxy_pass http://discourse;
       to: |
          rewrite ^/(.*)$ /=SUBFOLDER=/$1 break;
          proxy_pass http://discourse;
    - replace:
       filename: /etc/nginx/conf.d/discourse.conf
       from: etag off;
       to: |
          etag off;
          location /=SUBFOLDER= {
             rewrite ^/=SUBFOLDER=/?(.*)$ /$1;
          }
    - file:
        path: /etc/nginx/conf.d/outlets/server/set-real-ip-from-webroot.conf
        chmod: 644
        contents: |
          set_real_ip_from 123.456.789.ABC; # die IP-Adresse Ihres Upstream-Proxys
    - file:
        path: /etc/nginx/conf.d/outlets/server/real-ip-header.conf
        chmod: 644
        contents: |
          real_ip_header x-forwarded-for;

```

Für weitere Details zur Erhaltung der IP-Adresse des Endnutzers siehe [Handling the "chain of trust" of the end user's real IP](https://meta.discourse.org/t/handling-the-chain-of-trust-of-the-end-users-real-ip/406372).

Nachdem Sie diese Änderungen vorgenommen haben, bootstrappen Sie Ihren Docker-Container wie üblich oder rebuilden Sie ihn, falls Sie einen bestehenden Container ändern.

```plaintext
./launcher bootstrap app

```

oder

```plaintext
./launcher rebuild app

```

Angehängt ist eine vollständige Beispiel-yml-Datei für einen eigenständigen Container:  
[subfolder-sample.yml](https://meta.discourse.org/uploads/short-url/d9UPUPF0hmQFwOQh1zJ0fVANj9e) (3.1 KB)

### Bedenken bezüglich Rate-Limiting

Wenn Sie diese Einrichtung verwenden, möchten Sie wahrscheinlich Anfragen vor dem Erreichen von NGINX im Container rate-limiten. Das bedeutet, dass Sie wahrscheinlich unser Rate-Limiting-Template nicht verwenden sollten. Es ist sehr schwierig, NGINX im Container so zu konfigurieren, dass es auf einer umgemappten IP limitiert, und würde komplexe Änderungen am Template erfordern.

### Bestehende Beiträge

Wenn Sie dies mit einer bestehenden Site gemacht haben, die sich auf einem Subdomain befand, werden Sie feststellen, dass Ihre Uploads nicht mehr funktionieren. Es gibt ein Tool, das helfen kann, alle Pfade so anzupassen, dass sie den Subfolder enthalten. Gehen Sie zunächst in den Docker-Container und navigieren Sie zum Discourse-Verzeichnis:

```plaintext
cd /var/discourse
./launcher enter app
cd /var/www/discourse

```

Führen Sie dann den Remap-Befehl aus, nachdem Sie ein Backup erstellt haben:

```plaintext
RAILS_ENV=production bundle exec script/discourse remap '/uploads' '/=SUBFOLDER=/uploads'

```

Siehe auch: [Use a subfolder (path prefix) to serve Discourse with multiple servers sharing a domain](https://meta.discourse.org/t/discourse-in-a-subfolder-sharing-a-domain/30514?source_topic_id=30507) für weitere exotische Einrichtungen.

### robots.txt

Da Discourse nun in einem Subfolder läuft, kann es seine robots.txt-Datei nicht bereitstellen, um zu steuern, welche Routen von Web-Crawlern durchsucht werden. Die Crawler werden die robots.txt-Datei Ihrer Hauptseite (`https://www.example.com/robots.txt`) überprüfen. Sie müssen den Inhalt der robots.txt-Datei von Discourse (zu finden unter `https://www.example.com/=SUBFOLDER=/robots.txt`) kopieren und in die robots.txt-Datei Ihrer Hauptseite einfügen.

---

_[View the full topic](https://meta.discourse.org/t/serve-discourse-from-a-subfolder-path-prefix-instead-of-a-subdomain/30507)._
