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

GitHub Actions部署PHP应用到VPS:Secrets传递至Docker步骤失败

问题修复:GitHub Actions部署时Docker Run无法传递Secrets

问题本质

GitHub Actions的Secrets变量仅在Actions Runner的上下文内生效,当通过SSH连接到VPS执行命令时,远程Shell无法识别{{ secrets.XXX }}这类语法;且SSH步骤中定义的环境变量不会自动同步到远程会话,导致之前的两种尝试均失效。

可行修复方案

方案1:直接在Docker Run命令中插值传递变量

通过GitHub Actions Runner提前完成Secrets的插值,再将完整命令发送到VPS执行,核心是用双引号包裹变量确保插值生效。

修改后的SSH部署步骤示例:

- name: Deploy via SSH
  uses: appleboy/ssh-action@v0.1.5
  with:
    host: ${{ secrets.VPS_HOST }}
    username: ${{ secrets.VPS_USER }}
    key: ${{ secrets.VPS_SSH_KEY }}
    script: |
      docker run -d \
        --name php-app \
        -p 80:80 \
        -e DB_HOST="${{ secrets.DB_HOST }}" \
        -e DB_PASSWORD="${{ secrets.DB_PASSWORD }}" \
        -e APP_KEY="${{ secrets.APP_KEY }}" \
        your-php-image:latest

方案2:生成.env文件后让Docker加载

适合环境变量较多的场景,先在VPS上写入包含Secrets的.env文件,再让Docker容器加载该文件。

修改后的SSH部署步骤示例:

- name: Deploy via SSH
  uses: appleboy/ssh-action@v0.1.5
  with:
    host: ${{ secrets.VPS_HOST }}
    username: ${{ secrets.VPS_USER }}
    key: ${{ secrets.VPS_SSH_KEY }}
    script: |
      # 在VPS上创建.env文件(确保路径有写入权限)
      cat > /var/www/php-app/.env << EOF
      DB_HOST=${{ secrets.DB_HOST }}
      DB_PASSWORD=${{ secrets.DB_PASSWORD }}
      APP_KEY=${{ secrets.APP_KEY }}
      EOF
      
      # 启动容器时加载.env文件
      docker run -d \
        --name php-app \
        -p 80:80 \
        --env-file /var/www/php-app/.env \
        your-php-image:latest

原方案失效原因说明

  • 直接用{{}}语法:远程VPS的Shell无法识别GitHub Actions的模板语法,会把{{ secrets.XXX }}当作纯字符串传递给Docker,而非实际Secret值。
  • SSH步骤添加环境变量:appleboy/ssh-action的env参数仅作用于Actions Runner本地,不会同步到远程VPS的会话环境中,远程执行Docker时无法读取这些变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:42:11