微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在 AWS Elastic Beanstalk 中部署 Laravel Websocket

如何解决无法在 AWS Elastic Beanstalk 中部署 Laravel Websocket

我有一个部署在 AWS elastic beanstalk 上的小型 Laravel 应用程序。我的前端使用 Laravel WebSocket 通过 BeyondCode 库与后端连接。

我已经在 localhost 中测试了所有内容,一切正常,但不适用于 Elastic Beanstalk 部署。

我的本​​地和服务器都使用 APP_MODE=localAPP_DEBUG=True,以便我可以使用 Laravel WebSocket Admin 测试所有内容

这是我对 config/broadcasting.PHP 的配置

 <?PHP

return [

    /*
    |--------------------------------------------------------------------------
    | Default broadcaster
    |--------------------------------------------------------------------------
    |
    | This option controls the default broadcaster that will be used by the
    | framework when an event needs to be broadcast. You may set this to
    | any of the connections defined in the "connections" array below.
    |
    | Supported: "pusher","redis","log","null"
    |
    */

    'default' => env('broADCAST_DRIVER','null'),/*
    |--------------------------------------------------------------------------
    | broadcast Connections
    |--------------------------------------------------------------------------
    |
    | Here you may define all of the broadcast connections that will be used
    | to broadcast events to other systems or over websockets. Samples of
    | each available type of connection are provided inside this array.
    |
    */

    'connections' => [

        'pusher' => [
            'driver' => 'pusher','key' => env('PUSHER_APP_KEY'),'secret' => env('PUSHER_APP_SECRET'),'app_id' => env('PUSHER_APP_ID'),'options' => [
                'cluster' => env('PUSHER_APP_CLUSTER'),'encrypted' => false,'host' => 'backend.example.com','port' => 6001,'scheme' => 'http'
            ],],'redis' => [
            'driver' => 'redis','connection' => 'default','log' => [
            'driver' => 'log','null' => [
            'driver' => 'null',];

config/websocket.PHP

<?PHP

use BeyondCode\LaravelWebSockets\Dashboard\Http\Middleware\Authorize;

return [

    /*
     * Set a custom dashboard configuration
     */
    'dashboard' => [
        'port' => env('LaraVEL_WEBSOCKETS_PORT',6001),/*
     * This package comes with multi tenancy out of the Box. Here you can
     * configure the different apps that can use the webSockets server.
     *
     * Optionally you specify capacity so you can limit the maximum
     * concurrent connections for a specific app.
     *
     * Optionally you can disable client events so clients cannot send
     * messages to each other via the webSockets.
     */
    'apps' => [
        [
            'id' => env('PUSHER_APP_ID'),'name' => env('APP_NAME'),'path' => env('PUSHER_APP_PATH'),'capacity' => null,'enable_client_messages' => true,'enable_statistics' => true,/*
     * This class is responsible for finding the apps. The default provider
     * will use the apps defined in this config file.
     *
     * You can create a custom provider by implementing the
     * `AppProvider` interface.
     */
    'app_provider' => BeyondCode\LaravelWebSockets\Apps\ConfigAppProvider::class,/*
     * This array contains the hosts of which you want to allow incoming requests.
     * Leave this empty if you want to accept requests from all hosts.
     */
    'allowed_origins' => [
        //
    ],/*
     * The maximum request size in kilobytes that is allowed for an incoming WebSocket request.
     */
    'max_request_size_in_kb' => 250,/*
     * This path will be used to register the necessary routes for the package.
     */
    'path' => 'admin/websocket',/*
     * Dashboard Routes Middleware
     *
     * These middleware will be assigned to every dashboard route,giving you
     * the chance to add your own middleware to this list or change any of
     * the existing middleware. Or,you can simply stick with this list.
     */
    'middleware' => [
        'web',Authorize::class,'statistics' => [
        /*
         * This model will be used to store the statistics of the WebSocketsServer.
         * The only requirement is that the model should extend
         * `WebSocketsstatisticsEntry` provided by this package.
         */
        'model' => \BeyondCode\LaravelWebSockets\Statistics\Models\WebSocketsstatisticsEntry::class,/**
         * The Statistics Logger will,by default,handle the incoming statistics,store them
         * and then release them into the database on each interval defined below.
         */
        'logger' => BeyondCode\LaravelWebSockets\Statistics\Logger\HttpStatisticslogger::class,/*
         * Here you can specify the interval in seconds at which statistics should be logged.
         */
        'interval_in_seconds' => 60,/*
         * When the clean-command is executed,all recorded statistics older than
         * the number of days specified here will be deleted.
         */
        'delete_statistics_older_than_days' => 60,/*
         * Use an DNS resolver to make the requests to the statistics logger
         * default is to resolve everything to 127.0.0.1.
         */
        'perform_dns_lookup' => false,/*
     * Define the optional SSL context for your WebSocket connections.
     * You can see all available options at: http://PHP.net/manual/en/context.ssl.PHP
     */
    'ssl' => [
        /*
         * Path to local certificate file on filesystem. It must be a PEM encoded file which
         * contains your certificate and private key. It can optionally contain the
         * certificate chain of issuers. The private key also may be contained
         * in a separate file specified by local_pk.
         */
        'local_cert' => env('LaraVEL_WEBSOCKETS_SSL_LOCAL_CERT',null),/*
         * Path to local private key file on filesystem in case of separate files for
         * certificate (local_cert) and private key.
         */
        'local_pk' => env('LaraVEL_WEBSOCKETS_SSL_LOCAL_PK',/*
         * Passphrase for your local_cert file.
         */
        'passphrase' => env('LaraVEL_WEBSOCKETS_SSL_PAsspHRASE',/*
     * Channel Manager
     * This class handles how channel persistence is handled.
     * By default,persistence is stored in an array by the running webserver.
     * The only requirement is that the class should implement
     * `ChannelManager` interface provided by this package.
     */
    'channel_manager' => \BeyondCode\LaravelWebSockets\WebSockets\Channels\ChannelManagers\ArrayChannelManager::class,];

我正在使用 command: 'nohup PHP artisan websocket:serve > websocket.out 2> websocket.err < /dev/null &' 来服务 websocket。

负载平衡器配置中,我添加一个名为 WebSocket 的新进程,它使用端口 6001,并在端口 6001 添加一个侦听器。

现在,当我访问 admin/websocket 页面并单击 connect 时,它给了我一个控制台错误

pusher.min.js:8 WebSocket connection to 'ws://backend.example.com:6001/app/wskey?protocol=7&client=js&version=4.3.1&flash=false' Failed: Error during WebSocket handshake: Unexpected response code: 502

我试图从库文档中找到解决方案,但他们没有太多关于部署的内容,更不用说 Elastic Beanstalk。

我不知道我错过了什么并把我的头发扯掉。任何帮助都非常感谢。

注意:我不知道在哪里检查 websocket.out 或 websocket.err 文件。 :\

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。