发布于 2026-01-06 1 阅读
0

一个用 Shell 脚本和 Rsync 编写的小型“部署器”。

一个用 Shell 脚本和 Rsync 编写的小型“部署器”。

所以,外面还有那么多东西呢,是吧?容器、持续集成、Git部署、管道等等。它们确实很棒。

但有时我们会遇到遗留项目、一些老旧的东西或庞大的基础设施单体,重构这些项目风险真的很高。

为这类项目制定部署策略可能会变成一场噩梦。我经常看到人们从零开始配置环境,然后反复使用 FileZilla 等 FTP 客户端或 rsync 和 scp 等终端命令来保持项目更新。

基于这样的思路,我用 shell 脚本和 rsync 写了一个非常简单的部署器。当然,它的主要功能是同步本地项目和服务器之间的文件。你可以添加多个主机,并实现一定程度的自动化,但这(当然)无法与我们今天使用的任何真正的部署技术相提并论。事实上,这里的“部署器”这个名字更多的是
形象化的,它源于它试图解决的问题,而不是它实际的功能。

废话不多说,让我们开始配置吧:

您需要:

已安装 rsync 和 git 的 *Unix 本地系统。
已启用 Rsync 和 SSH 连接的 *Unix 服务器。

这些要求大部分都是任何 *Unix 系统的默认配置。现在,请按照以下步骤操作:

  1. 从 GitHub 克隆或下载项目:
    https://github.com/felippe-regazio/sh-simple-deployer

  2. deploy.sh将文件和文件夹复制deploy到项目根目录。

  3. 打开文件deploy/_hosts.sh,你会看到两个包含一些虚拟信息的数组。每个数组都是一个有效的部署主机,它告诉 rsync 在同步时使用哪个连接和路径。你可以根据需要添加任意数量的数组,例如,用于部署到多个目标。删除“another”数组,只保留“default”数组。按如下方式配置:

declare -a default=(
    root@127.0.0.0
    /path/to/project/root/on/server
    https://yourprojecturl.com
)
Enter fullscreen mode Exit fullscreen mode

1st line在带有 `<command>` 的那个窗口root@127.0.0.0,按照 `<command>` 的模式添加您的 SSH 连接user@host。如果您需要传递不同的端口,请这样使用user@host:port

2nd line您必须将项目添加absolute path到您的项目ON THE SERVER。要查找项目的绝对路径,请使用 SSH 访问您的服务器,导航到项目根文件夹,然后输入命令pwd。请勿使用 FileZilla 或图形界面客户端来查找根路径。

3th line必须添加项目 IP 地址或 URL。部署程序不会使用它,但您可能需要它来扩展功能,或者提醒您该项目的位置。

  1. 现在打开deploy/directories.txt文件,添加要上传的路径或文件,它们必须相对于项目根目录,并用空行分隔。默认同步目录为“.”,即整个根文件夹。

  2. 现在打开deploy/ignore.txt并按照与修改 directorys.txt 文件相同的方式添加路径或文件。这些路径、规则或文件将被 rsync 忽略。

  3. 现在打开deploy/remind.txt并添加一些消息。每次运行脚本时都会显示此消息。此步骤是可选的。

现在一切就绪。请授予deploy.sh文件执行权限。在项目根目录打开终端并运行:

./deploy.sh
Enter fullscreen mode Exit fullscreen mode

你可以使用以下命令运行它,但正如@tonypelliccio在评论中sh deploy.sh指出的那样:

从系统角度来看,你不需要使用 `.` 命令启动一个新的 shell sh。在同一目录下运行 `./scriptname.sh` 也可以。如果你必须以 root 用户身份运行 `sudo su -`,效果也一样好。

首次运行 rsync 时,它会将本地项目与服务器项目同步。之后,当您修改项目时,只需运行部署程序,它就会根据您的配置仅同步已修改的文件。日志将保存在 ./deploy/logs 目录中。

您可以在 _hosts.sh 文件中添加新条目,并将其作为参数调用。例如,如果我们在 _hosts.sh 文件中配置了“another”数组,就可以这样使用它:

./deploy.sh another
Enter fullscreen mode Exit fullscreen mode

最终,一切都回归到经典老旧的方式rsync。但这个脚本为旧系统的部署流程带来了自动化和标准化。
更多信息请参阅 GitHub 上的 README.md 文件,或者随时联系我。再次强调:这并非理想的现代化解决方案,而是一个旨在解决您在使用传统基础设施、旧项目、性能低下的主机等问题时可能遇到的脚本。我不了解您的具体情况,但希望它能对您有所帮助,这才是重点。感谢您的关注,以上就是全部内容。

文章来源:https://dev.to/felipperegazio/a-tiny-deployer-made-with-shell-script-and-rsync-3djd