You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

VS Code 如何连接AWS EC2实例上的远程代码仓库

嘿,这个需求太常见了!我给你整理了几个从简单到进阶的方案,你可以根据自己的技术栈和团队规模来选:

方案1:手动/定时脚本拉取(快速上手,适合个人小项目)

这个方案最容易实现,不需要额外的服务,适合快速验证需求:

  • 首先确保EC2实例已经配置了GitHub的SSH密钥,避免每次拉取都输密码:

    1. 在EC2上执行ssh-keygen -t ed25519 -C "your-email@example.com",一路回车生成密钥对
    2. 复制公钥内容(cat ~/.ssh/id_ed25519.pub),到GitHub仓库的Settings > Deploy keys里添加这个公钥,勾选「Allow write access」(如果只需要拉取的话可以不勾,但留着也没坏处)
  • 编写一个部署脚本,比如命名为deploy-staging.sh,放在你方便的路径下:

#!/bin/bash
# 切换到你的预发布仓库目录
cd /path/to/your/staging/repo
# 拉取最新代码(替换成你的目标分支,比如staging)
git pull origin staging
# 如果你的应用需要重启/构建,在这里加对应的命令,比如:
# npm install && pm2 restart your-app-name
# 或者 Python 项目:pip install -r requirements.txt && sudo systemctl restart your-uwsgi-service
  • 给脚本添加执行权限:chmod +x deploy-staging.sh

  • 如果想实现自动定时拉取(比如每分钟检查一次更新),可以用Linux的crontab:

    1. 执行crontab -e打开定时任务编辑器
    2. 添加一行:* * * * * /path/to/deploy-staging.sh >> /var/log/staging-deploy.log 2>&1
    3. 保存退出后,系统就会每分钟执行一次脚本,日志会存在/var/log/staging-deploy.log里,方便排查问题
方案2:GitHub Webhook触发实时部署(代码提交即更新,适合追求实时性的场景)

如果想要代码一推送到GitHub就自动更新预发布环境,Webhook是更优的选择:

  • 第一步,在EC2上搭建一个简单的Web服务来接收GitHub的Webhook请求(这里用Python Flask举例,你也可以用Node.js/Go等熟悉的语言):
    1. 安装Flask:pip install flask
    2. 编写webhook-server.py文件:
from flask import Flask, request, jsonify
import subprocess
import hmac
import hashlib

app = Flask(__name__)
# 替换成你自己的Webhook密钥(后面GitHub配置会用到)
WEBHOOK_SECRET = "your-custom-secret-key"

@app.route('/webhook', methods=['POST'])
def handle_deploy():
    # 验证GitHub的请求签名,防止恶意触发
    signature_header = request.headers.get('X-Hub-Signature-256')
    if not verify_signature(signature_header, request.data):
        return jsonify({"status": "error", "msg": "Invalid signature"}), 403

    # 调用之前写的部署脚本
    result = subprocess.run(['/path/to/deploy-staging.sh'], capture_output=True, text=True)
    if result.returncode == 0:
        return jsonify({"status": "success", "output": result.stdout})
    else:
        return jsonify({"status": "fail", "error": result.stderr}), 500

def verify_signature(signature_header, payload):
    if not signature_header:
        return False
    expected_signature = hmac.new(WEBHOOK_SECRET.encode(), payload, hashlib.sha256).hexdigest()
    return hmac.compare_digest(f"sha256={expected_signature}", signature_header)

if __name__ == '__main__':
    # 生产环境建议用gunicorn/uwsgi替代Flask自带的服务器,比如:
    # gunicorn -w 4 -b 0.0.0.0:5000 webhook-server:app
    app.run(host='0.0.0.0', port=5000)
  • 把Web服务做成后台守护进程(用systemd):
    1. 创建/etc/systemd/system/webhook-deploy.service文件:
[Unit]
Description=GitHub Webhook Server for Staging Deploy
After=network.target

[Service]
User=ec2-user  # 替换成你的EC2用户名
WorkingDirectory=/path/to/webhook/server
ExecStart=/usr/bin/python3 webhook-server.py
Restart=always

[Install]
WantedBy=multi-user.target
  1. 执行以下命令启动并启用服务:
sudo systemctl daemon-reload
sudo systemctl start webhook-deploy
sudo systemctl enable webhook-deploy
  • 在GitHub仓库配置Webhook:

    1. 进入仓库的Settings > Webhooks > Add webhook
    2. Payload URL填http://你的EC2公网IP:5000/webhook
    3. Content type选application/json
    4. Secret填刚才设置的your-custom-secret-key
    5. 触发事件选择「Just the push event」
    6. 勾选「Active」,点击保存
  • 最后别忘了在EC2的安全组里开放5000端口,允许GitHub的IP访问(可以查GitHub官方的Webhook IP列表来限制,更安全)

方案3:GitHub Actions CI/CD(规范流程,适合团队协作)

如果是团队项目,用GitHub Actions做自动化部署会更规范,不需要在EC2上维护Webhook服务:

  • 在你的GitHub仓库里创建.github/workflows/staging-deploy.yml文件:
name: Deploy to Staging EC2
# 当推送到staging分支时触发部署
on:
  push:
    branches: [ staging ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout latest code
        uses: actions/checkout@v4

      - name: Deploy to EC2 via SSH
        uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{ secrets.EC2_HOST }}          # 你的EC2公网IP(存在GitHub Secrets里)
          username: ${{ secrets.EC2_USER }}      # EC2用户名(比如ec2-user,存在Secrets里)
          key: ${{ secrets.EC2_SSH_PRIVATE_KEY }}# EC2的私钥(存在Secrets里)
          script: |
            cd /path/to/your/staging/repo
            git pull origin staging
            # 添加你的应用构建/重启命令,比如:
            # npm install && npm run build && pm2 restart app
  • 在GitHub仓库的Settings > Secrets and variables > Actions里添加三个Secret:
    • EC2_HOST: 你的EC2公网IP地址
    • EC2_USER: EC2实例的登录用户名(比如ec2-user)
    • EC2_SSH_PRIVATE_KEY: EC2实例的私钥内容(注意是私钥,不是公钥)

一些额外注意事项:

  • 不管用哪种方案,都要确保EC2上的用户有足够的权限操作仓库和应用(比如修改文件、重启服务)
  • 如果你的应用需要构建(比如React/Vue项目),一定要在部署脚本里加上构建步骤,否则更新的只是源码,不会生效
  • 记得保留部署日志,方便排查部署失败的问题(比如脚本的输出日志、Webhook的请求日志)

内容的提问来源于stack exchange,提问作者Ranjeet Eppakayala

火山引擎 最新活动