宝塔面板安装Swoole扩展后需构建Docker镜像并部署至Kubernetes:先在宝塔中安装Swoole、重启PHP验证,再打包PHP运行时、编写Dockerfile构建镜像,最后通过Deployment和Service实现WebSocket服务的高可用编排。

在宝塔面板中安装Swoole扩展后,需将其纳入Kubernetes容器编排体系,实现高可用WebSocket服务的滚动更新与自动扩缩容,而非仅停留在单机PHP环境运行。
宝塔面板内完成Swoole扩展安装
登录宝塔面板 → 进入「软件商店」→ 在「已安装」列表中找到PHP 8.0(或你实际使用的版本)→ 点击右侧「设置」→ 切换至「安装扩展」选项卡 → 搜索框输入swoole → 若显示“Swoole4”或“Swoole5”,直接点击「安装」。
安装完成后,必须点击「重启PHP」按钮,不能点「重载配置」;重载不会加载新扩展,导致后续验证失败。
验证是否生效:在终端执行 /www/server/php/80/bin/php --ri swoole,看到输出含 extension => enabled 和版本号即成功。
导出可复用的PHP运行时镜像
这一步是打通宝塔与K8s的关键——把宝塔里跑通的PHP+Swoole环境固化为Docker镜像。
进入宝塔服务器终端,执行:cd /www/server/php/80 → tar -czf php80-swoole-runtime.tgz bin/php bin/phpize lib/php/extensions/ etc/php.ini
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
新建Dockerfile:
FROM php:8.0-cli-alpine<br>
COPY php80-swoole-runtime.tgz /tmp/<br>
RUN tar -xzf /tmp/php80-swoole-runtime.tgz -C /usr/local/ && \<br>
cp /usr/local/etc/php.ini /usr/local/etc/php/conf.d/swoole.ini && \<br>
echo "extension=swoole.so" >> /usr/local/etc/php/conf.d/swoole.ini
构建并推送镜像:docker build -t your-registry.com/your-app/php80-swoole:20260806 . → docker push your-registry.com/your-app/php80-swoole:20260806
K8s部署Swoole WebSocket服务
准备Deployment资源清单,启用协程与心跳保活:
apiVersion: apps/v1<br>
kind: Deployment<br>
metadata:<br>
name: swoole-ws-server<br>
spec:<br>
replicas: 3<br>
selector:<br>
matchLabels:<br>
app: swoole-ws-server<br>
template:<br>
metadata:<br>
labels:<br>
app: swoole-ws-server<br>
spec:<br>
containers:<br>
- name: ws<br>
image: your-registry.com/your-app/php80-swoole:20260806<br>
command: ["/bin/sh", "-c"]<br>
args:<br>
- "php /app/server.php && tail -f /dev/null"<br>
ports:<br>
- containerPort: 9502<br>
livenessProbe:<br>
tcpSocket:<br>
port: 9502<br>
initialDelaySeconds: 30<br>
periodSeconds: 60<br>
resources:<br>
requests:<br>
memory: "256Mi"<br>
cpu: "250m"<br>
limits:<br>
memory: "512Mi"<br>
cpu: "500m"
创建Service暴露端口:
apiVersion: v1<br>
kind: Service<br>
metadata:<br>
name: swoole-ws-service<br>
spec:<br>
selector:<br>
app: swoole-ws-server<br>
ports:<br>
- protocol: TCP<br>
port: 9502<br>
targetPort: 9502<br>
type: ClusterIP
执行部署:kubectl apply -f swoole-deployment.yaml → kubectl apply -f swoole-service.yaml
检查Pod状态:kubectl get pods -l app=swoole-ws-server,所有Pod必须处于Running状态且READY为1/1。

















