如何在AWS S3存储桶中直接Git clone GitHub仓库部署静态网站
问题核心说明
S3是对象存储服务,没有内置计算运行环境,无法直接在S3存储桶内执行git clone命令拉取GitHub仓库内容,所有拉取GitHub代码到S3的方案,本质都是先在支持运行git的环境拉取代码,再将文件同步到S3。针对你手动网页上传超时、要对接CloudFront做静态站分发的需求,下面两个方案都是新手可直接落地、不会踩坑的:
方案1:长期部署用AWS CodePipeline自动同步(最推荐,无本地操作、无上传超时问题)
这个方案走AWS内网传输,不会出现本地公网上传的超时问题,配置完之后后续你往GitHub分支推代码会自动同步到S3,不用手动操作:
- 先去IAM控制台给CodePipeline用的服务角色加目标S3桶的读写权限,不用改你之前配的S3静态网站配置,给角色附加允许操作目标S3存储桶
s3:PutObject、s3:DeleteObject等权限的策略即可 - 打开CodePipeline控制台新建流水线,源阶段选择「GitHub (v2)」,按照提示完成GitHub账号授权,选择你存放静态网站代码的仓库、对应部署分支,开启自动触发选项
- 构建阶段如果你的网站是纯静态HTML/CSS/JS文件、不需要编译构建(比如不需要执行
npm run build),直接选择「跳过构建阶段」即可;如果需要构建,可以加个CodeBuild阶段配置对应构建命令 - 部署阶段选择「Amazon S3」作为部署目标,选中你已经创建好的静态网站存储桶,务必勾选「部署前提取文件」选项,不然流水线会把代码打成zip包上传到S3,网站会打不开
- 保存流水线后会自动触发第一次运行,等待1-2分钟即可完成全量代码同步,比本地公网上传速度快数倍
方案2:临时单次同步用AWS CLI本地同步(操作快,适合临时测试)
如果只是第一次传文件、不想配置流水线,用AWS CLI的同步命令比S3网页控制台上传稳定很多,支持断点续传、增量同步,不会超时:
- 本地安装AWS CLI工具,配置好你AWS账号的访问密钥,选择和S3存储桶一致的区域
- 本地执行
git clone 你的GitHub仓库地址拉取网站代码到本地文件夹 - 进入代码所在的根目录,执行同步命令:
aws s3 sync . s3://替换成你的S3存储桶名称 --delete
这个命令会自动把当前目录下的所有文件增量同步到S3,--delete参数会同步删除S3里存在、但本地仓库已经删掉的旧文件,保证两边内容完全一致。
CloudFront配置注意事项
代码同步到S3之后配CloudFront时注意两个点,避免后续访问出问题:
- 源站选择你的S3存储桶时,优先配置源访问控制(OAC),不要直接开启S3的公网访问权限,安全性更高
- 第一次同步完代码、绑定CloudFront之后,手动执行一次路径为
/*的缓存失效,避免CloudFront返回旧的缓存内容。
避坑提醒:不要尝试找所谓「直接git clone到S3」的偏方,S3本身没有运行git程序的系统环境,这类教程要么是偷换概念走中间服务传输,要么是根本跑不通的无效操作。
内容的提问来源于stack exchange,提问作者Codesmith
相关产品推荐
相关产品推荐

