如何将Git忽略的.env.prod文件通过GitHub Actions部署到服务器?
用GitHub Actions通过SSH+rsync推送保密.env.prod文件到服务器
完全可以实现,核心思路是把.env.prod的内容存在GitHub Secrets中,在Action运行时动态生成文件,再通过SSH+rsync推送到服务器,具体步骤如下:
1. 把.env.prod内容及服务器信息存入GitHub Secrets
- 打开你的GitHub仓库,进入「Settings」→「Secrets and variables」→「Actions」
- 依次创建以下仓库Secret:
ENV_PROD_CONTENT:把本地.env.prod的完整内容粘贴进去(保留所有键值对和换行格式)SERVER_HOST:服务器IP或域名SERVER_USER:SSH登录用户名SERVER_SSH_KEY:登录服务器的私钥完整文本(包含开头-----BEGIN RSA PRIVATE KEY-----和结尾-----END RSA PRIVATE KEY-----)TARGET_PATH:服务器上存放.env.prod的目标目录(比如/var/www/your-project/)
2. 编写GitHub Actions Workflow文件
在仓库的.github/workflows目录下创建部署脚本,比如deploy-env.yml,内容如下:
name: Deploy .env.prod to Server on: push: branches: [ main ] # 可改为你需要触发部署的分支 workflow_dispatch: # 允许手动触发部署 jobs: deploy-env: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Generate .env.prod file run: | echo "${{ secrets.ENV_PROD_CONTENT }}" > .env.prod # 可选:验证文件生成是否正确 cat .env.prod - name: Sync .env.prod to server via SSH+rsync uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SERVER_SSH_KEY }} script: | # 确保目标目录存在,不存在则创建 mkdir -p ${{ secrets.TARGET_PATH }} # 用rsync同步文件到服务器 rsync -avz .env.prod ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }}:${{ secrets.TARGET_PATH }}
关键细节说明
- 动态生成文件时,
echo "${{ secrets.ENV_PROD_CONTENT }}" > .env.prod会完整保留原文件的换行和格式,保证.env.prod的结构正确 - rsync默认通过SSH加密传输文件,只要服务器SSH配置安全,传输过程就不会泄露内容
- 可以通过GitHub仓库的「Actions」页面,手动触发
Deploy .env.prod to Serverworkflow,无需依赖代码推送
内容的提问来源于stack exchange,提问作者chovy
相关产品推荐
相关产品推荐

