Fehler beim Upgrade: Der Nginx-Outlet "before-server" fehlt... discourse_docker ist nicht mit der gewählten Discourse-Version kompatibel

Ich habe einen Discourse-Server, für den ./launcher rebuild app Folgendes ergibt:

FEHLGESCHLAGEN
--------------------
Pups::ExecError: grep -q 'outlets/before-server' /etc/nginx/conf.d/discourse.conf || ( 
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									The "before-server" Nginx outlet is missing. This version of discourse_docker is not compatible with the chosen Discourse version.```
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/exec_command.rb:131:in `spawn'
exec failed with the params {"cmd"=["cp $home/config/nginx.sample.conf /etc/nginx/conf.d/discourse.conf", "rm /etc/nginx/sites-enabled/default", "mkdir -p /var/nginx/cache", "grep -q 'outlets/before-server' /etc/nginx/conf.d/discourse.conf || ( 

Ich habe versucht, die Codebasis von docker_manager auf die Version vor dem letzten Commit vom 10. Juli 2025 zurückzusetzen:

su - discourse
cd /var/discourse/
./launcher enter app
su - discourse
cd /var/www/discourse/plugins/docker_manager
git checkout d91016c
exit
exit
./launcher rebuild app

Aber das hat keinen Unterschied gemacht.

Ich habe gerade problemlos einen Rebuild durchgeführt. Gibt es neben den von Ihnen aufgeführten Fehlern noch weitere? Was meldet free -h?

Es ist kein Speicherplatzproblem:

df -h
Dateisystem      Größe  Benutzt Verfügbar Benutzung% Eingehängt auf
tmpfs           588M  1.1M  587M   1% /run
/dev/sda2       118G   79G   34G  71% /
tmpfs           2.9G     0  2.9G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           588M   12K  588M   1% /run/user/1001

Der Server hat keinen Swap, aber er hat 6 GB RAM:

free -h
               gesamt     benutzt     frei gemeinsam Puffer/Cache verfügbar
Mem:           5.7Gi       793Mi       1.2Gi       1.0Mi       4.1Gi       5.0Gi
Auslagerungsspeicher:             0B          0B          0B

Glauben Sie, dass eine Swap-Platte benötigt wird?

Nachfolgend finden Sie den Inhalt der Nginx-Konfiguration (/etc/nginx/conf.d/discourse.conf) im Container. Es gab keinen Verweis auf outlets/before-server:

# Zusätzliche MIME-Typen, die nginx verarbeiten soll, gehören hier hinein
types {
    text/csv csv;
}

upstream discourse { server 127.0.0.1:3000; }

proxy_cache_path /var/nginx/cache keys_zone=one:10m max_size=200m;

# siehe: https://meta.discourse.org/t/x/74060
proxy_buffer_size 8k;

# Wenn Sie Puma verwenden möchten, verwenden Sie diese:
#
# upstream discourse {
#   server unix:/var/www/discourse/tmp/sockets/puma.sock;
# }


# Versuchen Sie, das Protokoll beizubehalten, muss im http-Kontext stehen
map $http_x_forwarded_proto $thescheme {
  default $scheme;
  https https;
}

log_format log_discourse '[$time_local] \"$http_host\" $remote_addr \"$request\" \"$http_user_agent\" \"$sent_http_x_discourse_route\" $status $bytes_sent \"$http_referer\" $upstream_response_time $request_time \"$sent_http_x_discourse_username\"';

limit_req_zone $binary_remote_addr zone=flood:10m rate=12r/s;
limit_req_zone $binary_remote_addr zone=bot:10m rate=200r/m;
limit_req_status 429;
limit_conn_zone $binary_remote_addr zone=connperip:10m;
limit_conn_status 429;
server {
  listen 80;
  return 301 https://discourse.example.org$request_uri;
}
server {


  access_log /var/log/nginx/access.log log_discourse;

  listen 443 ssl;
http2 on;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;

ssl_certificate /shared/ssl/discourse.example.org.cer;
ssl_certificate /shared/ssl/discourse.example.org_ecc.cer;

ssl_certificate_key /shared/ssl/discourse.example.org.key;
      proxy_ignore_headers "Set-Cookie";
      proxy_hide_header "Set-Cookie";

      proxy_cache one;
      proxy_cache_key $uri;
      proxy_cache_valid 200 7d;
      proxy_cache_valid 404 1m;
      proxy_set_header Connection "";

      proxy_pass https://avatars.discourse.org/;
      break;
    }

    # Wir benötigen Puffern aus für die Nachrichtenwarteschlange
    location /message-bus/ {
      proxy_set_header X-Request-Start "t=${msec}";
      proxy_set_header Host $http_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 $thescheme;
      proxy_http_version 1.1;
      proxy_buffering off;
      proxy_pass http://discourse;
      break;
    }

    # Dies bedeutet, dass jede Datei in public zuerst versucht wird
    try_files $uri @discourse;
  }

  location /downloads/ {
    internal;
    alias $public/;
  }

  location @discourse {
add_header Strict-Transport-Security 'max-age=31536000'; # Zertifikat für ein Jahr merken und automatisch zu HTTPS für diese Domain verbinden

  limit_conn connperip 20;
  limit_req zone=flood burst=12 nodelay;
  limit_req zone=bot burst=100 nodelay;
    add_header Referrer-Policy 'no-referrer-when-downgrade';
    proxy_set_header Host $http_host;
    proxy_set_header X-Request-Start "t=${msec}";
    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 $thescheme;
    proxy_pass http://discourse;
  }

}

Ich habe vim und dos2unix installiert und die Dateien bearbeitet, um die Zeile hinzuzufügen:

include conf.d/outlets/before-server/*.conf;

Und ich habe Nginx gestoppt und gestartet und dann den Container verlassen und ./launcher rebuild app erneut ausgeführt, aber derselbe Fehler wurde zurückgegeben:

FAILED
--------------------
Pups::ExecError: grep -q 'outlets/before-server' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'The "before-server" Nginx outlet is missing. This version of discourse_docker is not compatible with the chosen Discourse version.' ; exit 1 ) failed with return #<Process::Status: pid 300 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/exec_command.rb:131:in `spawn'
exec failed with the params {"cmd"=>["cp $home/config/nginx.sample.conf /etc/nginx/conf.d/discourse.conf", "rm /etc/nginx/sites-enabled/default", "mkdir -p /var/nginx/cache", "grep -q 'outlets/before-server' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'The \\\"before-server\\\" Nginx outlet is missing. This version of discourse_docker is not compatible with the chosen Discourse version.' ; exit 1 )", "grep -q 'outlets/server' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'The \\\"server\\\" Nginx outlet is missing. This version of discourse_docker is not compatible with the chosen Discourse version.' ; exit 1 )", "grep -q 'outlets/discourse' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'The \\\"discourse\\\" Nginx outlet is missing. This version of discourse_docker is not compatible with the chosen Discourse version.' ; exit 1 )", "mkdir -p /etc/nginx/conf.d/outlets/before-server", "touch /etc/nginx/conf.d/outlets/before-server/20-redirect-http-to-https.conf", "touch /etc/nginx/conf.d/outlets/before-server/30-ratelimited.conf", "mkdir -p /etc/nginx/conf.d/outlets/server", "touch /etc/nginx/conf.d/outlets/server/10-http.conf", "touch /etc/nginx/conf.d/outlets/server/20-https.conf", "touch /etc/nginx/conf.d/outlets/server/30-offline-page.conf", "mkdir -p /etc/nginx/conf.d/outlets/discourse", "touch /etc/nginx/conf.d/outlets/discourse/20-https.conf", "touch /etc/nginx/conf.d/outlets/discourse/30-ratelimited.conf"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
b18ed0cbde3a34dfe76ea066657ece16c5a063ff18627d4a7e4b9787268917c0

Ich habe den Container neu gestartet (./launcher start app), um dies zu überprüfen:

grep -q 'outlets/before-server' /etc/nginx/conf.d/discourse.conf
echo $?
0

Ich verstehe also nicht, warum es fehlschlägt, wenn die Nginx-Einbindung vorhanden ist?

Es gibt viele Unterschiede zwischen /var/www/discourse/config/nginx.sample.conf und /etc/nginx/conf.d/discourse.conf — sollte ich versuchen, die Datei durch die Beispieldatei zu ersetzen und sie zu bearbeiten, um den Domainnamen zu aktualisieren?

Update

Zuvor erlaubte die Discourse-Weboberfläche keine Updates, sie sagte, Updates müssten über die CLI erfolgen, aber jetzt erlaubt sie sie (warum ist das so?), also habe ich discourse_docker über die Weboberfläche aktualisiert:

Und auch discourse:

Dieses Problem ist also gelöst, aber was, wenn überhaupt, ich getan habe, um es zu lösen, ist ein Rätsel… :woman_shrugging:

Ich habe das Problem eingekreist – es wurde durch das discourse-images-guardian Plugin von @mbcahyono verursacht, das eine Aktualisierung der Datei nginx.sample.conf erforderte. Ich habe dies getan und eine Pull-Anfrage zur Behebung erstellt.

Zusammengeführt! Danke für den PR.

Ich hatte keine Gelegenheit, ihn zu testen, daher vertraue ich dir bei diesem :slight_smile:

1 „Gefällt mir“

Danke @mbcahyono Ich habe einige grundlegende Tests durchgeführt und es scheint zu funktionieren…! Dies ist jedoch dieses Problem — das Überschreiben der Website-Bild-URLs funktioniert nicht mehr, irgendwelche Ideen, wie man das beheben kann?

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