name: Deploy website on push on: push: branches: - main jobs: web-deploy: name: Deploy runs-on: ubuntu-latest steps: - name: Get latest code uses: actions/checkout@v3 with: # 获取所有标记和分支的所有历史记录(updatetime 必须,否则每次都会变化) fetch-depth: 0 # 如果你文档需要 Git 子模块,取消注释下一行 # submodules: true - name: Setup Node.js uses: actions/setup-node@v3 with: node-version: 18 cache: yarn - name: Install dependencies run: yarn install --frozen-lockfile - name: Build website run: yarn build - name: Deploy uses: JamesIves/github-pages-deploy-action@v4 with: # 这是文档部署到的分支名称 branch: gh-pages folder: build - name: Sync files uses: SamKirkland/FTP-Deploy-Action@4.3.3 with: local-dir: build/ server: ${{ secrets.ftp_host }} username: ${{ secrets.ftp_username }} password: ${{ secrets.ftp_password }} port: ${{ secrets.ftp_port }} # 建议更改默认的 21 端口 timeout: 600000
改用 rsync
- name: Sync files run: rsync -rav -e ssh --delete ./build/ username@hostname:/path/to/remote/directory/ env: SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
其中,name 是这个步骤的名称。run 是要执行的命令,这里使用 rsync 命令将本地的 ./build/ 目录同步到远程服务器的 /path/to/remote/directory/ 目录中。
-rav 参数表示递归同步所有文件并保持文件权限、时间戳和所有权。
--delete 参数表示删除远程服务器上不存在的文件。
-e ssh 参数表示使用 ssh 连接。username 和 hostname 是远程服务器的登录凭据,
SSH_PRIVATE_KEY 是 SSH 私钥,需要在 GitHub Secrets 中添加。
注意:-e ssh 参数会在本地机器上使用 ssh 客户端连接到远程服务器。为了避免每次都需要输入密码或者手动确认 ssh 密钥,建议在本地机器上配置 SSH 密钥。
需要将本地机器上的公钥添加到远程服务器上的 ~/.ssh/authorized_keys 文件中,以便允许该机器使用 SSH 密钥连接到远程服务器。另外,需要在 GitHub Actions 中将 SSH 私钥添加到 Secrets 中,以便在执行 rsync 命令时使用。