Mercure Hub kann unter Debian 11 mit Supervisord nicht gestartet werden, außerhalb des Docker-Image

Mercure Hub kann unter Debian 11 mit Supervisord nicht gestartet werden, außerhalb des Docker-Image

Ich versuche, Mercure Hub vom Supervisor aus auszuführen, aber das ist mir nicht möglich. Mercure befindet sich auf derselben Maschine wie der Webserver mit dem SSL-Virtualhost für pami54.localdie Domäne.

[program:mercure]
environment=JWT_KEY="m3rcu353cr37pa55pra53DEV"; CORS_ALLOWED_ORIGINS="https://pami54.local"; PUBLISH_ALLOWED_ORIGINS="*"; ADDR="pami54.local:3000"
command=/home/frizquierdo/mercureLinux/mercure run -config /home/frizquierdo/mercureLinux/Caddyfile
process_name=%(program_name)s_$(process_num)s
numprocs=1
autostart=true
#directory=/tmp
autorestart=true
startsecs=5
startretries=10
redirect_stderr=false
stdout_capture_maxbytes=1MB
stderr_capture_maxbytes=1MB
stdout_logfile=/var/log/supervisor/mercureout.log
stderr_logfile=/var/log/supervisor/mercureerror.log

BEARBEITEN:

Ich habe eine Teillösung gefunden. Im Caddyfile habe ich den Caddy-Server auf Port 80 deaktiviert, indem ich die auto_https-Direktive auf „disable_redirects“ gesetzt habe, und das Caddyfile so beibehalten habe:

# Learn how to configure the Mercure.rocks Hub on https://mercure.rocks/docs/hub/config
{
   {$GLOBAL_OPTIONS}
   auto_https disable_redirects
}

pami54.local:3000

log

tls /etc/apache2/ssl-cert/pami54.local.crt /etc/apache2/ssl-cert/pami54.local.key

route {
    encode zstd gzip

    mercure {
        # Transport to use (default to Bolt)
        transport_url {$MERCURE_TRANSPORT_URL:bolt://mercure.db}
        # Publisher JWT key
        publisher_jwt {env.MERCURE_PUBLISHER_JWT_KEY} {env.MERCURE_PUBLISHER_JWT_ALG}
        # Subscriber JWT key
        subscriber_jwt {env.MERCURE_SUBSCRIBER_JWT_KEY} {env.MERCURE_SUBSCRIBER_JWT_ALG}
        # Extra directives
        cors_origins https://pami54.local
        publish_origins *
        {$MERCURE_EXTRA_DIRECTIVES}
    }

    respond /healthz 200

    respond "Not Found" 404
}

Seine Virtualhost-Konfiguration:

<IfModule mod_ssl.c>
 #SSLStaplingCache "shmcb:${SRVROOT}/logs/ssl_stapling(32768)"
 <VirtualHost *:443>
   ServerName pami54.local
   ServerAlias wwww.pami54.local

   DocumentRoot "/var/www/html/pami54.local/public"
   DirectoryIndex index.php

   <Directory "/var/www/html/pami54.local/public/">
    AllowOverride All
    Order Allow,Deny
    Allow from All
    #Require local
    Require all granted

    <IfModule mod_rewrite.c>
            Options -MultiViews
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ index.php [QSA,L]
    </IfModule>
   </Directory>

   SSLEngine on
   SSLProtocol all -SSLv3 -SSLv2
   SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
   SSLCertificateFile "/etc/apache2/ssl-cert/pami54.local.crt"
   SSLCertificateKeyFile "/etc/apache2/ssl-cert/pami54.local.key"
   SSLUseStapling off

   <FilesMatch "\.(cgi|shtml|pl|asp|php)$">
    SSLOptions +StdEnvVars
   </FilesMatch>

   BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0

   SSLProxyEngine On
   ProxyRequests Off
   ProxyPreserveHost On
   #ProxyPass '/.well-known/mercure' 'https://pami54.local:3000/.well-known/mercure' connectiontimeout=300 timeout=300
   ProxyPass '/.well-known/mercure' 'https://pami54.local:3000/.well-known/mercure'
   ProxyPassReverse '/.well-known/mercure' 'https://pami54.local:3000/.well-known/mercure'
 </VirtualHost>
</IfModule>

Auf diese Weise können die Clients eine Verbindung zu Mercure herstellen. https://pami54.local/.well-known/mercureSelbst wenn die Verbindung getrennt wird, stellt der Client die Verbindung zum Hub erfolgreich wieder her. Wenn der Server (Webanwendung) jedoch versucht, eine Benachrichtigung auf dem Hub zu veröffentlichen, tritt ein Symfony-HTTP-Client-Protokollfehler auf:

[2022-04-27T19:29:40.857698-04:00] http_client.INFO: Request: "POST https://pami54.local/.well-known/mercure" [] []
[2022-04-27T19:29:40.871491-04:00] messenger.WARNING: Error thrown while handling message App\Message\NotificacionMarcarComoLeidaMessage. Sending for retry #1 using 1000 ms delay. Error: "Handling "App\Message\NotificacionMarcarComoLeidaMessage" failed: Failed to send an update." {"message":{"App\\Message\\NotificacionMarcarComoLeidaMessage":[]},"class":"App\\Message\\NotificacionMarcarComoLeidaMessage","retryCount":1,"delay":1000,"error":"Handling \"App\\Message\\NotificacionMarcarComoLeidaMessage\" failed: Failed to send an update.","exception":"[object] (Symfony\\Component\\Messenger\\Exception\\HandlerFailedException(code: 0): Handling \"App\\Message\\NotificacionMarcarComoLeidaMessage\" failed: Failed to send an update. at /var/www/html/pami54.local/vendor/symfony/messenger/Middleware/HandleMessageMiddleware.php:129)\n[previous exception] [object] (Symfony\\Component\\Mercure\\Exception\\RuntimeException(code: 0): Failed to send an update. at /var/www/html/pami54.local/vendor/symfony/mercure/src/Hub.php:104)\n[previous exception] [object] (Symfony\\Component\\HttpClient\\Exception\\TransportException(code: 0): The request was not processed and can be safely retried at /var/www/html/pami54.local/vendor/symfony/http-client/Response/CommonResponseTrait.php:148)\n[previous exception] [object] (Symfony\\Component\\HttpClient\\Exception\\TransportException(code: 0): The request was not processed and can be safely retried at /var/www/html/pami54.local/vendor/symfony/http-client/Chunk/ErrorChunk.php:65)\n[previous exception] [object] (Amp\\Http\\Client\\Connection\\UnprocessedRequestException(code: 0): The request was not processed and can be safely retried at /var/www/html/pami54.local/vendor/amphp/http-client/src/Connection/DefaultConnectionFactory.php:117)\n[previous exception] [object] (Amp\\Http\\Client\\SocketException(code: 0): Connection to 'pami54.local:443' failed at /var/www/html/pami54.local/vendor/amphp/http-client/src/Connection/DefaultConnectionFactory.php:118)\n[previous exception] [object] (Amp\\Socket\\ConnectException(code: 111): Connection to tcp://pami54.local:443 refused at /var/www/html/pami54.local/vendor/amphp/socket/src/DnsConnector.php:108)"} []

Was bedeutet dieser Fehler, der die Symfony HTTP CLIENT-Komponente auslöst? Ich dachte, ich hätte das Problem gelöst. Zumindest stellen die Clients eine Verbindung zum Hub her und stellen sie wieder her. Jetzt besteht das Problem, wenn die Webanwendung versucht, auf dem Mercure-Hub zu veröffentlichen.

/etc/hostname.confIch muss sagen, dass meine lokale Umgebung keinen DNS-Server hat, alles läuft mit dem lokalen virtuellen Host und den in der virtuellen Debian-Maschine deklarierten Domänennamen :

#/etc/hostname.conf     
debiandev
pami54.local

Antwort1

Ich habe eine Lösung. In der Caddy-Datei habe ich den Caddy-Server auf Port 80 deaktiviert, indem ich einen anderen Port zugewiesen habe, z. B. 8081, und die auto_httpsDirektive auf „disable_redirects“ gesetzt habe Caddyfile. Dabei bin ich folgendermaßen geblieben:

# Learn how to configure the Mercure.rocks Hub on https://mercure.rocks/docs/hub/config
{
   {$GLOBAL_OPTIONS}
   http_port 8081
   auto_https disable_redirects
}

pami54.local:3000

log

tls /etc/apache2/ssl-cert/pami54.local.crt /etc/apache2/ssl-cert/pami54.local.key

route {
    encode zstd gzip

    mercure {
        # Transport to use (default to Bolt)
        transport_url {$MERCURE_TRANSPORT_URL:bolt://mercure.db}
        # Publisher JWT key
        publisher_jwt {env.MERCURE_PUBLISHER_JWT_KEY} {env.MERCURE_PUBLISHER_JWT_ALG}
        # Subscriber JWT key
        subscriber_jwt {env.MERCURE_SUBSCRIBER_JWT_KEY} {env.MERCURE_SUBSCRIBER_JWT_ALG}
        # Extra directives
        cors_origins https://pami54.local
        publish_origins *
        {$MERCURE_EXTRA_DIRECTIVES}
    }

    respond /healthz 200

    respond "Not Found" 404
}

Jetzt können die Clients eine Verbindung zum Hub herstellen, aber die Webanwendung kann nicht darauf veröffentlichen.

Ich habe den Beitrag aktualisiert.

verwandte Informationen