阿里云单台ECS部署Hyperf需确保环境适配、Swoole可靠编译安装及systemd托管服务稳定运行,推荐Alibaba Cloud Linux 3系统,PHP 8.4 + Swoole 6.0源码编译,通过rsync上传项目、www用户权限隔离、Nginx反向代理与健康检查保障生产可用性。

阿里云单台ECS部署Hyperf,核心是环境适配 + Swoole可靠安装 + 服务稳定运行,不是简单跑起来就行,得兼顾生产可用性。下面按真实上线节奏分步说明,不绕弯、不堆概念。
一、ECS基础准备:选型与系统初始化
选CentOS 7.9或Alibaba Cloud Linux 3(推荐),避免Ubuntu因PHP源版本滞后导致Swoole编译失败。轻量应用服务器够用,但正式业务建议ECS通用型实例(如ecs.g7.large),2核4G起,带宽至少3M。
- 登录控制台开通实例后,立即配置安全组:放行22(SSH)、80/443(Web)、9501(Hyperf默认HTTP端口)
- 首次SSH登录后,更新系统并关闭SELinux:
yum update -y && setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config - 禁用firewalld(若启用):
systemctl stop firewalld && systemctl disable firewalld,避免与安全组规则冲突
二、PHP与Swoole安装:必须编译,别信一键包
阿里云ECS默认无Swoole,且yum/dnf装的php-swoole扩展常版本不匹配(尤其PHP 8.2+)。实测稳定路径是:用Remi源装高版本PHP,再源码编译Swoole 6.0+。
- 启用Remi源:
yum install epel-release -y && yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm -y - 安装PHP 8.4:
yum --enablerepo=remi-8.4 install php php-cli php-devel php-pdo php-mbstring php-curl php-gd php-xml php-zip -y - 下载编译Swoole:
wget https://github.com/swoole/swoole-src/archive/v6.0.0.tar.gz<br> tar xzf v6.0.0.tar.gz && cd swoole-src-6.0.0<br> /opt/remi/php84/root/bin/phpize<br> ./configure --enable-openssl --with-php-config=/opt/remi/php84/root/bin/php-config<br> make && make install
- 启用扩展:
echo "extension=swoole.so" > /etc/opt/remi/php84/php.d/40-swoole.ini,然后php -m | grep swoole确认输出
三、部署Hyperf项目:从骨架到服务化
不推荐在ECS上直接composer create-project(网络慢、易中断),建议本地拉取骨架→打包→上传→解压。
- 本地执行:
composer create-project hyperf/hyperf-skeleton myapp --ignore-platform-reqs - 删掉dev依赖:
composer install --no-dev --optimize-autoloader - 用
rsync传到ECS:rsync -avz --progress myapp/ root@your-ecs-ip:/var/www/myapp/ - 设置权限:
chown -R www:www /var/www/myapp && chmod -R 755 /var/www/myapp(提前建好www用户) - 启动服务:
cd /var/www/myapp && php bin/hyperf.php start,验证curl http://localhost:9501返回欢迎页
四、服务守护与线上保障
手动运行会随终端退出而终止,必须用systemd托管,并加健康检查。
- 新建服务文件:
/etc/systemd/system/hyperf.service,内容如下:
[Unit] Description=Hyperf Service After=network.target [Service] Type=simple User=www WorkingDirectory=/var/www/myapp ExecStart=/opt/remi/php84/root/bin/php bin/hyperf.php start Restart=always RestartSec=3 StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target
- 启用并启动:
systemctl daemon-reload && systemctl enable hyperf && systemctl start hyperf - 反向代理给Nginx(可选但推荐):
在/etc/nginx/conf.d/myapp.conf中添加:location / { proxy_pass http://127.0.0.1:9501; proxy_set_header Host $host; }
然后nginx -t && systemctl reload nginx - 查看状态:
systemctl status hyperf或journalctl -u hyperf -f


















