示例TypeScript全栈SaaS Web应用程序,带MCP
我是一名软件开发人员,在SaaS平台上工作了15年多。这个示例项目将我多年的知识压缩成一个功能齐全的软件即服务(SaaS)平台,可以使用IaC和GitHub Actions部署到AWS。这当然不是完美的,但我希望这将帮助一些有前途的SaaS企业家看到一个可扩展的、生产级的构建。
堆栈:
架构:
它使用基础设施即代码(IaC),使用 海表温度。它使用GitHub Actions部署到AWS。这是现场演示的当前架构:
AWS成本:
没有太多活动的生产云部署每天在AWS上运行1-2美元。任何真正投入使用的产品和客户都必须扩大MCP集群,但这通常是一个很好的问题。
要求:
- 在中设置了SSO的AWS帐户
~/.aws/config安装指南 - AWS-CLI 安装
- Docker用于本地postgres数据库
- 您还必须携带自己的生产postgres数据库,或者需要将RDS添加到SST堆栈中。我用 数字海洋管理数据库.
- 您的域应在Route 53中设置,云部署需要托管区域ID(本地部署不需要)。
- IAM用户访问密钥/秘密 安装指南 和 权限指南
- Mailgun帐户 获取API密钥
- 条带帐户\获取API密钥\
您可以进行全球查找 chipgpt (不区分大小写),并使用您自己的项目名称和描述查找需要更新的大多数内容。
如何设置项目:
登录AWS SSO:
npm run sso复制 .env.example 文件并填充它们。你不需要开发云部署,但如果你最终想要一个临时服务器,它支持它:
cp .env .env.{{username}}
cp .env .env.development
cp .env .env.production安装依赖项:
npm install启动本地postgresql数据库:
npm run docker:up启动本地部署:
npx sst dev注: 如果您在尝试执行以下操作时遇到此错误npx sst dev,这通常意味着你需要npm run sso通过AWS重新授权。 ``bash ✕ Unexpected error occurred. Please run with --print-logs or check .sst/log/sst.log if available.``
首次启动新环境后,您需要在AWS控制台中更新新的Amazon Cognito Pool域。
登录AWS控制台 > 亚马逊干邑 > 用户池 > 选择用户池 > 领域 > 为您的cognito池设置一个域,并确保设置“托管UI(经典)”
注: 如果你设置好了所有内容,你可能可以使用新的UI,但我还没有这样做。因此,如果你只是想启动并运行它,那么你现在应该使用Hosted,并计划稍后尝试更新。
此时,您应该让堆栈在本地运行。部分资源位于AWS中,但您的代码全部在本地执行,未部署到AWS。SST有一个很酷的多路复用器,您也可以使用它在本地监控应用程序。保存文件时,所有内容都会实时更新。
- 默认Web URL为:http://localhost:3000
- 默认Web仪表板为:http://localhost:3000/dashboard
- 默认API URL为:http://localhost:3000/api
- 默认OAuth URL为:http://localhost:3000/api/oauth
- 默认MCP服务器URL为:http://localhost:3333/mcp
本地实时部署:
确保docker数据库正在运行:
npm run docker:up请确保您已登录:
npm run sso启动本地部署:
npx sst devMCP检查员:
npx @modelcontextprotocol/inspector云部署:
npm run deploy:production如果这是第一次部署,则需要在部署后在AWS控制台中更新Amazon Cognito Pool的域。
登录AWS控制台 > 亚马逊干邑 > 用户池 > 选择用户池 > 领域 > 为您的cognito池设置一个域,并确保设置“托管UI(经典)”
注: 如果你设置好了所有内容,你可能可以使用新的UI,但我还没有这样做。因此,如果你只是想启动并运行它,那么你现在应该使用Hosted,并计划稍后尝试更新。
GitHub操作设置:
要使GitHub操作部署正常工作,您需要一个具有访问/密钥的IAM用户,并将密钥添加到您的仓库中(请参阅 需求).
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- 授权密码
- 数据库URL
- AWS_HOSTED_ZONE_ID
- 邮件_API_KEY
- 条纹\_ API_键
- NEXT_PUBLIC_POSTHOG_KEY(不是真正的“秘密”,它可以是一个变量)
当我将它们添加到我自己的SaaS中时,我打算添加的东西:
- \[x\] ~~添加SES电子邮件管理用于生产SES访问~~添加Mailgun电子邮件用于发送电子邮件
- \[x\] 添加付费帐户层(最有可能使用Stripe作为支付网关)
- \[\]添加一个与AWS CloudWatch配合得更好的propper日志记录实用程序。
- \[\]为云部署添加警报/警示,以主动应对问题。
- \[\]自动生成REST API文档。
- \[\]支持亚马逊RDS+代理(在使用Sequelize时遇到问题,不想找到新的ORM)
- \[\]添加适当的Sequelize迁移。
- \[\]更新以使用新的Cognito UI模式。
- \[\]切换到官方
@auth/sequelize-adapter包装后 产品编号13120 合并。
反馈和问题:
我很乐意尽我所能接受反馈或回答问题。向存储库提交问题,我将尽最大努力及时回复。
在TikTok上关注我:
如果你觉得这很有帮助,请在这个repo上加星,并在TikTok上关注我: @芯片。GPT
