0

我使用 NGINX、PHP、PostgreSQL、Node、Mercure 和 Symfony 制作了简单的基于 docker 的应用程序,只是为了测试 Mercure 的功能。问题是我没有从 Symfony 发布者服务获得任何更新,日志中没有错误,Symfony 分析器中没有错误,CORS 工作正常。通过mercure ui发送更新工作得很好。

我正在使用最新的 dunglas/mercure 图像以及 PHP 7.4 和 Symfony 5.2.2

我的码头工人撰写文件:

version: '3'

networks:
    backend:

services:

    # nginx
    nginx-service:
        image: nginx:stable-alpine
        container_name: nginx-container
        ports:
            - "8080:80"
        volumes:
            - ./app:/var/www/project
            - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
        depends_on:
            - php74-service
            - postgres11-service
        networks:
            - backend

    # php
    php74-service:
        build:
            context: .
            dockerfile: ./php/Dockerfile
        container_name: php74-container
        ports:
            - "9000:9000"
        volumes:
            - ./app:/var/www/project
        networks:
            - backend

    #postgres
    postgres11-service:
        image: postgres:11-alpine
        container_name: postgres11-container
        ports:
            - "5432:5432"
        volumes:
            - ./postgres:/var/libpostgresql/data
        restart: always
        environment:
            POSTGRES_USER: main
            POSTGRES_PASSWORD: secret
        networks:
            - backend

    # node
    node-service:
        image: node:latest
        container_name: node-container
        volumes:
            - ./app:/var/www/project
        working_dir: /var/www/project
        networks:
            - backend

    # mercure
    mercure:
        image: dunglas/mercure:latest
        volumes:
            - ./Caddyfile:/etc/caddy/Caddyfile
        container_name: mercure-container
        ports:
            - 9090:80
        networks:
            - backend

我的 Caddyfile 配置

{
    # Debug mode (disable it in production!)
    debug
    # HTTP/3 support
    experimental_http3
}

# The address of your server
localhost:80

# enable logs
log

route {
    # redirect to ui
    redir / /.well-known/mercure/ui/

    mercure {
        demo
        # Publisher JWT key
        publisher_jwt !ChangeMe!
        # Subscriber JWT key
        subscriber_jwt !ChangeMe!
        cors_origins http://localhost:8080
        publish_origins http://localhost:8080
        anonymous
    }

    respond "Not Found" 404
}

我的 .env mercure 配置:(带有 !ChangeMe! 键的默认令牌)

MERCURE_PUBLISH_URL=http://mercure/.well-known/mercure
MERCURE_JWT_TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXJjdXJlIjp7InB1Ymxpc2giOltdfX0.Oo0yg7y4yMa1vr_bziltxuTCqb8JVHKxp-f_FwwOim0

Symfony 功能:

public function push(PublisherInterface $publisher): Response
{
    $update = new Update(
        'test',
        json_encode(['status' => 'new update'])
    );

    // The Publisher service is an invokable object
    $publisher($update);

    return new Response('published!');
}
4

0 回答 0