在阿里云服务器部署基于 PHP 后端 + UniApp(小程序端) 的项目是一个非常经典且成熟的方案。UniApp 编译后生成的是前端代码(H5/微信小程序原生包),通常不需要直接运行在服务器上,而是通过 PHP 提供 API 接口供小程序调用。
以下是完整的部署流程指南,分为环境准备、项目配置、文件上传、服务启动和域名解析五个关键步骤。
1. 核心架构理解
在开始之前,请明确数据流向:
- 小程序端 (UniApp):负责界面展示和用户交互,通过
uni.request请求后端 API。 - 阿里云服务器:运行 Nginx/Apache + PHP + MySQL,提供 RESTful API 接口。
- 数据库:MySQL 或 MariaDB,存储业务数据。
2. 第一步:阿里云环境准备
A. 购买与初始化
- 登录阿里云控制台,购买一台 ECS 云服务器(推荐 Ubuntu 20.04/22.04 或 CentOS 7+)。
- 安全组配置:在 ECS 控制台的“安全组”规则中,放行以下端口:
80(HTTP)443(HTTPS,可选但推荐)22(SSH,用于远程连接)3306(MySQL,强烈建议不要对公网开放,仅允许内网访问)
B. 安装运行环境 (以 Ubuntu 为例)
通过 SSH 工具(如 Xshell, Terminal)连接服务器,执行以下命令一键安装 LAMP/LNMP 栈(推荐使用 LNMP,即 Nginx + PHP + MySQL):
# 更新软件源
sudo apt update
# 安装 Nginx
sudo apt install nginx -y
# 安装 PHP 及常用扩展 (根据项目需求调整版本,如 php8.1)
sudo apt install php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip -y
# 安装 MySQL
sudo apt install mysql-server -y
sudo mysql_secure_installation # 设置 root 密码并移除测试库
# 安装 Redis (如果项目需要缓存)
sudo apt install redis-server -y
注意:如果是 CentOS,请使用
yum或dnf进行安装,命令类似yum install nginx php php-mysql ...。
3. 第二步:数据库与后端配置
A. 创建数据库
进入 MySQL 命令行创建项目专用数据库和用户:
mysql -u root -p
CREATE DATABASE my_project_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'my_user'@'localhost' IDENTIFIED BY 'your_strong_password';
GRANT ALL PRIVILEGES ON my_project_db.* TO 'my_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
B. 修改后端代码配置
在你的 PHP 项目根目录(通常是 config.php 或 .env 文件)中,将数据库连接信息修改为刚才创建的:
// config.php 示例
return [
'database' => [
'host' => '127.0.0.1', // 本地访问即可,不要填公网 IP
'port' => '3306',
'name' => 'my_project_db',
'user' => 'my_user',
'password' => 'your_strong_password',
],
];
4. 第三步:上传代码到服务器
A. 打包 PHP 项目
将你的 PHP 后端代码(排除 node_modules, vendor 等依赖包,除非你使用 Composer 管理)压缩成 zip 包。
- 如果使用了 Composer,建议在本地先执行
composer install --no-dev --optimize-autoloader,然后打包上传。
B. 上传方式
推荐使用 scp 命令或 FTP 工具(如 FileZilla)将文件上传到 /var/www/html 或自定义目录(如 /home/wwwroot/project)。
# 本地终端操作示例
scp -r your-project.zip root@<你的服务器IP>:/tmp/
# 登录服务器解压
ssh root@<你的服务器IP>
cd /tmp
unzip your-project.zip
mv project/* /var/www/html/
chown -R www-data:www-data /var/www/html/ # 修改权限
C. UniApp 前端处理
关键点:UniApp 编译后的 H5 代码是静态资源。
- 方案一(推荐):将 UniApp 编译为 H5,生成的
dist文件夹内容直接覆盖到 Nginx 的根目录(与 PHP 后端同级),或者单独部署到 OSS/Nginx 静态区。 - 方案二(混合):如果你的 PHP 框架(如 Laravel/ThinkPHP)支持路由接管,可以将 H5 入口放在 PHP 目录下,通过
index.php统一分发。
5. 第四步:配置 Nginx
编辑 Nginx 配置文件(通常在 /etc/nginx/sites-available/default 或 /etc/nginx/conf.d/your_project.conf):
server {
listen 80;
server_name your_domain.com; # 替换为你的域名
root /var/www/html; # 指向你的代码目录
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# PHP 处理配置
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 防止路径遍历攻击
fastcgi_param PATH_INFO $fastcgi_path_info;
}
# 禁止访问 .git, .env 等敏感文件
location ~ /. {
deny all;
}
}
重启 Nginx 生效:
sudo nginx -t # 检查语法
sudo systemctl restart nginx
6. 第五步:域名与 HTTPS
A. 域名解析
在阿里云 DNS 控制台,添加一条 A 记录:
- 主机记录:
www(或@) - 记录值:你的服务器公网 IP
- TTL:默认
B. 配置 HTTPS (SSL 证书)
小程序强制要求使用 HTTPS。
- 在阿里云 SSL 证书控制台申请免费 DV 证书。
- 下载证书(Nginx 格式)。
- 修改 Nginx 配置开启 HTTPS:
server {
listen 443 ssl http2;
server_name your_domain.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
# ... 其他配置同上
}
(或者使用 Certbot 自动申请和管理证书)
7. 第六步:小程序端适配 (UniApp)
回到你的 UniApp 开发环境,修改 manifest.json 或 pages.json 中的网络请求地址:
- 开发环境:可以使用云开发或本地模拟。
-
生产环境:
// main.js 或 api.js 中定义全局 baseUrl const BASE_URL = 'https://your_domain.com/api'; uni.request({ url: BASE_URL + '/user/login', method: 'POST', data: { username: 'test' }, success(res) { console.log(res.data); } });
重要提示:
- 跨域问题:确保 PHP 后端返回了正确的 CORS 头(虽然小程序通常不严格限制跨域,但服务端最好配置好)。
- 微信后台配置:登录微信公众平台 -> 开发管理 -> 开发设置,将
https://your_domain.com添加到 服务器域名 列表中(包括 request 合法域名)。
常见问题排查
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 502 Bad Gateway | PHP-FPM 未启动或端口不对 | 检查 systemctl status php-fpm,确认 Nginx 配置中 fastcgi_pass 端口正确。 |
| 404 Not Found | 文件路径错误或 Nginx 配置错误 | 检查 root 路径是否正确,尝试访问 http://IP/test.php 看是否返回 PHP 代码。 |
| 数据库连接失败 | 防火墙或密码错误 | 检查 MySQL 用户权限,确认 bind-address 配置,检查 PHP 代码中的密码。 |
| 小程序无法请求 | 域名未备案或未加白名单 | 中国大陆服务器必须完成 ICP 备案;务必在微信后台添加域名白名单。 |
| 权限拒绝 (Permission denied) | 文件所有者不是 www-data | 执行 chown -R www-data:www-data /var/www/html。 |
按照以上步骤操作,你的 PHP + UniApp 小程序就能成功部署在阿里云上了。如果在具体某个环节(如 Nginx 报错或 PHP 扩展缺失)遇到困难,可以告诉我具体的错误日志,我再为你详细解答。
CLOUD云计算