Servir Discourse à partir d'un sous-dossier (préfixe de chemin) au lieu d'un sous-domaine

:warning: Déclaration officielle de Discourse concernant la configuration en sous-dossier

Nous prenons en charge les configurations en sous-dossier pour nos clients d’entreprise et supérieurs. En raison de la complexité technique élevée de la configuration, nous vous recommandons fortement de ne pas utiliser cette configuration, sauf si vous êtes très expérimenté dans les configurations personnalisées en sous-dossier.

Il est essentiel que vous ayez une compréhension approfondie de

  • Configuration NGINX dans le conteneur Docker de Discourse
  • Transfert de l’IP d’origine sécurisé à l’aide d’en-têtes personnalisés dans la chaîne de proxy
  • Limitation de débit dans le serveur proxy frontal

Si tout cela vous semble étrange et inhabituel, nous vous recommandons fortement d’éviter cette configuration.

Pour servir Discourse à partir d’un sous-dossier (aussi appelé avec un préfixe de chemin) sur votre domaine, comme https://www.example.com/=SUBFOLDER=, voici comment procéder !

Configuration Docker

Dans la section env de votre fichier yml de conteneur Docker, ajoutez le paramètre DISCOURSE_RELATIVE_URL_ROOT avec le sous-dossier que vous souhaitez utiliser. Assurez-vous qu’il ne se termine pas par un /.

Modifier ceci mettra à jour l’ensemble du guide.

env:
  ...
  DISCOURSE_RELATIVE_URL_ROOT: /=SUBFOLDER=

La section run nécessite quelques modifications pour envoyer toutes les routes Discourse au bon endroit. Voici une section run complète avec la prise en charge des sous-dossiers :

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;
          }
    - replace:
         filename: /etc/nginx/conf.d/discourse.conf
         from: $proxy_add_x_forwarded_for
         to: $http_your_original_ip_header
         global: true

$http_your_original_ip_header représente Your-Original-Ip-Header, qui est un en-tête de confiance que vous définissez sur l’origine et qui contient l’IP réelle du client.

Ceci est requis car le trafic passe par un proxy central ; si Discourse a une adresse IP publique, vous pouvez l’usurper. Si Discourse est privé, vous pourriez vous en sortir avec X-Forwarded-For.

Après avoir effectué ces modifications, amorcez votre conteneur Docker comme d’habitude, ou reconstruisez-le si vous modifiez un conteneur existant.

./launcher bootstrap app

ou

./launcher rebuild app

Ci-joint un exemple complet de fichier yml pour un conteneur autonome.

subfolder-sample.yml (3.1 KB)

Problèmes de limitation de débit

Si vous optez pour cette configuration, vous voudrez probablement limiter le débit des requêtes avant qu’elles n’atteignent NGINX dans le conteneur, ce qui signifie que vous éviterez probablement d’utiliser notre modèle de limitation de débit. Il est très difficile de configurer NGINX dans le conteneur pour limiter sur une IP remappée, et cela nécessiterait des modifications complexes du modèle.

Publications existantes

Si vous avez fait cela avec un site existant qui était sur un sous-domaine, vous constaterez que vos téléchargements sont cassés. Il existe un outil qui peut aider à corriger tous les chemins pour inclure le sous-dossier. Entrez d’abord dans le conteneur Docker et naviguez vers le répertoire Discourse :

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

Ensuite, exécutez la commande de remappage après avoir effectué une sauvegarde :

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

Voir aussi : Use a subfolder (path prefix) to serve Discourse with multiple servers sharing a domain pour des configurations plus ésotériques.

robots.txt

Maintenant que Discourse s’exécute dans un sous-dossier, il ne peut pas servir son fichier robots.txt pour contrôler quelles routes sont explorées par les robots d’exploration. Les robots d’exploration rechercheront le fichier robots.txt de votre site principal (https://www.example.com/robots.txt). Vous devez copier le contenu du fichier robots.txt de Discourse (trouvé à l’adresse https://www.example.com/=SUBFOLDER=/robots.txt) et le placer dans le fichier robots.txt de votre site principal.

35 « J'aime »
How can I change my installation from forum.website.com to www.website.com/forum?
Moving Discourse to subdirectory caused all uploads to break
Uploaded avatars and Gravatar not working with subfolder installation
Is it possible to install discourse inside a directory?
Launch Discourse on www.example.com/meta/ In a web folder type
Subfolder with SSL and nginx reverse proxy
404 errors (assets) on Subfolder installation
Uploaded avatar or gravatar not working
Install Discourse into domain.com/forums
Problem with discourse in a subfolder
Moving Discourse to subdirectory caused all uploads to break
Non-standard port breaks uploads
Avatar uploads broken on subfolder installs?
Image lightbox not working in subfolder install
Install Discourse as subfolder within Wordpress website?
Is it possible to install Discourse on the same domain of your main website
Subfolder install - external links get changed/redirected to site relative links
Discourse embedded on my WP
Reverse Proxy Assets
Reverse Proxy rewrites domain in external links in posts
Inheriting discourse install - need some assistance
Multisite installation ... in subdirectories?
Generals Subfolder recommendations and tips
Add to route headers?
Sorry, there was an error authorizing your account
Site Logo and Icons Break due to subfolder config
Site Logo and Icons Break due to subfolder config
Site Logo and Icons Break due to subfolder config
Running Discourse at / while serving a custom app at /tickets on the same domain
404 errors (assets) on Subfolder installation
404 errors (assets) on Subfolder installation
Moving Discourse from Subdomain to Subfolder
Blank Page After installing Discourse on Subfolder
Trailing slash and subfolder setup
Install Discourse as a subdirectory with existing Nginx
How to run discourse on subdirectory of external domain?
How to run discourse on subdirectory of external domain?
How to run discourse on subdirectory of external domain?
Digest email issue with 'stable'
Using other ports than 80 and 443 - HowTo?
Add secondary url / embed into Wordpress
Recent Changes Breaking Subfolder Setup?
Issue with FAQ link on edge case subfolder setup
Issue with FAQ link on edge case subfolder setup
Put discourse on a sub url
No subfolder prefixing for some resources
Upgrade failed - could use some help to try and fix using SSH
How to run Discourse in a subfolder?
Install Discourse without docker with an existing Rails app
Docker subfolder install not working due to Ember-CLI proxy error?
Multisite DISCOURSE_RELATIVE_URL_ROOT
How to install discourse into subdirectory instead of subdomain?
Setup wizard emoji wrong in subfolder install
Not find a Gravatar
Installing for production via Docker on existing server with Litespeed?
Use a subfolder (path prefix) to serve Discourse with multiple servers sharing a domain
Configure a Cloudfront reverse proxy for a subfolder install
Run other websites on the same machine as Discourse
Embedding Categories in Existing SPA
Does custom domain support the subpath format like 'example.com/forum'?
To use Discourse completely on shopify
Are separate subdomains required for making a discourse forum?
Problem when updating Discourse Forum
Domain missing from some requests after migration from subfolder back to subdomain
Error when I send a message in chat [downgraded to Stable from 3.1.0beta4]
Error when I send a message in chat [downgraded to Stable from 3.1.0beta4]
How to Change Discourse forum path
How to setup NGINX in the Discourse Docker container
How to setup NGINX in the Discourse Docker container
Possible to update add url path prefix for /t and /c
Implement the discourse forum in the laravel 11 project
Endless loading behind Cloudflare
Publish Discourse under URL
Cloudflare with subfolder setup
How to Set Up Discourse in a Subdirectory for Self-Hosting?
Setup wizard emoji wrong in subfolder install
National Flags
Discourse sign in redirects to root directory instead of subfolder
Last update breaks permalink for categories
Setup wizard emoji wrong in subfolder install
Ghost & Discourse SSO implementation
Wiki topics look incredibly out of date?
Too many redirects when reverse proxying to Discourse from a different server
Blank main page on one forum (subfolder + multisite install)
Moving Discourse to subdirectory caused all uploads to break
Feasible to reverse proxy using qualifier in URL?
Upgrade doesn't work when installed with subfolder
Setup Discourse with KeyCDN
Message bus does not respect subfolder during update process
Wiki Posts Not Green?
Base_url and base_uri
Embed whole Discourse board into Wordpresspage
Backup upload failing
Redirect to discourse from a route in another domain
Redirect to discourse from a route in another domain
Problem with discourse in a subfolder
Install Discourse as subfolder within Wordpress website?
Looking for a developper
Switching forum from subdomain to sub directory
How to install discourse with nginx as proxy on specific path?
All IPs recorded as 127.0.0.1
How to install discourse with nginx as proxy on specific path?
SetupWizard, blank screen, JS Error "`virtual-dom"
Trouble connecting drupal and discourse
Failed to Bootstrap - launcher rebuild app
Redirect from one server to another server and keep everything after the URL
Installation on v-server as a subfolder with other services in subfolders using apache

:warning: Please discuss the merits of subfolder vs non-subfolder on separate topics.

Any discussion about the subfolder setup here will likely be integrated into the top post and deleted.

I just edited the OP with more warnings!

10 « J'aime »

That remap command wouldn’t work unless I called bundle exec discourse instead of bundle exec script/discourse.

I had to update the external_system_avatars_url site setting, and found I had to also remap things like <subfolder>/user_avatar/<domain>, <subfolder>/plugins, <subfolder>/images, etc…

3 « J'aime »

Thanks for mentioning that @vvanpo :slight_smile:

I managed to get this working but do not know where to link <subfolder>/user_avatar/<domain>.

There is no user_avatar folder in the public folder. Where have you pointed (dest) your user_avatar symbolic link placed into <subfolder> ?

Thanks :wink:

Edit: It seems to work without user_avatar link. Maybe images must be rebuilded in background (sidekiq tasks) and this just take some time.

1 « J'aime »

thanks @vvanpo

here’s what worked for me:

RAILS_ENV=production bundle exec discourse remap '/uploads' '/<subfolder>/uploads'
RAILS_ENV=production bundle exec discourse remap '/user_avatar/<domain>' '/<subfolder>/user_avatar/<domain>'
RAILS_ENV=production bundle exec discourse remap '/images' '/<subfolder>/images'
RAILS_ENV=production bundle exec discourse remap '/plugins' '/<subfolder>/plugins'
3 « J'aime »

Considering the rewrite only matches with the subfolder trailing slash, I think it’s safe to change the location directive to /forum/ in this howto, avoiding a possible clash if there are routes starting with the subfolder string. What do you think?

everything went fine while installing but when I was executing this command

after doing ./launcher enter app I got an error
im using ubuntu

root@ahmed-app:/var/www/discourse# RAILS_ENV=production bundle exec script/discourse remap '/uploads' '/ask/uploads'
bundler: failed to load command: script/discourse (script/discourse)
Traceback (most recent call last):
        77: from /usr/local/bin/bundle:23:in `<main>'
        76: from /usr/local/bin/bundle:23:in `load'
        75: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/exe/bundle:37:in `<top (required)>'
        74: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/friendly_errors.rb:130:in `with_friendly_errors'
        73: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/exe/bundle:49:in `block in <top (required)>'
        72: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/cli.rb:24:in `start'
        71: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
        70: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/cli.rb:30:in `dispatch'
        69: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
        68: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
        67: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
        66: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/cli.rb:494:in `exec'
        65: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/cli/exec.rb:28:in `run'
        64: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/cli/exec.rb:63:in `kernel_load'
        63: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/cli/exec.rb:63:in `load'
        62: from script/discourse:286:in `<top (required)>'
        61: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.1.0/lib/thor/base.rb:485:in `start'
        60: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.1.0/lib/thor.rb:392:in `dispatch'
        59: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.1.0/lib/thor/invocation.rb:127:in `invoke_command'
        58: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.1.0/lib/thor/command.rb:27:in `run'
        57: from script/discourse:33:in `remap'
        56: from script/discourse:266:in `load_rails'
        55: from script/discourse:266:in `require'
        54: from /var/www/discourse/config/environment.rb:7:in `<top (required)>'
        53: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/railtie.rb:190:in `method_missing'
        52: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/railtie.rb:190:in `public_send'
        51: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/application.rb:363:in `initialize!'
        50: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/initializable.rb:60:in `run_initializers'
        49: from /usr/local/lib/ruby/2.7.0/tsort.rb:205:in `tsort_each'
        48: from /usr/local/lib/ruby/2.7.0/tsort.rb:226:in `tsort_each'
        47: from /usr/local/lib/ruby/2.7.0/tsort.rb:347:in `each_strongly_connected_component'
        46: from /usr/local/lib/ruby/2.7.0/tsort.rb:347:in `call'
        45: from /usr/local/lib/ruby/2.7.0/tsort.rb:347:in `each'
        44: from /usr/local/lib/ruby/2.7.0/tsort.rb:349:in `block in each_strongly_connected_component'
        43: from /usr/local/lib/ruby/2.7.0/tsort.rb:415:in `each_strongly_connected_component_from'
        42: from /usr/local/lib/ruby/2.7.0/tsort.rb:415:in `call'
        41: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/initializable.rb:50:in `tsort_each_child'
        40: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/initializable.rb:50:in `each'
        39: from /usr/local/lib/ruby/2.7.0/tsort.rb:421:in `block in each_strongly_connected_component_from'
        38: from /usr/local/lib/ruby/2.7.0/tsort.rb:431:in `each_strongly_connected_component_from'
        37: from /usr/local/lib/ruby/2.7.0/tsort.rb:422:in `block (2 levels) in each_strongly_connected_component_from'
        36: from /usr/local/lib/ruby/2.7.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
        35: from /usr/local/lib/ruby/2.7.0/tsort.rb:228:in `block in tsort_each'
        34: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/initializable.rb:61:in `block in run_initializers'
        33: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/initializable.rb:32:in `run'
        32: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/initializable.rb:32:in `instance_exec'
        31: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/engine.rb:624:in `block in <class:Engine>'
        30: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/engine.rb:624:in `each'
        29: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/engine.rb:625:in `block (2 levels) in <class:Engine>'
        28: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/engine.rb:665:in `load_config_initializer'
        27: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.5/lib/active_support/notifications.rb:182:in `instrument'
        26: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/engine.rb:666:in `block in load_config_initializer'
        25: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.5/lib/active_support/dependencies.rb:318:in `load'
        24: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.5/lib/active_support/dependencies.rb:291:in `load_dependency'
        23: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.5/lib/active_support/dependencies.rb:318:in `block in load'
        22: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.7.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:59:in `load'
        21: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.7.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:59:in `load'
        20: from /var/www/discourse/config/initializers/004-message_bus.rb:120:in `<main>'
        19: from /var/www/discourse/lib/site_setting_extension.rb:522:in `block in setup_methods'
        18: from /var/www/discourse/lib/site_setting_extension.rb:287:in `refresh!'
        17: from /var/www/discourse/lib/site_setting_extension.rb:287:in `synchronize'
        16: from /var/www/discourse/lib/site_setting_extension.rb:290:in `block in refresh!'
        15: from /var/www/discourse/lib/site_settings/defaults_provider.rb:29:in `db_all'
        14: from /var/www/discourse/lib/site_settings/db_provider.rb:16:in `all'
        13: from /var/www/discourse/lib/site_settings/db_provider.rb:61:in `table_exists?'
        12: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_handling.rb:189:in `connection'
        11: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_handling.rb:221:in `retrieve_connection'
        10: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:1119:in `retrieve_connection'
         9: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:437:in `connection'
         8: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:593:in `checkout'
         7: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:871:in `acquire_connection'
         6: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:910:in `try_to_checkout_new_connection'
         5: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:931:in `checkout_new_connection'
         4: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:887:in `new_connection'
         3: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/postgresql_adapter.rb:46:in `postgresql_connection'
         2: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.2.3/lib/pg.rb:58:in `connect'
         1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.2.3/lib/pg.rb:58:in `new'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.2.3/lib/pg.rb:58:in `initialize': FATAL:  Peer authentication failed for user "discourse" (PG::ConnectionBad)
        75: from /usr/local/bin/bundle:23:in `<main>'
        74: from /usr/local/bin/bundle:23:in `load'
        73: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/exe/bundle:37:in `<top (required)>'
        72: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/friendly_errors.rb:130:in `with_friendly_errors'
        71: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/exe/bundle:49:in `block in <top (required)>'
        70: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/cli.rb:24:in `start'
        69: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
        68: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/cli.rb:30:in `dispatch'
        67: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
        66: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
        65: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
        64: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/cli.rb:494:in `exec'
        63: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/cli/exec.rb:28:in `run'
        62: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/cli/exec.rb:63:in `kernel_load'
        61: from /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.14/lib/bundler/cli/exec.rb:63:in `load'
        60: from script/discourse:286:in `<top (required)>'
        59: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.1.0/lib/thor/base.rb:485:in `start'
        58: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.1.0/lib/thor.rb:392:in `dispatch'
        57: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.1.0/lib/thor/invocation.rb:127:in `invoke_command'
        56: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.1.0/lib/thor/command.rb:27:in `run'
        55: from script/discourse:33:in `remap'
        54: from script/discourse:266:in `load_rails'
        53: from script/discourse:266:in `require'
        52: from /var/www/discourse/config/environment.rb:7:in `<top (required)>'
        51: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/railtie.rb:190:in `method_missing'
        50: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/railtie.rb:190:in `public_send'
        49: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/application.rb:363:in `initialize!'
        48: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/initializable.rb:60:in `run_initializers'
        47: from /usr/local/lib/ruby/2.7.0/tsort.rb:205:in `tsort_each'
        46: from /usr/local/lib/ruby/2.7.0/tsort.rb:226:in `tsort_each'
        45: from /usr/local/lib/ruby/2.7.0/tsort.rb:347:in `each_strongly_connected_component'
        44: from /usr/local/lib/ruby/2.7.0/tsort.rb:347:in `call'
        43: from /usr/local/lib/ruby/2.7.0/tsort.rb:347:in `each'
        42: from /usr/local/lib/ruby/2.7.0/tsort.rb:349:in `block in each_strongly_connected_component'
        41: from /usr/local/lib/ruby/2.7.0/tsort.rb:415:in `each_strongly_connected_component_from'
        40: from /usr/local/lib/ruby/2.7.0/tsort.rb:415:in `call'
        39: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/initializable.rb:50:in `tsort_each_child'
        38: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/initializable.rb:50:in `each'
        37: from /usr/local/lib/ruby/2.7.0/tsort.rb:421:in `block in each_strongly_connected_component_from'
        36: from /usr/local/lib/ruby/2.7.0/tsort.rb:431:in `each_strongly_connected_component_from'
        35: from /usr/local/lib/ruby/2.7.0/tsort.rb:422:in `block (2 levels) in each_strongly_connected_component_from'
        34: from /usr/local/lib/ruby/2.7.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
        33: from /usr/local/lib/ruby/2.7.0/tsort.rb:228:in `block in tsort_each'
        32: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/initializable.rb:61:in `block in run_initializers'
        31: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/initializable.rb:32:in `run'
        30: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/initializable.rb:32:in `instance_exec'
        29: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/engine.rb:624:in `block in <class:Engine>'
        28: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/engine.rb:624:in `each'
        27: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/engine.rb:625:in `block (2 levels) in <class:Engine>'
        26: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/engine.rb:665:in `load_config_initializer'
        25: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.5/lib/active_support/notifications.rb:182:in `instrument'
        24: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/engine.rb:666:in `block in load_config_initializer'
        23: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.5/lib/active_support/dependencies.rb:318:in `load'
        22: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.5/lib/active_support/dependencies.rb:291:in `load_dependency'
        21: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.5/lib/active_support/dependencies.rb:318:in `block in load'
        20: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.7.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:59:in `load'
        19: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.7.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:59:in `load'
        18: from /var/www/discourse/config/initializers/004-message_bus.rb:120:in `<main>'
        17: from /var/www/discourse/lib/site_setting_extension.rb:522:in `block in setup_methods'
        16: from /var/www/discourse/lib/site_setting_extension.rb:287:in `refresh!'
        15: from /var/www/discourse/lib/site_setting_extension.rb:287:in `synchronize'
        14: from /var/www/discourse/lib/site_setting_extension.rb:290:in `block in refresh!'
        13: from /var/www/discourse/lib/site_settings/defaults_provider.rb:29:in `db_all'
        12: from /var/www/discourse/lib/site_settings/db_provider.rb:16:in `all'
        11: from /var/www/discourse/lib/site_settings/db_provider.rb:61:in `table_exists?'
        10: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_handling.rb:189:in `connection'
         9: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_handling.rb:221:in `retrieve_connection'
         8: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:1119:in `retrieve_connection'
         7: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:437:in `connection'
         6: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:593:in `checkout'
         5: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:871:in `acquire_connection'
         4: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:910:in `try_to_checkout_new_connection'
         3: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:931:in `checkout_new_connection'
         2: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:887:in `new_connection'
         1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/postgresql_adapter.rb:33:in `postgresql_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/postgresql_adapter.rb:50:in `rescue in postgresql_connection': FATAL:  Peer authentication failed for user "discourse" (ActiveRecord::NoDatabaseError)

its works for me too

After following the above-mentioned steps to use discourse in a subfolder, now am getting a new error posted below :

Refused to apply style from '<URL>' because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.

Because of this error, the CSS files of the discourse are not loading and the page is blank. Can someone please help me with this?

Hi, my forum is installed on community.example.com now i want it to move on example.com/community (forum is already ruining) now i have added the env section and run section to yml , can someone answer my queries

  1. What will i add in $http_your_original_ip_header ?
  2. The old domain is community.example.com in DISCOURSE_HOSTNAME: do i have to change it ?
  3. What will be "proxy_pass http://discourse; " section in run
1 « J'aime »

Nothing, that should be copied as written.

That should also be copied as written

Yes, it should now be example.com

5 « J'aime »

After many rebuild it is working fine now , just small issue SSL is not working , Not using any ssl template how to get SSL working

1 « J'aime »

Did you set the LETSENCRYPT_ACCOUNT_EMAIL?

Also, if you have rebuilt more than five (?) times, you’ve got the rate limit and won’t be able to get a certificate for that domain name for a week.

3 « J'aime »

Mon expérience :

force https -> checked

J’ai également dû rediriger /assets vers subfolder/assets sinon cela renvoyait une erreur 404 pour les fichiers *.js.map

… et bien sûr $http_your_original_ip_header est censé être $proxy_add_x_forwarded_for par défaut.

4 « J'aime »

Bonjour,

Quelqu’un a-t-il essayé d’annuler la configuration de sous-dossier pour une instance Discourse en cours d’exécution ?

J’ai configuré une instance pour utiliser cette configuration, pour un sous-dossier comme /forum, et cela fonctionnait. Mais finalement, nous avons décidé d’utiliser l’option de sous-domaine, j’ai donc essayé d’annuler toutes les modifications, c’est-à-dire de supprimer la variable DISCOURSE_RELATIVE_URL_ROOT et la section run, et de taper celle par défaut :

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, re-commentez la ligne. Elle ne doit s'exécuter qu'une seule fois.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Fin des commandes personnalisées"

Et lorsque l’application est reconstruite, l’écran suivant s’affiche lorsque vous essayez d’accéder à l’URL (sans le /forum) :

Et si j’essaie d’aller sur /forum, l’écran suivant est rendu :

Je ne sais donc pas quelles autres modifications sont nécessaires pour que cela refonctionne.

Cordialement,
Miguel.

1 « J'aime »

Ce que j’aurais fait, c’est une sauvegarde et une restauration sur un nouveau serveur. Cela aurait laissé votre serveur existant fonctionner jusqu’à ce que vous ayez pu tester le nouveau. Et comme il est sur un nouveau sous-domaine, il aurait été beaucoup plus facile de procéder ainsi. Mais cela ne vous aide pas.

Avez-vous fait cette étape dans l’ordre inverse ?

Je pense que vous devrez faire

  RAILS_ENV=production bundle exec script/discourse remap '/forum/uploads' '/uploads'

mais cela n’explique pas l’erreur “Oops”. L’endroit où chercher sont les logs dans

 /var/discourse/shared/standalone/logs/var-log/nginx/

et

 /var/discourse/shared/standalone/logs/rails/production.log

J’ai tapé les deux, donc vous devrez peut-être ajuster les choses si je me suis trompé.

Heureux de vous aider autant que possible, mais si cela compte comme une urgence pour laquelle vous avez un budget, vous pouvez me contacter directement.

3 « J'aime »

comment activer les connexions sociales, je veux dire maintenant quelle sera l’URI de rappel autorisée

DISCOURSE_HOSTNAME: example.com
DISCOURSE_RELATIVE_URL_ROOT: /forum

sera-ce example.com ou forum.example.com ou example.com/forum (google et fb n’acceptent pas cette url)

1 « J'aime »

Selon Configuration de la connexion Facebook pour Discourse
L’URL de rappel est https://discourse.example.com/auth/facebook/callback pour un sous-dossier, ce serait https://discourse.example.com/forum/auth/facebook/callback

2 « J'aime »

L’application s’est bien déroulée, mais a ensuite échoué https://example.com/community/auth/failure?message=no_authorization_code&origin=https%3A%2F%2Fexample.com%2Fcommunity%2F&strategy=facebook#_=_.

Désolé, une erreur s’est produite lors de l’autorisation de votre compte. Veuillez réessayer.

Je suis presque sûr que cela signifie que vous avez correctement configuré la partie sous-dossier et que vous devez maintenant corriger la partie Facebook, ce qui est considérablement plus difficile.

1 « J'aime »