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

如何通过GitHub Actions在DigitalOcean Droplet执行git pull并生成env文件

问题根因

你当前工作流的问题确实如你猜测:除了appleboy/ssh-action内的操作是在你的DigitalOcean Droplet上执行之外,其余所有步骤(包括你调用create-envfile生成文件的步骤)都运行在GitHub分配的临时Runner容器中,生成的.django文件仅存在于Runner的临时文件系统,不会同步到你的服务器上。
同时GitHub Action不支持嵌套调用,你无法在appleboy/ssh-action内部直接复用create-envfile这个Action,最直接的方案就是把所有操作都放在SSH步骤的脚本内执行。

最终实现方案

这个方案完全符合你的需求:支持workflow dispatch手动触发、直接在Droplet上拉取最新代码、基于GitHub Secrets生成.env文件,同时满足你提出的两个硬性要求:

  • 所有密钥都存储在GitHub Secrets中,不会写入仓库代码
  • 天然适配私有组织仓库、私有用户仓库,不需要额外适配

你需要提前在仓库的「Settings - Secrets and variables - Actions」中配置以下Secret:

  • SSH_HOST:Droplet的公网IP
  • SSH_USER:SSH登录用户名
  • SSH_KEY:SSH登录私钥
  • DJANGO_SECRET:Django密钥
  • 其他你需要用到的敏感环境变量都可以在这里配置

完整工作流代码

name: digitalocean-pull-and-setup-env

on:
  # 仅保留手动触发
  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: SSH到Droplet执行部署
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USER }}
          key: ${{ secrets.SSH_KEY }}
          # 所有部署逻辑都写在script里,全部在Droplet上执行
          script: |
            # 进入你的项目目录
            cd /home/django/all_django_projects
            # 拉取最新代码
            git pull
            # 生成.env文件,直接覆盖旧文件
            cat > .django << EOF
            DEBUG=False
            DEVELOPMENT_MODE=False
            DJANGO_SECRET_KEY=${{ secrets.DJANGO_SECRET }}
            # 其他需要的环境变量直接按这个格式加就行,敏感值从secrets取
            EOF
            # 此处可以加你的服务重启命令,比如重启Django服务、uWSGI、Nginx等
            # 示例:systemctl restart your-django-service

补充说明

  • 这个方案没有冗余操作,所有逻辑都直接在你的服务器上执行,不需要上传整个仓库代码
  • 所有写入.env的敏感值都是在GitHub Action运行时才注入,不会泄露到任何公开位置
  • 不需要用到actions/checkout或者digitalocean/action-doctl,完全满足你要的简单部署需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:36:04