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

如何通过Github Workflows实现代码自动部署到Dreamhost服务器

GitHub main分支自动同步部署到Dreamhost配置方案

首先明确:为GitHub Actions生成专属SSH密钥对实现自动部署是当前自动化场景的标准安全实践,只要做好权限收敛,完全符合安全最佳实践,不需要开发者手动双推代码,整套流程完全以GitHub为核心触发。

核心流程

main分支收到代码推送时,GitHub Actions通过专属SSH密钥鉴权连接Dreamhost服务器,用rsync全量/增量同步代码,可按需追加服务重启、构建等自定义步骤。


具体配置步骤

1. 生成GitHub Actions专用SSH密钥对

在本地终端执行以下命令生成无密码的ed25519密钥对(自动化场景使用的密钥不能设置passphrase):

ssh-keygen -t ed25519 -C "github-actions-dreamhost-deploy" -f ./gh-dreamhost-deploy-key

执行完成后当前目录会生成两个文件:

  • gh-dreamhost-deploy-key:私钥,需严格保密,后续仅存入GitHub加密密钥存储
  • gh-dreamhost-deploy-key.pub:公钥,可公开配置到服务器信任列表

2. 将公钥配置到Dreamhost服务器

通过SSH登录你Dreamhost账户下对应站点的普通部署用户(不要使用root用户,遵循最小权限原则),执行以下命令配置公钥信任:

# 进入SSH配置目录,不存在则创建
mkdir -p ~/.ssh
# 将本地gh-dreamhost-deploy-key.pub的完整内容追加到授权文件末尾
echo "粘贴你本地gh-dreamhost-deploy-key.pub的全部内容" >> ~/.ssh/authorized_keys
# 配置正确的文件权限,权限不符合会导致SSH鉴权失败
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

安全提示:可以在Dreamhost面板中将该用户的访问范围限制为站点根目录,不要开放整台服务器的操作权限,即使密钥出现泄露也能将影响范围降到最低。后续如果要废弃部署能力,直接从authorized_keys中删除对应公钥即可立刻失效。

3. 将私钥存入GitHub仓库加密Secrets

打开对应GitHub仓库的设置页,进入「Secrets and variables → Actions」,新建仓库密钥:

  • 名称填DREAMHOST_SSH_PRIVATE_KEY
  • 值填本地gh-dreamhost-deploy-key文件的全部内容,需包含开头的-----BEGIN OPENSSH PRIVATE KEY-----和结尾的-----END OPENSSH PRIVATE KEY-----
    该密钥由GitHub加密存储,仅在Actions运行时临时注入,日志输出会自动脱敏,不存在明文泄露风险。

4. 编写GitHub Actions工作流配置

在本地仓库中新建文件路径.github/workflows/deploy-dreamhost.yml,写入以下配置,根据注释替换成你自己的服务器信息:

name: Deploy to Dreamhost
# 触发条件:main分支收到push事件时执行
on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取最新仓库代码
        uses: actions/checkout@v4

      - name: 启动SSH代理并加载私钥
        uses: webfactory/ssh-agent@v0.8.0
        with:
          ssh-private-key: ${{ secrets.DREAMHOST_SSH_PRIVATE_KEY }}

      - name: 配置Dreamhost主机信任
        run: |
          mkdir -p ~/.ssh
          # 替换成你自己的Dreamhost服务器地址/IP
          ssh-keyscan 你的Dreamhost服务器地址 >> ~/.ssh/known_hosts
          chmod 644 ~/.ssh/known_hosts

      - name: 同步代码到Dreamhost站点目录
        run: |
          rsync -avz --delete \
          # 按需添加排除项,不同步不需要部署的文件
          --exclude '.git' \
          --exclude '.github' \
          --exclude '.env.local' \
          --exclude 'node_modules' \
          ./ 替换为你的Dreamhost部署用户名@替换为你的Dreamhost服务器地址:替换为你站点在服务器的绝对路径/
          # 如果是动态站点需要重启服务,在下方追加对应命令即可,例如PHP站点可以执行touch tmp/restart.txt触发服务重载
          # ssh 替换为你的Dreamhost部署用户名@替换为你的Dreamhost服务器地址 "需要执行的服务操作命令"

配置说明:Dreamhost的站点根目录一般格式为/home/你的部署用户名/你的站点域名/,服务器地址可以在Dreamhost主机管理面板查到。

5. 验证部署流程

将配置文件提交并推送到GitHub的main分支,即可自动触发第一次部署,你可以在仓库的Actions标签页查看运行日志,显示绿色成功标识即代表部署完成。后续所有协作者只需要正常提交代码、合并PR到main分支,就会自动完成同步,不需要单独操作服务器。


常见优化项

  • 如果需要构建步骤(比如前端项目打包、Node.js依赖安装),可以在rsync同步前添加对应的构建步骤,将构建产物同步到服务器即可
  • 可以给rsync添加--dry-run参数先测试同步路径是否正确,避免误删服务器文件
  • 不要在仓库中存储生产环境密钥等敏感配置,这类配置可以直接放在Dreamhost服务器的站点目录中,通过exclude规则避免被同步覆盖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:48:21