一个用 Shell 脚本和 Rsync 编写的小型“部署器”。
所以,外面还有那么多东西呢,是吧?容器、持续集成、Git部署、管道等等。它们确实很棒。
但有时我们会遇到遗留项目、一些老旧的东西或庞大的基础设施单体,重构这些项目风险真的很高。
为这类项目制定部署策略可能会变成一场噩梦。我经常看到人们从零开始配置环境,然后反复使用 FileZilla 等 FTP 客户端或 rsync 和 scp 等终端命令来保持项目更新。
基于这样的思路,我用 shell 脚本和 rsync 写了一个非常简单的部署器。当然,它的主要功能是同步本地项目和服务器之间的文件。你可以添加多个主机,并实现一定程度的自动化,但这(当然)无法与我们今天使用的任何真正的部署技术相提并论。事实上,这里的“部署器”这个名字更多的是
形象化的,它源于它试图解决的问题,而不是它实际的功能。
废话不多说,让我们开始配置吧:
您需要:
已安装 rsync 和 git 的 *Unix 本地系统。
已启用 Rsync 和 SSH 连接的 *Unix 服务器。
这些要求大部分都是任何 *Unix 系统的默认配置。现在,请按照以下步骤操作:
-
从 GitHub 克隆或下载项目:
https://github.com/felippe-regazio/sh-simple-deployer -
deploy.sh将文件和文件夹复制deploy到项目根目录。 -
打开文件
deploy/_hosts.sh,你会看到两个包含一些虚拟信息的数组。每个数组都是一个有效的部署主机,它告诉 rsync 在同步时使用哪个连接和路径。你可以根据需要添加任意数量的数组,例如,用于部署到多个目标。删除“another”数组,只保留“default”数组。按如下方式配置:
declare -a default=(
root@127.0.0.0
/path/to/project/root/on/server
https://yourprojecturl.com
)
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。部署程序不会使用它,但您可能需要它来扩展功能,或者提醒您该项目的位置。
-
现在打开
deploy/directories.txt文件,添加要上传的路径或文件,它们必须相对于项目根目录,并用空行分隔。默认同步目录为“.”,即整个根文件夹。 -
现在打开
deploy/ignore.txt并按照与修改 directorys.txt 文件相同的方式添加路径或文件。这些路径、规则或文件将被 rsync 忽略。 -
现在打开
deploy/remind.txt并添加一些消息。每次运行脚本时都会显示此消息。此步骤是可选的。
现在一切就绪。请授予deploy.sh文件执行权限。在项目根目录打开终端并运行:
./deploy.sh
你可以使用以下命令运行它,但正如@tonypelliccio在评论中sh deploy.sh指出的那样:
从系统角度来看,你不需要使用 `.` 命令启动一个新的 shell
sh。在同一目录下运行 `./scriptname.sh` 也可以。如果你必须以 root 用户身份运行 `sudo su -`,效果也一样好。
首次运行 rsync 时,它会将本地项目与服务器项目同步。之后,当您修改项目时,只需运行部署程序,它就会根据您的配置仅同步已修改的文件。日志将保存在 ./deploy/logs 目录中。
您可以在 _hosts.sh 文件中添加新条目,并将其作为参数调用。例如,如果我们在 _hosts.sh 文件中配置了“another”数组,就可以这样使用它:
./deploy.sh another
最终,一切都回归到经典老旧的方式rsync。但这个脚本为旧系统的部署流程带来了自动化和标准化。
更多信息请参阅 GitHub 上的 README.md 文件,或者随时联系我。再次强调:这并非理想的现代化解决方案,而是一个旨在解决您在使用传统基础设施、旧项目、性能低下的主机等问题时可能遇到的脚本。我不了解您的具体情况,但希望它能对您有所帮助,这才是重点。感谢您的关注,以上就是全部内容。