You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Github CI/CD部署时保留AWS EC2中src/uploads文件的方案求助

解决Github Runner部署时src/uploads文件被删除的问题

问题根源

你配置的paths-ignore作用是:只有当push的文件全在src/uploads/**路径下时,才会跳过Workflow触发。如果同时修改了其他代码,Workflow依然会触发,而actions/checkout@v2步骤会将EC2 Runner工作目录(/reponame/_work/_work/reponame)的内容完全替换为Git仓库的最新代码——由于src/uploads目录通常不会被提交到Git仓库,所以原有上传的文件会被清空。

具体解决方案

方案1:备份并恢复EC2上的uploads目录(快速临时解决)

在actions/checkout步骤前后添加备份恢复逻辑,保留EC2上已有的上传文件:

jobs:
  build:
    runs-on: server-dev
    steps:
      - name: Backup existing uploads directory
        run: |
          # 备份当前工作目录下的uploads(路径根据实际情况调整)
          BACKUP_DIR="/tmp/uploads_backup"
          if [ -d "./src/uploads" ]; then
            mkdir -p ${BACKUP_DIR}
            cp -r ./src/uploads/* ${BACKUP_DIR}/
          fi

      - uses: actions/checkout@v2

      - name: Restore uploads directory
        run: |
          BACKUP_DIR="/tmp/uploads_backup"
          TARGET_DIR="./src/uploads"
          if [ -d "${BACKUP_DIR}" ]; then
            mkdir -p ${TARGET_DIR}
            cp -r ${BACKUP_DIR}/* ${TARGET_DIR}/
            rm -rf ${BACKUP_DIR}
          fi

      # 后续步骤保持不变
      - name: Install Nodejs Dependencies
        run: npm ci
      - name: 'Create env file'
        run: |
          touch .env
          echo PORT="8081" >> .env
          cat .env
      - name: Run Server
        run: npm run start:stage

方案2:将uploads目录移至代码目录外(推荐长期方案)

把用户上传文件与代码目录彻底分离,从根源避免覆盖问题:

  1. 在EC2上创建独立的存储目录,比如/data/app_uploads,并配置好应用进程的读写权限。
  2. 修改Node.js应用的配置文件,将上传文件的保存路径改为这个新目录(例如修改config.js里的uploadDir字段为/data/app_uploads)。
  3. 在仓库的.gitignore中添加src/uploads/,确保该目录不会被误提交到Git。
  4. 重新部署后,上传的文件会直接保存到独立目录,不受代码更新的影响。

补充:修正paths-ignore的语法错误

你的YAML配置里用了//注释,这不符合YAML语法规范,会导致配置异常,应改为#:

on:
  push:
    paths-ignore:
      - 'src/uploads/**' # 这里用#添加注释,而非//
    branches: [ main ]

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 02:32:39