You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony7生产环境Docker部署Mercure发送更新失败返回404求助

解决AWS EC2生产环境Mercure发布失败的问题

1. 修正Mercure地址配置(.env文件)

生产环境无域名、无SSL,仅通过EC2公网IP访问,因此需替换默认的https://example.com为实际HTTP地址:

###> symfony/mercure-bundle ###
MERCURE_URL=http://<你的EC2公网IP>:8001/.well-known/mercure
MERCURE_PUBLIC_URL=http://<你的EC2公网IP>:8001/.well-known/mercure
MERCURE_JWT_SECRET="!ChangeThisMercureHubJWTSecretKey!"
###< symfony/mercure-bundle ###

提示:<你的EC2公网IP>替换为服务器实际公网IP,端口8001可根据需求调整,需避免与Apache的80端口冲突。

2. 调整Docker Compose配置

修改compose.override.yaml,明确映射Mercure容器端口到宿主机:

version: '3'

services:
###> symfony/mercure-bundle ###
  mercure:
    ports:
      - "8001:80"
###< symfony/mercure-bundle ###

更新docker-compose.yaml,适配生产环境的CORS和Caddy配置:

services:
###> symfony/mercure-bundle ###
  mercure:
    image: dunglas/mercure
    restart: unless-stopped
    environment:
      SERVER_NAME: ':80'
      MERCURE_PUBLISHER_JWT_KEY: '!ChangeThisMercureHubJWTSecretKey!'
      MERCURE_SUBSCRIBER_JWT_KEY: '!ChangeThisMercureHubJWTSecretKey!'
      MERCURE_EXTRA_DIRECTIVES: |
        cors_origins http://<你的EC2公网IP>
        auto_https off
    # 使用生产环境Caddy配置,禁用开发模式
    command: /usr/bin/caddy run --config /etc/caddy/Caddyfile
    volumes:
      - mercure_data:/data
      - mercure_config:/config
###< symfony/mercure-bundle ###

volumes:
###> symfony/mercure-bundle ###
  mercure_data:
  mercure_config:
###< symfony/mercure-bundle ###

3. 配置Apache反向代理

修改/etc/apache2/sites-available/taxis-chrono.conf,添加反向代理规则转发Mercure请求:

<VirtualHost *:80>
    ServerName localhost

    # 启用代理模块(未启用则先执行a2enmod proxy proxy_http)
    ProxyPass "/.well-known/mercure" "http://127.0.0.1:8001/.well-known/mercure"
    ProxyPassReverse "/.well-known/mercure" "http://127.0.0.1:8001/.well-known/mercure"

    # 启用PHP-FPM(根据实际配置调整,此处为TCP示例)
    <FilesMatch \.php$>
        SetHandler proxy:fcgi://127.0.0.1:9000
    </FilesMatch>

    DocumentRoot /var/www/taxis-chrono/public
    <Directory /var/www/taxis-chrono/public>
        AllowOverride None
        Require all granted
        FallbackResource /index.php
    </Directory>

    ErrorLog /var/log/apache2/taxis-chrono_error.log
    CustomLog /var/log/apache2/taxis-chrono_access.log combined
</VirtualHost>

若未启用Apache代理模块,先执行以下命令:

sudo a2enmod proxy proxy_http
sudo systemctl restart apache2

4. 重启服务并验证

  1. 重启Mercure容器:
docker-compose down
docker-compose up -d
  1. 重启Apache服务:
sudo systemctl restart apache2
  1. 验证Mercure Hub可用性:
curl http://<你的EC2公网IP>/.well-known/mercure

返回Mercure Hub相关响应则表示配置生效。

排查要点

  • 确认EC2安全组开放80端口和Mercure映射的8001端口入站规则
  • 查看Mercure容器日志排查启动错误:docker-compose logs mercure
  • 确保.env与docker-compose.yaml中的JWT密钥完全一致

内容的提问来源于stack exchange,提问作者Louis Bingana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 08:50:37