在阿里云服务器部署基于 PHP 后端 + UniApp 前端(小程序) 的项目,是一个经典且成熟的架构方案。
需要明确的是:UniApp 编译后的代码是运行在微信/支付宝等客户端上的,不需要部署在服务器上。 你真正需要部署在阿里云服务器上的,是 UniApp 编译生成的 H5 或 App 包(用于预览或混合开发) 以及 PHP 后端 API。
以下是完整的部署流程和关键注意事项:
第一步:环境准备与网络配置
-
购买并配置云服务器 (ECS)
- 选择操作系统:推荐 CentOS 7.9+ 或 Ubuntu 20.04/22.04 LTS。
- 配置建议:根据项目并发量,入门级推荐 2 核 4G 起步。
- 安全组设置(至关重要):
- 放行 80 (HTTP) 和 443 (HTTPS) 端口。
- 如果本地调试,可能需要临时开放 SSH (22) 端口,生产环境建议限制 IP。
- 注意:不要直接开放数据库端口(如 MySQL 的 3306),应仅允许应用服务器访问或通过内网访问。
-
域名与 SSL 证书
- 购买并备案一个域名(国内服务器必须备案)。
- 将域名解析到 ECS 的公网 IP。
- 申请 SSL 证书:小程序接口调用强制要求 HTTPS。可以在阿里云控制台免费申请 Let’s Encrypt 或付费证书,并下载
.crt和.key文件备用。
第二步:安装运行环境 (LNMP 架构)
你需要搭建 Linux + Nginx + MySQL + PHP 环境。推荐使用宝塔面板简化操作,或者手动安装。
方案 A:使用宝塔面板 (推荐新手)
- 在阿里云 ECS 安装宝塔面板脚本。
- 登录宝塔后台,创建网站,选择 Nginx 伪静态模式。
- 在软件商店安装 MySQL 5.7/8.0 和 PHP 8.x(建议版本)。
- 上传你的 PHP 后端代码到网站目录(例如
/www/wwwroot/your-domain.com)。 - 修改
php.ini配置,开启必要的扩展(如fileinfo,pdo_mysql,openssl等)。
方案 B:手动安装 (适合运维人员)
# 以 Ubuntu 为例
sudo apt update
sudo apt install nginx mysql-server php-fpm php-mysql php-curl php-gd php-mbstring
sudo systemctl start nginx
sudo systemctl start mysql
第三步:部署 PHP 后端
-
数据库迁移
- 在本地导出 SQL 文件 (
mysqldump)。 - 在服务器创建对应的数据库和用户。
- 导入 SQL 文件。
- 修改配置文件:找到 PHP 项目的数据库连接配置文件(如
.env或config.php),将数据库地址改为localhost,密码和用户名改为服务器上的设置。
- 在本地导出 SQL 文件 (
-
代码上传与权限
- 使用 FTP 工具(如 FileZilla)或 Git 拉取代码到服务器。
- 设置权限:确保 Web 用户(通常是
www或nginx)对uploads、runtime等需要写缓存或日志的目录有写入权限。 -
chown -R www:www /path/to/project chmod -R 755 /path/to/project
-
配置 Nginx (伪静态)
- 如果是 ThinkPHP/Laravel/Laravue 等框架,需要在 Nginx 配置文件中添加伪静态规则。
- ThinkPHP 示例:
location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php/$1 last; break; } }
第四步:处理 UniApp 相关事务
这里有两个场景,请根据你的需求选择:
场景一:纯小程序发布(最常见)
- 无需部署 UniApp 代码到服务器。
- 开发者只需在电脑端 HBuilderX 中点击“发行” -> “微信小程序”,上传代码包到微信后台。
- 小程序通过 HTTP/HTTPS 请求你的 PHP 后端 API 获取数据。
- 关键点:确保 PHP 后端开启了 CORS(跨域)支持,或者在 Nginx 中配置
Access-Control-Allow-Origin。add_header Access-Control-Allow-Origin *;
场景二:H5 版或混合 App 预览
如果你需要将 UniApp 编译为 H5 部署在服务器上供浏览器访问:
- 在 HBuilderX 中点击“发行” -> "H5"。
- 将生成的
dist_build文件夹中的内容上传到服务器的 Nginx 站点根目录(通常与 PHP 放在不同子目录,如/h5,或者合并部署)。 - 配置 Nginx 路由,区分 API 请求和静态资源请求。
第五步:常见问题排查清单
-
跨域问题 (CORS)
- 现象:小程序能打开,但请求接口报错
Network Error或控制台报 CORS。 - 解决:检查 PHP 响应头是否包含
Access-Control-Allow-Origin: https://你的域名,或者 Nginx 配置中正确设置了该 Header。
- 现象:小程序能打开,但请求接口报错
-
HTTPS 强制跳转
- 小程序强制要求 HTTPS。如果用户访问 HTTP 接口,微信会拦截。
- 解决:在 Nginx 配置中强制 301 重定向到 HTTPS。
-
文件上传失败
- 现象:上传图片或文件提示失败。
- 原因:
upload_max_filesize或post_max_size在php.ini中太小,或者 Nginx 的client_max_body_size限制。 - 解决:调大这两个参数并重启服务。
-
时间时区不一致
- 现象:数据库中保存的时间比实际晚 8 小时。
- 解决:在
php.ini中设置date.timezone = Asia/Shanghai。
总结流程图
graph TD
A[开发者本地] -->|打包上传 | B(微信公众平台)
C[开发者本地] -->|编译 H5/打包 App | D{分发方式}
D -->|H5 预览 | E[阿里云 Nginx 静态目录]
D -->|App 上架 | F[应用市场/安装包]
G[阿里云 ECS] -->|运行 | H[PHP 后端 API]
G -->|存储 | I[MySQL 数据库]
B -.->|请求 API | H
E -.->|请求 API | H
H <-->|读写数据 | I
style H fill:#f9f,stroke:#333,stroke-width:2px
style I fill:#bbf,stroke:#333,stroke-width:2px
核心结论:你只需要在阿里云上部署 PHP 后端 和 MySQL 数据库,并确保配置好 Nginx (HTTPS) 和 CORS。UniApp 的小程序部分直接通过微信官方渠道提交审核,无需经过你的服务器。
云服务器