首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AWS证书管理器将Laravel部署到Amazon实例以处理EC2

使用AWS证书管理器将Laravel部署到Amazon实例以处理EC2
EN

Stack Overflow用户
提问于 2022-11-07 10:21:06
回答 1查看 62关注 0票数 0

我用Laravel /Websockets在本地主机+自签名证书上开发了一个实时聊天应用程序,在本地开发中使用SSL。到目前为止一切都很顺利。我将所有内容上传到测试服务器+ supervisord以同时运行队列和websockets:serve (自签名证书除外)。由于我们使用AWS证书管理器来设置SSL,所以在任何地方都没有私钥和证书的副本。因此,我无法在测试服务器上运行websockets。

下面是我的设置(非常基本)

/etc/httpd/con.d/project.conf

代码语言:javascript
复制
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/var/www/html/project/core/public"
<Directory "/var/www/html/project/core">
        Options Indexes FollowSymLinks Includes ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
        Require all granted
</Directory>
    ErrorLog "logs/project/errors.log"
    CustomLog "logs/project/access.log" common
</VirtualHost>

/etc/监督员f

代码语言:javascript
复制
[program:laravel-queue]
command=php /var/www/html/project/core/artisan queue:work --sleep=3 --tries=3
process_name=%(program_name)s
numprocs=1      
autostart=true  
autorestart=true  
startsecs=10    
startretries=3      
user=ec2-user
redirect_stderr=true      
stdout_logfile=/var/www/html/project/core/laravel-queue.log

[program:laravel-websockets]
command=php /var/www/html/project/core/artisan websockets:serve --host=127.0.0.1
process_name=%(program_name)s
numprocs=1      
autostart=true  
autorestart=true  
startsecs=10    
startretries=3      
user=ec2-user
redirect_stderr=true      
stdout_logfile=/var/www/html/project/core/laravel-websockets.log

broadcasting.php

代码语言:javascript
复制
'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'),
            'useTLS' => true,
            'encrypted' => true,
            'host' => '127.0.0.1',
            'port' => env('LARAVEL_WEBSOCKETS_PORT'),
            'scheme' => 'https',
            'curl_options' => [
                CURLOPT_SSL_VERIFYHOST => 0,
                CURLOPT_SSL_VERIFYPEER => 0,
            ],
        ],
    ],

websockets.php

代码语言:javascript
复制
'ssl' => [
    'local_cert' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT', null),
    'local_pk' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_PK', null),
    'passphrase' => env('LARAVEL_WEBSOCKETS_SSL_PASSPHRASE', null),

.env

代码语言:javascript
复制
PUSHER_APP_ID=12345 
PUSHER_APP_KEY=ABCDEFG 
PUSHER_APP_SECRET=HIJKLMNOP 
PUSHER_APP_CLUSTER=mt1

LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT= 
LARAVEL_WEBSOCKETS_SSL_LOCAL_PK= 
LARAVEL_WEBSOCKETS_SSL_PASSPHRASE="" 
LARAVEL_WEBSOCKETS_PORT=6001 
MIX_LARAVEL_WEBSOCKETS_PORT="${LARAVEL_WEBSOCKETS_PORT}"

回波初始化

代码语言:javascript
复制
const Echo = new initEcho({
    broadcaster: "pusher",
    key: process.env.MIX_PUSHER_APP_KEY,
    cluster: process.env.MIX_PUSHER_APP_CLUSTER,
    wsHost: window.location.hostname,
    wsPort: process.env.MIX_LARAVEL_WEBSOCKETS_PORT,
    wssPort: process.env.MIX_LARAVEL_WEBSOCKETS_PORT,
    forceTLS: true,
    encrypted: true,
    enabledTransports: ["ws", "wss"],
    auth: {
        headers: {
            Authorization:
                "Bearer " + access_token,
            Accept: "application/json",
        },
    },
});

Echo.connector.pusher.connection.strategy.transports.ws.transport.manager.livesLeft =
    Infinity;

Echo.connector.pusher.connection.strategy.transports.wss.transport.manager.livesLeft =
    Infinity;

Echo.connector.pusher.connection.bind("state_change", function (states) {
    // state change
});

const channel = Echo.join("chat-message")
    .here(() => {
        console.log("chat channel");
    })
    .joining((event) => {
        // console.log({ event }, "joining");
    })
    .leaving((event) => {
        // console.log({ event }, "leaving");
    })
    .listenForWhisper("typing", (event) => {
        // console.log({ event }, "listenForWhisper");
    })
    .listen(".chat-message", (event) => {
        // console.log({ event }, "listen");
    });

编辑

许多这样的Q&A提到了一些关于设置应用程序负载平衡器、SSL终端等的内容(不太了解这一点),因此我们尝试基于这个aws文档进行以下操作,并将443更改为6001 (ws端口号),并将协议更改为httphttps。还是同样的问题。

更新我们也尝试做此aws添加HTTPS侦听器。还是一样,听不到端口。

我对aws及其服务的了解非常有限(我不是设置AWS ec2和ACM的人),所以如果解决方案在AWS中,请尽可能简单地教我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-17 05:15:48

在将近两周后,我就能完成代码了。使用此设置,您不再需要在.env文件中添加私钥和证书。

broadcasting.php

代码语言:javascript
复制
'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'),
        'useTLS' => true,
        #### ADD HERE
        'encrypted' => false,
        'host' => '127.0.0.1',
        'port' => env('LARAVEL_WEBSOCKETS_PORT'),
        'scheme' => 'http',
        ### ADD HERE
    ],
],

bootstrap.js

代码语言:javascript
复制
const Echo = new Echo({
    broadcaster: "pusher",
    key: process.env.MIX_PUSHER_APP_KEY,
    cluster: process.env.MIX_PUSHER_APP_CLUSTER,
    wsHost: window.location.hostname,
    // This is important
    wsPort: 80,
    wssPort: 443,
    forceTLS: true,
    encrypted: true,
    enabledTransports: ["ws", "wss"],
    // This is important

    // optional if you are using jwt
    auth: {
        headers: {
            Authorization:
                "Bearer " + access_token,
            Accept: "application/json",
        },
    },
    // optional if you are using jwt
});


// Socket will try to reconnect indefinetly with this. If not added, echo will only try to reconnect twice as default
Echo.connector.pusher.connection.strategy.transports.ws.transport.manager.livesLeft =
    Infinity;

Echo.connector.pusher.connection.strategy.transports.wss.transport.manager.livesLeft =
    Infinity;
// Socket will try to reconnect indefinetly with this. If not added, echo will only try to reconnect twice as default

如果使用的是Custom WebSocket Handlers,则使用此Apache代理通行证。

代码语言:javascript
复制
ProxyRequests off
ProxyVia on
RewriteEngine On

RewriteEngine On
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://127.0.0.1:6001/$1 [P,L]

ProxyPass               /ws/chat http://127.0.0.1:6001/ws/chat
ProxyPassReverse        /ws/chat http://127.0.0.1:6001/ws/chat
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74345042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档