如何在 CPanel/External 虚拟主机中初始化 PHP websocket 服务?

How to initialize a PHP websocket service in CPanel/External web host?

我开发了一个网络应用程序,可以实时显示不同用户执行的某些操作的信息。为此,我在本地环境 (WAMP) 中使用内置于 PHP 的 websockets 并且工作正常,但我需要它也可以在外部服务器(网络托管服务)上工作,我只能通过访问CPanel 和 FTP.

在本地,我通过 Windows' CMD:

让 websocket 执行下一行代码
C:\wamp64\bin\php\php7.2.10\php.exe -q C:\wamp64\www\myapp\websocket_daemon.php

我的问题是,如何在 CPanel 中获得相同的结果,或者是否有其他方法?

共享托管环境(即具有 VirtualHost 配置的 Apache、PHP、MySQL 和 CPanel 界面)不太可能支持您的 websocket 应用程序。

要使 websocket 正常工作,您需要:

  • 有一个专用于 websocket 入站连接的端口;或
  • 有一个 HTTP/HTTPS 服务器知道何时升级连接和代理传递到您的 websocket 应用程序。

要运行你自己的websocket服务,你应该考虑使用虚拟专用服务器服务,例如Amazon EC2,DigitalOcean VPS。

为此,您需要拥有对所涉及的 (Linux) 服务器的 CLI(命令行界面)访问权限。假设您有这样的访问权限,运行宁 WS 服务看起来像

./websocket_daemon.php

小脚本假定您位于适当的文件夹中。但是,在到达那里之前,您需要解决一些问题:

第 1 步:在您的计算机上支持 SSH

您需要确保您的 OS 支持 SSH。您的 OS 似乎是 Windows,因此您需要安装 Putty 或 Git Bash。了解这些技术

步骤 2 生成 SSH 密钥

在您的 CPanel 中,您需要生成 SSH 密钥:

  • 点击管理 SSH 密钥
  • 点击生成新密钥
  • 使用您喜欢的设置来生成密钥,别担心,您可以随时删除 SSH 密钥,如果您发现您更喜欢以不同的方式生成它们,则可以重新创建它们

在此处阅读更多内容:https://docs.cpanel.net/cpanel/security/ssh-access/

SSH密钥是复合密钥,即由一个私钥和一个public密钥组成。您可以与任何人共享您的 public 密钥,但永远不要将您的私钥发送给任何人。它应该在您的计算机上并且可能保存到备份中。在此处阅读有关 SSH 密钥的更多信息:https://sectigo.com/resource-library/what-is-an-ssh-key

第 3 步:确保您的计算机使用您为 CPanel 生成的 SSH 密钥

您需要告诉您的 OS SSH 密钥对的位置,幸运的是这不是一个新问题,请在此处查看有关此主题的详尽讨论:https://serverfault.com/questions/194567/how-do-i-tell-git-for-windows-where-to-find-my-private-rsa-key

第 4 步:测试您的 SSH

运行 在支持 SSH 的 CLI 中输入以下命令:

ssh <username>@path

如果没有错误,那么你已经成功地测试了 SSH,你几乎准备好继续下一步了

第 5 步:上传您的 Websocket 脚本

如您所知,您可以通过 FTP 执行此操作,但您也可以通过 SCP 执行此操作。 scp 不仅会使用您新创建的 SSH 连接并从中获得乐趣,而且它也是安全的。语法:

scp file.txt remote_username@10.10.0.2:/remote/directory

第 6 步:SSH 到服务器

参见步骤 #4。

第 7 步:导航到文件的位置

第 8 步:确保您有权 运行 它

在此处查看更多内容:https://alligator.io/workflow/command-line-basics-file-permissions/

第 9 步::执行文件

运行

./websocket_daemon.php

如果成功,则工作基本完成,您将需要一些脚本来 运行 它在启动时对其进行管理,但这与问题并不严格相关。

https://oracle-base.com/articles/linux/linux-scripts-running-in-the-background https://smallbusiness.chron.com/run-command-startup-linux-27796.html

但是,如果问题尚未解决,请继续阅读

第 10 步:确保服务器支持 WS

您将需要设置自己的 WS 支持。由于您已经在 Windows 本地成功地做到了这一点,希望您的专业知识也能在远程 Linux 上发挥作用。如果没有,请在此处阅读更多内容:

PHP Websocket server in Linux hosting