【AWS】不要把真实密码、JWT、.env 里的密钥提交进仓库;从代码到生产:如何安全、专业地将应用部署至 AWS
这篇帖子旨在帮助初学者理清 “本地代码 -> GitHub -> AWS 生产环境” 的安全链路,重点解决“密钥管理”和“部署流”这两个最容易让新手踩坑的问题。
从代码到生产:如何安全、专业地将应用部署至 AWS
From Code to Production: A Secure & Professional Guide to Deploying on AWS
核心内容 / Core Content
1. 密钥安全:不要让你的 GitHub 变成“取款机”
Security First: Don’t Let GitHub Become an ATM for Hackers
[中] 很多新手会犯一个致命错误:把包含数据库密码或 API Key 的 .env 文件直接 Push 到 GitHub。即使是私有仓库,这也是极大的安全隐患。
- 做法: 永远将
.env加入.gitignore。 - 原理: 本地开发用
.env,构建/运行时通过 GitHub Secrets(流水线用)或 AWS Secrets Manager(生产环境用)动态注入。
[EN] A common fatal mistake is pushing .env files containing database passwords or API keys to GitHub. Even in private repos, this is a major security risk.
- Best Practice: Always add
.envto your.gitignore. - The Logic: Use
.envfor local development, but inject variables dynamically via GitHub Secrets (for CI/CD) or AWS Secrets Manager (for production).
2. 核心架构:AWS 的“地基”三部曲
Infrastructure: The Three Pillars of Your AWS Foundation
[中] 部署不是简单的上传文件,而是构建一个隔离、稳固的网络环境:
- 网络 (VPC): 把数据库(RDS)关在“私有子网”,不通公网;API 放在“公共子网”或负载均衡(ALB)后。
- 计算 (ECS Fargate): 容器化部署。你不需要管理服务器,只需把打包好的 Docker 镜像推送到 ECR,AWS 会自动帮你运行。
- 存储 (RDS): 生产数据存在这里。它与代码库完全独立,GitHub 的变动不会影响这里的业务数据。
[EN] Deployment isn’t just uploading files; it’s building an isolated, robust environment:
- Networking (VPC): Keep your Database (RDS) in a “Private Subnet”; put your API in a “Public Subnet” or behind an Application Load Balancer (ALB).
- Compute (ECS Fargate): Serverless containers. Push your Docker image to ECR, and AWS handles the rest.
- Storage (RDS): This is where production data lives. It is independent of your codebase; GitHub changes won’t affect your live database.
3. 发布流程:自动化流水线 (CI/CD)
The Pipeline: From Code Push to Live Update
[中] 现代化的开发流程是“一键发布”:
- Push: 代码进入 GitHub
main分支。 - Build: GitHub Actions 自动触发,将代码打包成 Docker 镜像。
- Push to ECR: 镜像上传到 AWS 的私人仓库。
- Deploy: 更新 ECS 服务,AWS 拉取新镜像并平滑替换旧版本(蓝绿部署)。
[EN] Modern development relies on a seamless pipeline:
- Push: Code hits the GitHub
mainbranch. - Build: GitHub Actions triggers, packaging code into a Docker image.
- Push to ECR: The image is uploaded to your private AWS repository.
- Deploy: Update the ECS service; AWS pulls the new image and replaces the old version smoothly (Blue/Green deployment).
技术细节深挖 / Technical Deep Dive
Q: 如果我不小心提交了密钥怎么办? (What if I accidentally pushed a secret?)
[中] 仅仅删除文件并重新提交是不够的! Git 会记录历史。
- 立即失效 (Rotate): 第一时间去数据库或第三方平台更改密码/密钥。
- 清理历史: 使用
git filter-repo或 BFG Repo-Cleaner 彻底从历史记录中抹除该文件。
[EN] Deleting the file and re-committing is NOT enough. Git remembers everything.
- Rotate Immediately: Change your passwords/keys on the platform (DB, Stripe, etc.) right away.
- Purge History: Use tools like
git filter-repoor BFG Repo-Cleaner to scrub the secret from your entire Git history.
Q: 环境变量在哪里配置? (Where do environment variables go?)
| 环境 (Env) | 存放位置 (Location) |
|---|---|
| Local | .env (Ignored by Git) |
| CI/CD | GitHub Secrets (e.g., AWS_ACCESS_KEY) |
| Production | AWS Secrets Manager / ECS Task Definition |
给初学者的建议 / Pro-tips for Beginners
- Don’t over-engineer: 如果只是前端项目,先从 Vercel 或 AWS Amplify 开始。
- Infrastructure as Code (IaC): 进阶后可以学习使用 Terraform 或 AWS CDK,用代码来管理这些 AWS 资源,而不是在网页上手点。
- Keep it clean: 保持仓库里只有一个
.env.example文件,注明需要哪些变量,但不写具体值。
#AWS #CloudComputing #GitHubActions #DevOps #WebDevelopment #ProgrammingTips
更多推荐




所有评论(0)