Markdown JS mit zwei Protokollen

Version: 2.7.0.beta1
Install: discourse-docker

Hallo zusammen,

ich weiß nicht, wie ich das besser beschreiben soll, aber das markdown-it JS-Bundle in unserer Discourse-Installation funktioniert nicht korrekt. Irgendwie wird der URL des JavaScripts (das über CDN ausgeliefert und in unserem S3-Bucket gespeichert ist) ein zusätzliches Protokoll “https” hinzugefügt.

Ich habe einen Screenshot hinzugefügt.
image

Alle anderen Ressourcen funktionieren einwandfrei.

Nur dies hier ist problematisch, und deshalb bekommen wir keine Vorschau-Funktion :frowning:

Danke für eure Zeit und ich freue mich auf eure Rückmeldung :slight_smile:

Screenshot der anderen funktionierenden Ressourcen:

Kannst du deine app.yml-Datei hier teilen?

ja, natürlich.

## Verwaltet durch Ansible. Nicht auf dem Server ändern
## Dies ist das All-in-One, eigenständige Discourse Docker-Container-Template
##
## Nach Änderungen an dieser Datei MUSST du neu aufbauen
## /var/discourse/launcher rebuild app
##
## SEI *SEHR* VORSICHTIG BEIM BEARBEITEN!
## YAML-DATEIEN SIND SUPER SUPER EMPFINDLICH GEGENÜBER FEHLERN IN LEERZEICHEN ODER AUSRICHTUNG!
## Besuche http://www.yamllint.com/, um diese Datei bei Bedarf zu validieren

templates:
  #- "templates/postgres.template.yml"
  #- "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
  ## Diese beiden Zeilen kommentieren, wenn du Lets Encrypt (https) hinzufügen möchtest
  - "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

## Welche TCP/IP-Ports soll dieser Container freigeben?
## Wenn du möchtest, dass Discourse einen Port mit einem anderen Webserver wie Apache oder nginx teilt,
## siehe https://meta.discourse.org/t/17247 für Details
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Setze db_shared_buffers auf maximal 25 % des gesamten Arbeitsspeichers.
  ## Wird automatisch vom Bootstrap basierend auf dem erkannten RAM gesetzt, oder du kannst es überschreiben
  db_shared_buffers: '16GB'

  ## Kann die Sortierleistung verbessern, erhöht aber den Speicherverbrauch pro Verbindung
  #db_work_mem: "40MB"

  ## Welche Git-Revision soll dieser Container verwenden? (Standard: tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## Wie viele gleichzeitige Webanfragen werden unterstützt? Hängt vom Arbeitsspeicher und den CPU-Kernen ab.
  ## Wird automatisch vom Bootstrap basierend auf den erkannten CPUs gesetzt, oder du kannst es überschreiben
  UNICORN_WORKERS: 8

  ## TODO: Der Domainname, auf den diese Discourse-Instanz antworten soll
  ## Erforderlich. Discourse funktioniert nicht mit einer reinen IP-Adresse.
  DISCOURSE_HOSTNAME: 'community-dev.stackit.cloud'

  ## Kommentiere aus, wenn du möchtest, dass der Container mit demselben
  ## Hostnamen (-h-Option) wie oben angegeben gestartet wird (Standard "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Liste der durch Komma getrennten E-Mail-Adressen, die bei der ersten Anmeldung zu Admin und Entwickler werden
  ## Beispiel 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'xxx'

  ## TODO: Der SMTP-Mailserver, der zur Validierung neuer Konten und zum Senden von Benachrichtigungen verwendet wird
  ## SMTP-Adresse, Benutzername und Passwort sind erforderlich
  ## WARNUNG: Das Zeichen '#' im SMTP-Passwort kann Probleme verursachen!
  DISCOURSE_SMTP_ADDRESS: '1.2.3.4'
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: 'xx@xx.de'
  DISCOURSE_SMTP_PASSWORD: 'xxx'
  DISCOURSE_SMTP_ENABLE_START_TLS: true
  DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

  ## Wenn du das Lets Encrypt-Template hinzugefügt hast, kommentiere unten aus, um ein kostenloses SSL-Zertifikat zu erhalten
  #LETSENCRYPT_ACCOUNT_EMAIL: info@ediri.de

  ## Die http- oder https-CDN-Adresse für diese Discourse-Instanz (konfiguriert zum Abrufen)
  ## siehe https://meta.discourse.org/t/14857 für Details
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  #DISCOURSE_CDN_URL: community-cdn.change.me

  ## Der MaxMind-Geolokalisierungs-IP-Schlüssel für die IP-Adressen-Nachschlage
  ## siehe https://meta.discourse.org/t/-/137387/23 für Details
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

  DISCOURSE_DB_POOL: 16
  DISCOURSE_DB_USERNAME: 'discourse'
  DISCOURSE_DB_PASSWORD: 'yyy'
  DISCOURSE_DB_HOST: 1.2.3.4
  DISCOURSE_DB_NAME: 'discourse'
  DISCOURSE_DB_PORT: 5432

  DISCOURSE_REDIS_HOST: 'y.de'
  DISCOURSE_REDIS_PASSWORD: 'xxx'
  DISCOURSE_REDIS_PORT: 49456

  DISCOURSE_MESSAGE_BUS_REDIS_ENABLED: true
  DISCOURSE_MESSAGE_BUS_REDIS_HOST: 'y.de'
  DISCOURSE_MESSAGE_BUS_REDIS_PORT: 49456
  DISCOURSE_MESSAGE_BUS_REDIS_PASSWORD: 'xxx'

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: whatever
  DISCOURSE_S3_ENDPOINT: https://assets.xxx
  DISCOURSE_S3_ACCESS_KEY_ID: 'discourse-dev'
  DISCOURSE_S3_SECRET_ACCESS_KEY: 'xxx'
  DISCOURSE_S3_CDN_URL: https://discourse-dev.assets.xxx
  DISCOURSE_S3_BUCKET: 'discourse-dev'
  DISCOURSE_S3_BACKUP_BUCKET: 'discourse-dev/backups'
  DISCOURSE_BACKUP_LOCATION: s3
  DISCOURSE_S3_INSTALL_CORS_RULE: false

## Der Docker-Container ist zustandslos; alle Daten werden in /shared gespeichert
volumes:
  - volume:
  host: /var/discourse/shared/standalone
  guest: /shared
  - volume:
  host: /var/discourse/shared/standalone/log/var-log
  guest: /var/log

## Plugins gehen hier
## siehe https://meta.discourse.org/t/19157 für Details
hooks:
  after_code:
- exec:
    cd: $home/plugins
    cmd:
      - git clone https://github.com/discourse/docker_manager.git
      - git clone https://github.com/discourse/discourse-cakeday.git
      - git clone https://github.com/discourse/discourse-oauth2-basic.git
      #- git clone https://github.com/discourse/discourse-bbcode.git

  after_assets_precompile:
- exec:
    cd: $home
    cmd:
      - sudo -E -u discourse bundle exec rake s3:upload_assets

## Beliebige benutzerdefinierte Befehle, die nach dem Build ausgeführt werden sollen
run:
  - exec: echo "Beginn der benutzerdefinierten Befehle"
  ## Wenn du die 'From'-E-Mail-Adresse für deine erste Registrierung festlegen möchtest, kommentiere aus und ändere:
  ## Nach Erhalt der ersten Anmelde-E-Mail kommentiere die Zeile erneut aus. Sie muss nur einmal ausgeführt werden.
  - exec: rails r "SiteSetting.notification_email='xxx@xxx.de'"
  - exec: echo "Ende der benutzerdefinierten Befehle"

Laufen Sie hinter einem Reverse-Proxy? Haben Sie in den Einstellungen force_https aktiviert?

Ja, force_https ist aktiviert. Und nein, es gibt keinen Reverse-Proxy außer dem eingebauten nginx.

Seltsam ist, dass die anderen JS-Dateien mit der CDN-URL einwandfrei funktionieren. Nur markdown-it macht Probleme…

Ich weiß nicht, wo ich im Code suchen soll, da ich Ruby nicht kenne. :slight_smile: :grinning:

Gibt es weitere Informationen, die du benötigst, um mich auf die richtige Lösung hinzuweisen? Soll ich vielleicht den Code überprüfen?

Hallo, hat jemand eine Idee, wie man das lösen kann?

Etwas ist bei deiner Einrichtung seltsam.

Du hast ein S3-CDN-Setup, aber es befindet sich an derselben URL wie der Bucket?

data-s3-cdn="https://discourse-dev.assets.schwarz" 
data-s3-base-url="//discourse-dev.assets.schwarz"

Vergleich mit Meta:

data-s3-cdn="https://d11a6trkgmumsb.cloudfront.net" 
data-s3-base-url="//assets-meta-cdck-prod-meta.s3.dualstack.us-west-1.amazonaws.com"

Der Code, der dynamische Skripte lädt, versucht, die S3_BASE_URL durch S3_CDN zu ersetzen:

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse-common/addon/lib/get-url.js#L35-L37

Ja, beide URLs sind identisch, da wir Minio für einen S3-kompatiblen Objektspeicher verwenden.

@Falco, du hattest recht. Die Trennung der beiden URLs hat geholfen, das Problem zu beheben :slight_smile:

Danke für die Hilfe :slight_smile: