将站点部署到 Netcup 虚拟主机的 Gitea action 工作流
以下 Gitea action 工作流将 Hugo 站点部署到 Netcup 虚拟主机账户。它使用带有预装私钥的 SSH 访问(在 Netcup 服务器上运行 ssh-keygen -t ed25519 -f id_netcup echo $(cat id_netcup.pub) >> ~/.ssh/authorized_keys)。
它期望在 Gitea 中通过 Web 界面配置以下密钥(仓库设置 -> Runners -> Secrets):
NETCUP_USERNAME-hosting123456或类似。从你的 Netcup 客户控制面板/虚拟主机控制面板获取。NETCUP_SSH_KEY- 来自id_netcup的私钥NETCUP_SSH_HOST_KEY- 有关如何获取此项,请参见如何仅显示 SSH 服务器的主机密钥
这是为了实现从 CI/CD 作业的无密码登录。

此外,它期望你配置 Netcup 账户以从 my-domain.com/httpdocs 提供服务。
它与 Hugo 构建 action 配合使用,你可以在我们之前的文章 Gitea Hugo 构建 action 中找到它,但修改它只需要你更改 Download artifact 步骤。
deploy_netcup.yml
name: Deploy
run-name: Deploying homepage
on: [push]
jobs:
Deploy-Netcup:
runs-on: ubuntu-latest
steps:
- name: Download artifact
uses: actions/download-artifact@v3
with:
name: hugo-site
path: public
# Put into a tarball
- name: Make tarball
run: mkdir -p my-domain.com && mv public my-domain.com/httpdocs && tar -czf my-domain.com.tar.gz my-domain.com
shell: sh
# Accept host key
- name: Accept SSH host key
run: echo "my-domain.com ssh-ed25519 ${{ secrets.NETCUP_SSH_HOST_KEY }}" >> ~/.ssh/known_hosts && cat ~/.ssh/known_hosts
shell: sh
# Deploy to Netcup
- name: Export SSH key
run: echo "${{ secrets.NETCUP_SSH_KEY }}" > id_netcup && chmod 600 id_netcup
shell: sh
- name: Remove old files
run: ssh -i id_netcup ${{ secrets.NETCUP_USERNAME }}@my-domain.com "rm -rfv my-domain.com/*"
shell: sh
- name: Deploy to Netcup
run: "scp -i id_netcup my-domain.com.tar.gz ${{ secrets.NETCUP_USERNAME }}@my-domain.com:"
shell: sh
- name: Extract tarball on server
run: ssh -i id_netcup "${{ secrets.NETCUP_USERNAME }}@my-domain.com" "tar xzvf my-domain.com.tar.gz"
shell: sh所有先前存在的文件将从服务器上的 my-domain.com 目录中删除,然后才上传新文件。最好确保该文件夹中没有重要文件。
我不建议删除此步骤,否则在仓库中重命名或删除的文件将不会从服务器中删除,并且将永远可访问。
为了使上传更快(rsync 在 Netcup 虚拟主机上通过 SSH 不可用,而且当上传许多小文件时也有点慢),我们首先创建一个 tarball,然后只使用 scp 上传 tarball,然后在服务器上运行 tar xzvf。
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow