jacked-php/jacked-server

基于 OpenSwoole 的服务器


README

概述

Jacked Server 是一个支持 HTTP 和 WebSocket 的 Web 服务器。Jacked Server 使用 PHP/OpenSwoole 构建。它不仅采用了传统的 OpenSwoole 服务器方法,还支持 FastCGI(PHP-FPM)!这使得它可以为尚未准备好使用 Reactor 架构 的 PHP 应用程序提供更可靠的性能。

快速开始

运行以下命令以准备我们将要服务的示例 Laravel(请注意,您必须安装所有依赖项才能运行 Laravel)

composer create-project --prefer-dist laravel/laravel /var/www/laravel
php artisan migrate
npm install
npm run dev

让我们将 Laravel 应用程序 Jacked!首先,下载 Jacked Server 可执行文件并运行它

wget https://github.com/Jacked-PHP/jacked-server/releases/download/v1.0.3-beta/jackit.phar
sudo chmod +x jackit.phar
./jackit.phar /path/to/laravel/public

注意:您可能需要能够与 php-fpm 交互。这可能涉及以 root 或 www-data(sudo -u www-data ./jackit /path/to/laravel/public)用户身份运行,并从 www-data 用户可访问的目录(/var/www)。

现在您可以通过地址 https://:8080 访问 Laravel 应用程序。

安装

安装 composer 包

git clone https://github.com/Jacked-PHP/jacked-server.git

.env.example 复制到 .env

cp .env.example .env

导航到该文件夹并运行它

./jackit

这将指向本地 .env,位于 Jacked 服务器根目录(示例服务器在终端中显示的地址处简单地显示一个 Hello world,通常在地址 https://:8080)。

您可以根据需要在此处自定义 .env,或创建另一个并使用 --config 选项设置其路径。

例如,要执行此服务器,服务于 Laravel 应用程序,可以将服务器指向 Laravel 目录或指向一个配置文件,该文件执行此操作。配置是选项 --config=

# point to the laravel directory
./jackit /path/to/laravel/public
# with the option:
/jackit --config=/var/www/.env-pointing-to-laravel

参数

请查看 .env.example 文件以获取启动信息,但以下将找到可以在 .env 文件中设置的参数列表

  • JACKED_SERVER_INPUT_FILE: 服务器入口点。例如:/var/www/project/index.php
  • JACKED_SERVER_DOCUMENT_ROOT: 服务器文档根目录。例如:/var/www/project
  • JACKED_SERVER_LOG_PATH: 日志文件的路径。例如:/var/www/project/logs/jacked-server.log
  • JACKED_SERVER_LOG_LEVEL: 服务器日志级别。例如:100(DEBUG)
  • JACKED_SERVER_FASTCGI_HOST: FastCGI 主机。例如:unix:///run/php/php8.3-fpm.sock(如果是 Unix 套接字)或 127.0.0.1(如果是 TCP 套接字)。
  • JACKED_SERVER_FASTCGI_PORT: FastCGI 端口。例如:9000(如果是 TCP 套接字)或 -1(如果是 Unix 套接字)。
  • JACKED_SERVER_WEBSOCKET_ENABLED: 启用 WebSocket。如果启用,将使用 Socket Conveyor 来路由 WebSocket 请求。
  • JACKED_SERVER_HOST: 服务器主机。例如:0.0.0.0
  • JACKED_SERVER_PORT: 服务器端口。例如:8080
  • JACKED_SERVER_SERVER_TYPE: 服务器类型。例如:2OpenSwoole\Server::SIMPLE_MODE - 1 - 或 OpenSwoole\Server::POOL_MODE - 2 -)。
  • JACKED_SERVER_TIMEOUT: 服务器超时。例如:60
  • JACKED_SERVER_READWRITE_TIMEOUT: 服务器读写超时。例如:60
  • JACKED_SERVER_SSL_PORT: 服务器 SSL 端口。例如:443
  • JACKED_SERVER_SSL_ENABLED: 启用 SSL。接受 truefalse
  • JACKED_SERVER_SSL_CERT_FILE: SSL 证书文件。例如:/path/to/ssl-cert
  • JACKED_SERVER_SSL_KEY_FILE: SSL密钥文件。例如:/path/to/ssl-key
  • JACKED_SERVER_REACTOR_NUM: 反应器数量。例如:4
  • JACKED_SERVER_WORKER_NUM: 工作进程数量。例如:4
  • JACKED_SERVER_STATIC_ENABLED: 启用静态处理器。例如:true
  • JACKED_SERVER_STATIC_LOCATIONS: 静态处理器位置。例如:/imgs,/css,/js,/build
  • JACKED_SERVER_PID_FILE: 服务器PID文件。例如:/var/www/project/jacked-server.pid
  • JACKED_SERVER_AUDIT_ENABLED: 启用审计。例如:false
  • JACKED_SERVER_WEBSOCKET_AUTH: 启用WebSocket授权。例如:false
  • JACKED_SERVER_WEBSOCKET_SECRET: WebSocket密钥。例如:my-super-secret
  • JACKED_SERVER_WEBSOCKET_TOKEN: WebSocket令牌。例如:my-token(如果启用了授权,则为一些困难的哈希)。
  • JACKED_SERVER_WEBSOCKET_USE_ACKNOWLEDGMENT: 启用WebSocket确认。例如:false。请参阅Socket Conveyor文档获取更多信息。
  • JACKED_SERVER_REQUEST_INTERCEPTED_URIS: Jacked服务器将拦截的URI。例如:/api/v1/intercepted,/api/v1/intercepted2
  • JACKED_SERVER_PERSISTENCE_DRIVER: 持久化驱动程序。例如:sqlite - 目前仅支持sqlite作为持久化。
  • JACKED_SERVER_PERSISTENCE_SQLITE_DATABASE: SQLite数据库。例如::memory:

事件

服务器在其生命周期中触发多个事件

  • JackedServerStarted: 服务器启动时触发。

  • JackedRequestReceived: 收到新的请求时触发。

  • JackedRequestError: 处理请求时出现错误时触发。

  • JackedRequestFinished: 请求处理完成后触发。

WebSocket

如前所述,此服务器自带WebSocket,由Socket Conveyor路由。要启用它,将以下设置添加到您的.env文件

JACKED_SERVER_WEBSOCKET_ENABLED=true

设置后,您可以在Conveyor文档中找到如何与WebSocket服务器交互的坐标。

WebSocket授权

要授权WebSocket服务器,您首先需要获取一个令牌。这通过向端点/broadcasting/auth发送HTTP POST请求来完成。您的请求必须使用Bearer令牌(以下头部:Auhtorization: Bearer {token here})进行授权。此Bearer令牌在.env中的JACKED_SERVER_WEBSOCKET_TOKEN设置。您必须在请求体中选择通道。请求体的格式如下

{
    "channel_name": "test-channel"
}

此请求体将定义此连接有权连接到哪些通道。

服务器将返回一个包含auth键的JSON对象。响应中的auth键的令牌是您用于连接WebSocket服务器的令牌。

响应中auth键的令牌是JWT令牌。此令牌用于认证WebSocket连接。令牌在连接WebSocket服务器时作为查询参数token发送。例如:ws://127.0.0.1?token=your-token-here