在阿里云服务器部署基于 PHP 后端和 UniApp(前端)的小程序,是一个非常经典且成熟的架构方案。
需要明确的是:UniApp 编译后的代码本质上是 H5、小程序原生包或 App 包。
- 如果你开发的是微信小程序/支付宝小程序:前端代码由微信/支付宝平台托管,你只需要部署 PHP 后端 API。
- 如果你开发的是H5 版本(通过浏览器访问):你需要将 UniApp 编译出的
dist目录上传到服务器进行托管。
以下是完整的部署流程指南:
第一步:准备阿里云环境
-
购买与配置
- 在阿里云控制台购买一台 ECS 云服务器(推荐 CentOS 7.9+ 或 Ubuntu 20.04+)。
- 安全组配置:务必开放以下端口,否则无法访问:
80(HTTP)443(HTTPS,如需启用加密)22(SSH 远程连接)3306(MySQL,仅允许内网或特定 IP,不建议直接对公网开放)
-
安装基础软件栈 (LNMP)
推荐使用宝塔面板(Baota)简化操作,或者手动安装。这里以宝塔面板为例(适合新手),若习惯命令行可参考下方的“手动安装”部分。- 宝塔面板安装命令 (以 CentOS 为例):
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec - 登录面板后,在“软件商店”一键安装:
- Nginx (Web 服务器)
- MySQL 5.7/8.0 (数据库)
- PHP (建议 7.4 或 8.1,视你的项目依赖而定)
- Redis (可选,用于缓存)
- 宝塔面板安装命令 (以 CentOS 为例):
第二步:部署 PHP 后端
假设你的 PHP 项目代码位于本地电脑,文件结构通常包含 index.php, config.php, vendor 等。
-
创建网站
- 在宝塔面板点击【网站】->【添加站点】。
- 输入域名(需先在阿里云 DNS 解析该域名指向你的服务器 IP)。
- 选择对应的 PHP 版本(如 PHP 8.1)。
- 勾选“创建数据库”,设置好用户名和密码。
-
上传代码
- 使用 FTP 工具(如 FileZilla)或宝塔的【文件】功能,将你的 PHP 后端代码上传到网站根目录(通常是
/www/wwwroot/你的域名/public或类似路径)。 - 注意:确保
.htaccess(Nginx 下为伪静态规则) 已正确配置。如果是 Laravel 框架,记得修改public目录下的路由入口。
- 使用 FTP 工具(如 FileZilla)或宝塔的【文件】功能,将你的 PHP 后端代码上传到网站根目录(通常是
-
配置数据库连接
- 修改项目中的数据库配置文件(如
.env或config/database.php)。 - 填入刚才创建的数据库名、用户名、密码。
- 主机地址:如果在同一台服务器,通常填
localhost或127.0.0.1;如果数据库分离,则填内网 IP。
- 修改项目中的数据库配置文件(如
-
运行迁移 (如有)
- 如果使用了 Laravel 等框架,需通过 SSH 进入服务器执行:
php artisan migrate --force php artisan config:cache
- 如果使用了 Laravel 等框架,需通过 SSH 进入服务器执行:
第三步:部署 UniApp 前端
根据你想运行的形态,分为两种情况:
情况 A:部署为 H5 网页版(用户通过浏览器访问)
-
本地打包
- 在本地 IDE(HBuilderX)中,选择“发行” -> “网站”。
- 选择 "H5" 类型,生成
dist文件夹。 - 这个文件夹里包含了
index.html,js,css,images等静态资源。
-
上传至服务器
- 将
dist文件夹内的所有文件上传到你在第二步创建的网站根目录中。 - 重要:确保
index.html是默认首页文件。
- 将
-
配置 Nginx 伪静态 (关键)
UniApp 生成的 H5 页面通常使用 Vue Router 的 History 模式,如果 Nginx 不配置,刷新页面会报 404。在宝塔面板【网站】->【配置文件】中,找到对应内容并修改:
location / { try_files $uri $uri/ /index.html; }(这行配置的意思是:如果找不到具体文件或目录,就重定向回 index.html,让前端路由接管)
-
修改接口地址
- 检查 UniApp 代码中的
request请求地址。 - 确保它指向的是生产环境的 PHP 服务器域名(例如
https://api.yourdomain.com),而不是本地的localhost。
- 检查 UniApp 代码中的
情况 B:部署为微信小程序(主流方式)
如果你的目标是发布微信小程序:
- 无需部署 UniApp 前端代码到阿里云。
- 前端代码在 HBuilderX 中点击“发行” -> “小程序” -> “微信开发者工具”或直接提交到微信后台。
- 微信会将前端代码托管在腾讯服务器上。
- 唯一需要做的是:确保你的 PHP 后端 API 已经成功部署在阿里云,并且小程序代码中的
baseUrl指向了阿里云的域名。
第四步:HTTPS 与安全加固(必须步骤)
现在的环境只能 HTTP 访问,但现代浏览器和微信小程序强制要求 HTTPS。
-
申请 SSL 证书
- 在阿里云控制台搜索“SSL 证书”,免费版(DV 型)通常够用。
- 下载证书文件(
.crt和.key)。
-
在宝塔/Nginx 配置 HTTPS
- 在宝塔面板【网站】->【SSL】,上传证书文件。
- 开启“强制 HTTPS"开关。
- 保存并重载 Nginx。
-
配置跨域 (CORS)
- 由于前端(H5)和后端(API)可能在不同域名下,需要在 PHP 后端响应头中允许跨域。
- 在 PHP 代码最开头添加:
header("Access-Control-Allow-Origin: *"); // 生产环境建议指定具体域名 header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); header("Access-Control-Allow-Headers: Content-Type, Authorization");
常见问题排查
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 502 Bad Gateway | Nginx 无法连接到 PHP-FPM | 检查 PHP 服务是否启动,查看 Nginx 错误日志 (/www/wwwlogs/error.log) |
| 404 Not Found | 路径错误或伪静态未配置 | 检查文件是否传到了正确的根目录;确认 Nginx 配置了 try_files |
| 数据库连接失败 | 密码错误或权限不足 | 检查 .env 配置;在 MySQL 中授权用户远程访问权限 |
| 小程序无法调用接口 | 域名未备案或未配 HTTPS | 微信小程序要求域名必须 ICP 备案且必须是 HTTPS |
| 图片加载不出来 | 路径相对/绝对错误 | 检查 CSS/JS 中的图片路径,建议使用绝对路径或动态拼接域名 |
总结建议
- 域名备案:在中国大陆使用阿里云服务器,域名必须在工信部完成 ICP 备案,否则 Nginx 会被拦截。
- 环境隔离:开发环境和生产环境尽量分开,不要直接在生产环境调试代码。
- 备份:定期在宝塔面板使用“备份”功能备份数据库和网站文件。
按照以上步骤操作,你就可以顺利在阿里云上跑起你的 PHP + UniApp 项目了。如果有具体的报错信息,欢迎继续提问!
CLOUD云枢