在生产环境中部署 Workerman 时,需要注意多个方面:从基本的服务器部署、反向代理、负载均衡,到进程管理、安全配置和性能监控。通过适当的工具(如 Nginx、Supervisor 和 SSL 配置),可以确保 Workerman 应用在高并发环境下稳定运行。同时,通过监控和性能调优,确保应用能够高效应对不断变化的流量需求。
1. 部署 Workerman
(1) 如何将 Workerman 部署到生产环境
在生产环境中部署 Workerman,首先需要将应用代码上传到服务器,并确保所有依赖项已经安装。以下是部署的基本步骤:
- 上传代码与依赖
将您的 Workerman 应用代码上传到生产服务器上。建议使用 Git、SFTP 或其他方法进行代码同步。 安装所需的 PHP 扩展和 Composer 依赖:
# 安装 PHP 相关依赖
sudo apt-get install php php-cli php-mbstring php-curl php-xml
# 安装 Composer
curl -sS https://getcomposer.org/installer | php
# 安装 Workerman
php composer.phar require workerman/workerman
- 设置权限
确保上传的文件具有适当的权限,以避免权限问题导致服务无法启动。
chmod -R 755 /path/to/workerman
(2) 配置反向代理与负载均衡
在生产环境中,通常需要使用反向代理来分发流量,负载均衡可以将请求均匀分配到多个 Workerman 进程或服务器上。常用的反向代理工具有 Nginx 和 HAProxy。
- Nginx 反向代理配置
假设 Workerman 在本地的 8080 端口上运行,您可以配置 Nginx 将外部请求转发到 Workerman:
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
- 负载均衡
如果使用多台服务器或多个 Workerman 进程,可以通过 Nginx 或 HAProxy 设置负载均衡,确保流量均匀分配。 例如,使用 Nginx 实现负载均衡:
upstream workerman_backend {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://workerman_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
(3) 使用 Supervisor 管理 Workerman 进程
在生产环境中,使用进程管理工具来管理 Workerman 进程至关重要,Supervisor
是一种常见的进程管理工具,能够帮助我们自动启动、停止、重启 Workerman 服务。
- 安装 Supervisor
sudo apt-get install supervisor
- 配置 Supervisor 管理 Workerman 创建 Supervisor 配置文件:
[program:workerman]
command=php /path/to/your/workerman/start.php start
autostart=true
autorestart=true
stderr_logfile=/path/to/workerman.err.log
stdout_logfile=/path/to/workerman.out.log
这会确保 Workerman 在服务器启动时自动启动,并且如果进程崩溃,会自动重启。
启动 Supervisor 服务:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start workerman
2. SSL/TLS 加密
(1) 配置 SSL 支持,如何使 Workerman 支持 HTTPS
为了确保数据传输的安全性,生产环境中的 Web 应用通常需要使用 HTTPS 进行加密。Workerman 支持 SSL/TLS 加密,您只需提供 SSL 证书和私钥即可配置。
- 创建 SSL 证书 如果没有购买 SSL 证书,可以使用
openssl
创建自签名证书(不适用于生产环境,只用于测试)。
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr
openssl x509 -req -in server.csr -signkey server.key -out server.crt
- 配置 Workerman 使用 SSL 在 Workerman 的
start.php
文件中,启用 SSL 支持:
use Workerman\Worker;
use Workerman\Lib\Timer;
$worker = new Worker("https://0.0.0.0:8080");
$worker->transport = 'ssl'; // 使用 SSL 加密
$worker->ssl_cert_file = '/path/to/server.crt'; // 证书文件
$worker->ssl_key_file = '/path/to/server.key'; // 私钥文件
$worker->onMessage = function($connection, $data) {
$connection->send('Hello, secure world!');
};
Worker::runAll();
(2) 使用 SSL/TLS 加密通信
通过启用 SSL/TLS,加密数据流不仅能防止数据被窃取,还可以有效防止中间人攻击。配置 SSL 后,客户端和服务器之间的数据传输会自动使用加密连接。
3. 性能监控
(1) 使用工具监控 Workerman 的运行状态
为了确保 Workerman 在生产环境中运行良好,监控是必不可少的。您可以使用一些性能监控工具,如 top
、htop
、iotop
等来查看服务器的资源消耗情况。对于 Workerman,您也可以使用以下方法:
- Workerman 内置的状态查看
Workerman 提供了status
命令,可以实时查看进程状态、连接数、CPU 和内存使用情况。
php start.php status
- 集成第三方监控工具
可以使用 Prometheus、Grafana 等工具来监控 Workerman 的性能。通过 Prometheus 收集 Workerman 的指标数据,再通过 Grafana 进行可视化展示。
(2) 调整配置以应对更高的并发
根据监控数据的反馈,您可以根据需要调整 Workerman 的配置,以提高并发处理能力。例如,增加进程数或调整内存使用设置:
- 增加进程数
增加进程数可以提高并发处理能力,但也需要考虑服务器的硬件资源。
$worker->count = 16; // 增加进程数
- 使用共享内存
为了减少内存使用,您可以使用 Workerman 提供的共享内存功能来缓存数据,减少每个进程的内存消耗。
$worker->shm->put('key', 'value'); // 使用共享内存存储数据