スーパーバイザーから Mercure ハブを実行しようとしていますが、実行できません。Mercure は、pami54.local
ドメインの SSL 仮想ホストを持つ Web サーバーと同じマシンにあります。
[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
編集:
部分的な解決策を見つけました。Caddyfile で、ポート 80 の Caddy サーバーを非アクティブ化し、auto_https ディレクティブを 'disable_redirects' に設定して、Caddyfile を次のように維持しました。
# 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
}
仮想ホストの設定:
<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>
この方法では、クライアントは Mercure に接続できますがhttps://pami54.local/.well-known/mercure
、切断が発生してもクライアントはハブに正常に再接続しますが、サーバー (Web アプリケーション) がハブに通知を公開しようとすると、symfony http クライアントのログにエラーが記録されます。
[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)"} []
symfony HTTP CLIENT コンポーネントをスローしているこのエラーは、何を意味するのでしょうか? 問題は解決したと思っていました。少なくともクライアントはハブに接続して再接続しますが、問題は Web アプリケーションが Mercure ハブに公開しようとするときです。
私のローカル環境には DNS サーバーが存在せず、すべては/etc/hostname.conf
Debian 仮想マシンで宣言されたローカル仮想ホストとドメイン名で行われていることを言わなければなりません。
#/etc/hostname.conf
debiandev
pami54.local
答え1
解決策があります。Caddyfile で、ポート 80 の Caddy サーバーを非アクティブ化し、他のポート (たとえば 8081) を割り当て、auto_https
ディレクティブを 'disable_redirects' に設定して、Caddyfile
次のようにします。
# 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
}
現在、クライアントはハブに接続できますが、Web アプリケーションはハブ上で公開できません。
投稿を更新しました。