避坑指南:在阿里云/腾讯云ECS上部署苍穹外卖微信小程序遇到的5个典型问题及解决
避坑指南在阿里云/腾讯云ECS上部署苍穹外卖微信小程序遇到的5个典型问题及解决部署苍穹外卖微信小程序到云服务器时即便是经验丰富的开发者也可能在配置过程中踩坑。本文聚焦于实际部署中高频出现的5类问题结合阿里云/腾讯云ECS环境特性提供可快速复用的解决方案。不同于基础教程这里只讲那些文档里没写清楚、但实际一定会遇到的暗坑。1. 云服务器安全组与容器端口映射的双重门禁问题许多开发者以为在docker run -p 80:80映射端口后就能直接访问服务却忽略了云平台的安全组规则。典型症状是本地curl 127.0.0.1能通但外网始终无法访问。这其实是两道防火墙在起作用云平台安全组必须手动配置登录云服务器控制台找到「安全组」配置项添加入方向规则以微信小程序常用端口为例协议类型端口范围授权对象优先级TCP800.0.0.0/01TCP4430.0.0.0/01TCP80800.0.0.0/02操作系统防火墙部分镜像默认开启# 查看防火墙状态 sudo systemctl status firewalld # 临时开放端口CentOS示例 sudo firewall-cmd --add-port80/tcp --permanent sudo firewall-cmd --reload注意阿里云ECS的经典网络与专有网络(VPC)的安全组配置位置不同腾讯云CVM还需注意基础网络/私有网络的区分。2. 微信小程序域名白名单与Nginx代理的身份认证冲突微信小程序要求所有请求必须使用HTTPS且域名完成备案但开发调试时常遇到真机预览时接口报403开发者工具能访问但手机扫描失败根本原因是微信的域名校验机制。解决方案分两步走临时解决方案开发阶段# nginx.conf 中添加跨域支持 location /api/ { proxy_pass http://sky-take-out:8080; add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; add_header Access-Control-Allow-Headers Content-Type; }正式环境必须配置申请域名并完成ICP备案配置SSL证书推荐使用云平台免费证书在微信公众平台「开发」→「开发设置」中添加服务器域名典型错误配置对比错误类型现象正确做法直接使用IP地址真机调试失败配置备案域名HTTPS未设置CORS头开发者工具报跨域错误Nginx中添加Access-Control-*头WebSocket未配置wss订单状态不实时更新修改ws://为wss://协议3. Docker容器间网络隔离导致的数据库连接拒绝使用自定义网络时容易出现的误区# 创建自定义网络很多教程漏掉这步 docker network create sky-net # 错误示例MySQL容器未加入同一网络 docker run --name mysql -e MYSQL_ROOT_PASSWORD123 -p 3306:3306 -d mysql # 正确做法加入同一网络 docker run --name mysql --network sky-net -e MYSQL_ROOT_PASSWORD123 -d mysql连接字符串的坑点错误配置jdbc:mysql://localhost:3306/sky_db容器内localhost指向自己正确配置jdbc:mysql://mysql:3306/sky_db使用容器名作为host诊断技巧# 进入后端容器测试数据库连通性 docker exec -it sky-take-out bash apt-get update apt-get install -y telnet # 未安装时先装工具 telnet mysql 3306 # 应看到Connected响应4. 文件挂载权限导致的Nginx 403 Forbidden当出现前端页面能打开但静态资源加载失败时往往是挂载目录权限问题。深层原因是Docker容器默认以nginx用户UID 101运行宿主机挂载目录属主通常是root解决方案# 查看目录权限 ls -ld /root/nginx/html # 递归修改属主推荐方案 sudo chown -R 101:101 /root/nginx/html # 或放宽权限安全性较低 sudo chmod -R 755 /root/nginx/html对于阿里云ECS的CentOS系统还需注意SELinux的影响# 临时关闭重启失效 setenforce 0 # 永久关闭 sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config5. 微信小程序baseUrl魔改后的缓存陷阱修改vendor.js中的baseUrl后开发者工具正常但真机调试仍请求旧地址这是微信的缓存机制导致。完整清理步骤清除开发者工具缓存点击工具栏「缓存」→「清除所有缓存」关闭「启用代码压缩」选项临时处理真机缓存// 在app.js中加入版本号强制刷新 const version v1.0.0; wx.setStorageSync(version, version);配置Nginx禁止缓存关键文件location ~* \.(js|css)$ { add_header Cache-Control no-cache, no-store, must-revalidate; expires 0; }高级技巧使用环境变量区分开发/生产环境// 微信小程序中通过process.env.NODE_ENV判断 const baseUrl process.env.NODE_ENV development ? https://dev.yourdomain.com : https://prod.yourdomain.com;这些坑点都是笔者在三次完整部署过程中逐一踩过的。最耗时的往往是云平台安全组配置和微信域名校验这类非代码问题建议部署时先完成这些基础配置再调试业务逻辑。