kyrnewebsocket

集成的Pusher替代品。

安装数: 1,301

依赖项: 1

建议者: 0

安全性: 0

星标: 12

关注者: 1

分支: 5

开放问题: 12

语言:C

类型:flarum扩展

3.3.0 2021-08-22 07:26 UTC

README

关于

Websockets是flarum/pusher的替代品,它是一个本地托管版本,功能完全相同。对于大型论坛,Pusher可能非常昂贵,并且如果必须遵守GDPR,可能会造成严重问题。此WebSocket实现完全基于PHP,无需安装额外的软件或工具。

扩展兼容性

目前,WebSocket支持以下扩展:

  • fof/reactions
  • fof/gamification
  • fof/polls
  • 您所享受的正常Pusher行为(新帖子、讨论和通知)

安装

请遵循Extiverse的安装说明,见此处:https://extiverse.com/premium/subscriptions

设置

设置此扩展有几个选项,首先,请确保它在您的论坛上已安装,但请不要立即启用它,我们还有一些准备工作要做。如果您遇到任何问题,或者需要有人引导您完成安装步骤,请毫不犹豫地通过Discord @Kyrne#9728联系我,我将很乐意帮助!我还在下面包括了故障排除部分,其中包含了一些常见问题的解决方案。再次提醒,如果您有任何需要帮助的问题,请随时联系我。

选项1 - 带SSL的代理(推荐)

使用此设置选项,我们将使用Nginx将WebSocket请求代理到WebSocket服务器。

步骤1

找到您的Nginx服务器配置文件,通常位于此处:/etc/nginx/sites-enabled/{your_site}。

注意:如果您通过2个Nginx实例双向代理连接,请使用最下游(第一个)实例。

步骤2

在您喜欢的编辑器(nano、vim等)中打开步骤1中的服务器块,现在它应该看起来像这样

server {
        root /var/www/flarum/public;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name your.domain;

        include /var/www/flarum/.nginx.conf;

        error_page 404 = @notfound;

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
		}


    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/your.domain/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/your.domain/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

server {
    if ($host = your.domain) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    server_name your.domain;

    listen 80;
    return 404; # managed by Certbot
}

步骤3

在SSL服务器块内部添加以下内容

  # Your default configuration comes here...

	location /app {
	    proxy_pass             http://127.0.0.1:2083;
	    proxy_read_timeout     60;
	    proxy_connect_timeout  60;
	    proxy_redirect         off;

	    # Allow the use of websockets
	    proxy_http_version 1.1;
	    proxy_set_header Upgrade $http_upgrade;
	    proxy_set_header Connection 'upgrade';
	    proxy_set_header Host $host;
	    proxy_cache_bypass $http_upgrade;
	}

您现在可以保存并关闭此文件。这些配置将告诉Nginx有关您的WebSocket服务器以及如何向它发送请求。

我们现在完成了Nginx配置!最困难的部分已经过去了!

步骤4

完成所有上述步骤后,您现在可以启用扩展。启用后,将出现设置,请确保开启“反向代理支持”开关,其他保持不变。然后保存您的设置。

步骤5

您现在可以启用WebSocket服务器!请跳转到该部分。

选项2 - WebSocket服务器处理SSL

对于此方法,您需要知道您的域(或WebSocket服务器将要托管在该域上)的全链式SSL证书的位置以及相同域的私钥。花点时间找到这些文件,并将路径抄下来。如果您不知道这些文件在哪里,请查看您的Nginx或Apache配置文件,它们通常包含在这些文件中。如果您使用letsencrypt,它们通常可以在/etc/letsencrypt/live/your.domain文件夹中找到。

注意:这些文件还必须可以被您的Web服务器(通常为www-data)读取。

步骤1 - 端口转发

由于您不会使用您的Web服务器来路由流量,您需要打开一个端口,以便您的网站访客可以连接到WebSocket服务器。如果您在DigitalOcean等VPS上运行服务器,只需执行一条命令来打开端口即可。对于Ubuntu,运行sudo ufw allow {端口}。如果您在自己的家中或通过您控制的路由器运行服务器,请确保该端口指向您的Web服务器。您可以在互联网上查找有关如何为特定路由器转发端口的指南。

注意:默认端口为2083

如果您使用Cloudflare,请注意,在基本计划中,只有某些端口可以通过他们的网络。这些端口是

  • 2053
  • 2083
  • 2087
  • 2096
  • 8443

如果您决定将端口更改为除2083之外的其他端口,请确保在管理员面板的扩展设置中指定。

步骤 2 - SSL证书和私钥

现在请在管理员面板中启用此扩展。一旦出现设置,填写SSL证书(本地证书)和私钥(本地私钥)的路径。如果您的证书是自签名的,请确保开启标有“自签名证书支持”的开关。如果您的密钥由密码加密,请在设置中相应的字段中输入它。然后保存您的设置。

步骤 3 - 完成

您的设置应该已完成,现在您可以开启WebSocket服务器了!跳转到该部分。

选项 3 - 不安全的WebSocket服务器

请谨慎使用此方法。此方法仅适用于(并且仅可能用于)不使用https的论坛。理想情况下,您的论坛应该使用https,因为您正在处理敏感用户数据,例如密码。如果您必须使用此方法,它是最简单的设置方式。您只需安装它,然后按照选项#2中的步骤1进行操作。然后运行WebSocket服务器。

启动WebSocket服务器

启动服务器是最简单的部分,只需导航到您的Flarum根目录并运行php flarum websocket:serve。服务器将占用终端会话,这并不是理想的。如果您想将进程守护化,请查阅如何使用nohup或类似的方法。

注意:我建议在守护化之前先测试您的设置。

验证成功的设置

一旦您完成了所有安装步骤并且您的WebSocket服务器正在运行,此时一切应该正常工作。然而,我建议您验证一切是否正常工作。这最容易通过开启调试模式来实现。一旦开启调试模式,打开浏览器开发者工具并导航到控制台,然后刷新页面。如果一切正常,您应该看到类似以下输出:

["State changed","initialized -> connecting"]
["Connecting",{"transport":"ws","url":"wss://your.domain:port/app/ekYx3xmU5ECWzglOnF9u83iHS6ztClH1
?protocol=7&client=js&version=5.1.1&flash=false"}]
["State changed","connecting -> connected with new socket ID 696199201.622665801"]
["Event sent",{"event":"pusher:subscribe","data":{"auth":"","channel":"public"}}]
["Event recd",{"event":"pusher_internal:subscription_succeeded","channel":"public"}]
["No callbacks on public for pusher:subscription_succeeded"]

如果您看到此输出,客户端工作正常,让我们测试后端。

在启动WebSocket服务器后,您将能够看到所有建立的连接和发送的事件。您需要做的是在论坛上发一篇新帖,并查看WebSocket服务器的控制台输出。一旦该帖创建,您应该看到控制台输出中类似以下内容:

Connection id 213252186.960942107 sending message {"channel":"public","event":"newPost","data":"{\"postId\":158,\"discussionId\":43,\"tagIds\":[1]}"}

如果您的客户端和服务器看起来与这些类似,恭喜!一切工作正常,您已全部完成!

如果您看到错误或其他输出,请转到故障排除部分。

故障排除

遗憾的是,这个扩展非常复杂,设置过程中可能存在许多问题。每个服务器和设置都是不同的,可能会带来新的独特挑战。正如我之前所说,如果您遇到自己无法解决的问题,或者需要有人帮助您解决,请随时在Discord上联系我 @Kyrne#9728

"无法监听tcp://0.0.0.0:{端口号}"

这通常意味着您尝试用于WebSocket服务器的端口号已被您机器上的其他进程占用。只需在扩展设置中更改您要使用的端口号即可。别忘了在上述步骤中(例如,Nginx代理转发端口)更新使用此端口号所做的任何配置。

"ERR_SSL版本或加密不匹配"

此错误通常是由于SSL证书和私钥不匹配或用于错误的域名造成的。如果您没有使用完整的证书链,也可能发生此错误。请确保私钥和证书路径正确,并且适用于正确的域名,并且您使用了完整的证书链。

"WebSocket在建立连接之前已关闭。"

WebSocket服务器无法使用双重代理。请确保将请求转发到WebSocket服务器的Nginx实例是最下游的(最接近用户的)。同时,确保WebSocket服务器正在运行且在正确的端口。

404错误或“ERROR:在页面加载过程中,连接到{地址}被中断”

如果您使用代理设置,请确保Nginx正在将连接代理到正确的端口号以及IP(127.0.0.1对应同一设备)。如果您使用端口转发方法,请确保端口已打开。在运行Web服务器时,使用类似开放端口检查器的工具来查看端口是否已打开。如果没有,请仔细检查您的端口转发设置,或者尝试使用不同的端口。

426、400或任何500错误

这些问题可能更复杂,并且在不同设置中其原因各不相同。请通过Discord @Kyrne#9728联系我,我将帮助您解决具体问题。

结语

非常感谢您通过订阅支持我的扩展开发工作。如果您希望在未来看到任何功能,请与我联系,我将尽力使您的请求成为现实。

照顾好自己,亲爱的Flarum爱好者!