NestJS项目部署到阿里云 ECS 踩坑与解决记录
2026/9/5 20:56:09 网站建设 项目流程

项目:NestJS + Prisma + MySQL + Nginx(前后端分离)
本地环境:Mac (ARM64)
服务器:阿里云 ECS (AMD64, Ubuntu 22.04)
部署工具:Docker + Docker Compose + 阿里云 ACR


📑 目录

  1. 镜像构建与平台架构
  2. Prisma + MySQL 数据库
  3. Docker 挂载与文件同步
  4. Nginx 网关配置
  5. 环境变量与 JWT
  6. 种子数据(Seed)
  7. 常用调试命令
  8. 最重要的教训(必读)

一、镜像构建与平台架构

#问题错误现象原因解决办法
1架构不匹配no matching manifest for linux/amd64/v4 in the manifest list entriesMac ARM 芯片构建 ARM 镜像,ECS AMD64 无法运行构建时指定平台:docker build --platform linux/amd64 -t image:latest .
2Prisma Generate 崩溃assertion failed [block != nullptr]: BasicBlock requested for unrecognized addressPrisma 引擎需要 OpenSSL,但基础镜像中缺失Dockerfile 中添加:RUN apt-get update && apt-get install -y openssl
3Prisma Client 平台不匹配PrismaClientInitializationError: generated for "darwin-arm64", deployment requires "debian-openssl-1.1.x"本地生成 Prisma Client 绑定 Mac 平台,服务器需要 Linux 版本schema.prisma中添加binaryTargets = ["native", "debian-openssl-1.1.x"]
4构建产物缺失Error: Cannot find module '/app/dist/main.js'npm run build输出到dist/src/main.js,但 CMD 是node dist/main.js修改 CMD 为node dist/src/main.js,或修改package.jsonstart:prod脚本

二、Prisma + MySQL 数据库

#问题错误现象原因解决办法
5连接 localhost 失败P1001: Can't reach database server at localhost:3306容器内localhost指向容器自身,不是 MySQL 容器.env中数据库地址用容器名mysqlmysql://design_view:pass@mysql:3306/dbschema.prismaenv()读取
6

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询