如何通过Git命令从Cloud9环境部署应用至EC2实例?
Cloud9 部署应用到 EC2 常见问题解答
是否需要单独把应用部署到EC2?能不能直接用Cloud9环境的URL访问应用?
Cloud9 开发环境的底层确实运行在 AWS 托管的 EC2 实例上,但这个实例完全不能当作生产服务节点使用,必须单独部署到你自己持有的EC2实例上,原因很明确:
- 托管实例和Cloud9环境生命周期强绑定,环境闲置超时、你手动关闭Cloud9环境、或者误删Cloud9工作区时,对应的底层实例会直接停机甚至销毁,上面运行的应用会直接中断,数据也会丢失
- 托管实例的网络权限默认是严格收敛的,安全组仅开放给Cloud9服务的内部管理连接,不会放开80、443等Web服务的公网访问端口,你就算在Cloud9里把应用跑在指定端口,外部用户根本访问不到
- Cloud9托管实例的配置、磁盘、IP都是自动分配动态调整的,不具备生产环境要求的固定配置、固定公网IP、持久化存储等基础能力
Cloud9和目标EC2分属不同区域,会不会影响部署流程?
不会对Git部署的核心流程产生任何影响,只要两边网络连通就能正常操作,只需要注意几个细节:
- 如果你用SSH协议走Git推代码,提前给目标EC2的安全组放开22端口的入站规则,把Cloud9环境的出口公网IP加到允许列表里就行,不需要额外做特殊配置
- 跨区域传输走公网链路,代码包体积大的时候传输速度会比同区域内网传输慢一些,但不会导致部署逻辑变化,你在Cloud9终端执行的Git命令和同区域部署时完全一致
- Cloud9在这里只是充当你的操作终端,和你自己本地电脑推代码到EC2没有差异,跨区域不会改变Git本身的工作逻辑,和你之前推代码到Heroku的操作体验没有本质区别
补充:EC2部署和你熟悉的Heroku部署逻辑差异
你之前用Heroku属于PaaS平台托管部署:代码推到Heroku的远程仓库后,平台会自动帮你搞定运行时安装、构建、进程保活、流量转发这些事。部署到EC2属于IaaS层操作,你需要自己掌控全流程:
- 提前在目标EC2上装好应用对应的运行时环境(比如对应版本的Node.js、Python、Go等),配置好进程守护工具(比如
pm2、systemd)保证应用异常退出后能自动重启 - 在EC2上初始化裸Git仓库,配置
post-receive钩子脚本,实现代码推送完成后自动拉取代码、安装依赖、构建、重启应用的逻辑 - 自己配置EC2安全组放开Web服务端口、配置防火墙规则,保证公网用户能正常访问到应用端口
- 常用的Git部署到EC2的核心操作很简单:在EC2端创建裸仓库后,在Cloud9的项目目录下执行
git remote add ec2 ssh://<EC2登录用户>@<EC2公网IP>/<裸仓库路径>,后续每次要部署直接执行git push ec2 <部署分支名>就能触发自动部署流程
内容的提问来源于stack exchange,提问作者Developers For the World
相关产品推荐
相关产品推荐

