Markdown JS avec deux protocoles

Version : 2.7.0.beta1
Installation : discourse-docker

Bonjour à tous,

Je ne sais pas comment mieux décrire cela, mais le bundle JavaScript markdown-it de notre installation Discourse ne fonctionne pas correctement. D’une manière ou d’une autre, un protocole supplémentaire « https » est ajouté à l’URL du JavaScript (servi via CDN et stocké dans notre bucket S3).

J’ai ajouté une capture d’écran.
image

Toutes les autres ressources fonctionnent correctement.

C’est juste cela et, à cause de cela, nous n’avons pas de fonctionnalité d’aperçu :frowning:

Merci pour votre temps et dans l’attente de votre retour :slight_smile:

Capture d’écran des autres ressources fonctionnelles :

Pouvez-vous partager votre fichier app.yml ici ?

oui, bien sûr.

## Géré par Ansible. Ne pas modifier sur le serveur
## Ceci est le modèle de conteneur Docker Discourse autonome tout-en-un
##
## Après avoir apporté des modifications à ce fichier, vous DEVEZ reconstruire
## /var/discourse/launcher rebuild app
##
## SOYEZ *TRÈS* PRUDENT EN ÉDITANT !
## LES FICHIERS YAML SONT SUPER SUPER SENSIBLES AUX ERREURS D'ESPACE OU D'ALIGNEMENT !
## visitez http://www.yamllint.com/ pour valider ce fichier si nécessaire

templates:
  #- "templates/postgres.template.yml"
  #- "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
  ## Décommentez ces deux lignes si vous souhaitez ajouter Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

## Quels ports TCP/IP ce conteneur doit-il exposer ?
## Si vous souhaitez que Discourse partage un port avec un autre serveur web comme Apache ou nginx,
## consultez https://meta.discourse.org/t/17247 pour plus de détails
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Définir db_shared_buffers à un maximum de 25 % de la mémoire totale.
  ## Sera défini automatiquement par bootstrap en fonction de la RAM détectée, ou vous pouvez le remplacer
  db_shared_buffers: '16GB'

  ## peut améliorer les performances de tri, mais augmente l'utilisation de la mémoire par connexion
  #db_work_mem: "40MB"

  ## Quelle révision Git ce conteneur doit-il utiliser ? (par défaut : tests-passed)
  #version: tests-passed

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

  ## Combien de requêtes web simultanées sont prises en charge ? Dépend de la mémoire et des cœurs CPU.
  ## Sera défini automatiquement par bootstrap en fonction des CPU détectés, ou vous pouvez le remplacer
  UNICORN_WORKERS: 8

  ## TODO : Le nom de domaine auquel cette instance Discourse répondra
  ## Requis. Discourse ne fonctionnera pas avec une adresse IP brute.
  DISCOURSE_HOSTNAME: 'community-dev.stackit.cloud'

  ## Décommentez si vous souhaitez que le conteneur soit démarré avec le même
  ## nom d'hôte (option -h) que spécifié ci-dessus (par défaut "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO : Liste d'e-mails délimités par des virgules qui seront administrateurs et développeurs
  ## lors de l'inscription initiale, par exemple 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'xxx'

  ## TODO : Le serveur de messagerie SMTP utilisé pour valider les nouveaux comptes et envoyer des notifications
  # L'adresse SMTP, le nom d'utilisateur et le mot de passe sont requis
  # ATTENTION, le caractère '#' dans le mot de passe SMTP peut causer des problèmes !
  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

  ## Si vous avez ajouté le modèle Lets Encrypt, décommentez ci-dessous pour obtenir un certificat SSL gratuit
  #LETSENCRYPT_ACCOUNT_EMAIL: info@ediri.de

  ## L'adresse CDN http ou https pour cette instance Discourse (configurée pour récupérer)
  ## consultez https://meta.discourse.org/t/14857 pour plus de détails
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  #DISCOURSE_CDN_URL: community-cdn.change.me

  ## La clé d'adresse IP Maxmind pour la recherche d'adresses IP
  ## consultez https://meta.discourse.org/t/-/137387/23 pour plus de détails
  #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

## Le conteneur Docker est sans état ; toutes les données sont stockées dans /shared
volumes:
  - volume:
  host: /var/discourse/shared/standalone
  guest: /shared
  - volume:
  host: /var/discourse/shared/standalone/log/var-log
  guest: /var/log

## Les plugins vont ici
## consultez https://meta.discourse.org/t/19157 pour plus de détails
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

## Toutes les commandes personnalisées à exécuter après la construction
run:
  - exec: echo "Début des commandes personnalisées"
  ## Si vous souhaitez définir l'adresse e-mail 'De' pour votre première inscription, décommentez et modifiez :
  ## Après avoir reçu le premier e-mail d'inscription, recliquez sur la ligne. Elle ne doit être exécutée qu'une seule fois.
  - exec: rails r "SiteSetting.notification_email='xxx@xxx.de'"
  - exec: echo "Fin des commandes personnalisées"

Êtes-vous derrière un proxy inverse ? Avez-vous activé l’option force_https dans les paramètres ?

Oui, force_https est activé. Et non, aucun proxy inverse en dehors du nginx intégré.

Ce qui est étrange, c’est que les autres fichiers JS fonctionnent parfaitement avec l’URL du CDN. C’est uniquement markdown-it qui pose problème…

Je ne sais pas où chercher dans le code, d’autant que je ne connais pas Ruby. :slight_smile: :grinning:

1 « J'aime »

Y a-t-il des informations supplémentaires dont vous auriez besoin pour m’orienter vers une solution ? Devrais-je peut-être vérifier le code ?

Salut, quelqu’un a une idée pour résoudre ce problème ?

1 « J'aime »

Quelque chose d’étrange dans votre configuration.

Vous avez configuré un CDN S3, mais il utilise la même URL que le bucket ?

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

Comparaison avec Meta :

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

Le code qui charge les scripts dynamiques tentera de remplacer S3_BASE_URL par S3_CDN :

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

1 « J'aime »

Oui, les deux URL sont identiques, car nous utilisons Minio pour un stockage d’objets compatible S3.

@Falco, tu avais raison. Séparer les deux URL a permis de résoudre le problème :slight_smile:

Merci pour l’aide :slight_smile:

1 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.