如何在 VPS 上使用 Git 设置自动部署

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

介绍

要了解 Git 的基本知识以及如何安装,请参考介绍教程。

本文将教你如何在部署应用程序时使用 Git。虽然有许多使用 Git 部署应用程序的方法,本教程将专注于最直接的方法。我假设你已经知道如何在本地机器上创建和使用存储库。如果不知道,请参考此教程。

当你使用 Git 时,工作流通常是朝向版本控制。你有一个本地存储库用于工作,还有一个远程存储库用于保持一切同步,并且可以与团队和不同的机器一起工作。但你也可以使用 Git 将应用程序移动到生产环境。

服务器设置

我们的虚构工作空间:

你的服务器实际目录:/var/www/domain.com

你的服务器存储库:/var/repo/site.git

如果我们想要推送到 site.git,同时让所有内容都在 /var/www/domain.com 可用,我们应该怎么做呢?

创建我们的存储库

从命令行登录到你的 VPS,然后输入以下命令:

cd /var
mkdir repo && cd repo
mkdir site.git && cd site.git
git init --bare

--bare 表示我们的文件夹将没有源文件,只有版本控制。

钩子

Git 存储库有一个名为 ‘hooks’ 的文件夹。该文件夹包含一些示例文件,用于可能的操作,你可以挂钩并执行你设置的自定义操作。

Git 文档 定义了三种可能的服务器钩子:pre-receivepost-receiveupdatepre-receive 在服务器接收到 push 后立即执行,update 类似,但它对每个分支执行一次,post-receivepush 完全完成时执行,这是我们感兴趣的。

在我们的存储库中,如果你输入:

ls

你会看到一些文件和文件夹,包括 hooks 文件夹。所以让我们进入 hooks 文件夹:

cd hooks

现在,通过输入以下命令创建文件 post-receive

cat > post-receive

当你执行此命令时,会有一行空白,表示你输入的所有内容将保存到这个文件中。所以让我们输入:

#!/bin/sh
git --work-tree=/var/www/domain.<WBR>com --git-dir=/var/repo/site.git checkout -f

完成输入后,按下 control-d 保存。为了执行该文件,我们需要使用以下命令设置适当的权限:

chmod +x post-receive

你可以在文档中看到,git-dir 是存储库的路径。使用 work-tree,你可以定义文件实际传输到的不同路径。

post-receive 文件将在每次推送完成时被查看,它表示你的文件需要在 /var/www/domain.com 中。

本地机器

让我们创建我们的本地存储库。你应该根据自己的选择更改路径和名称。如果你在 VPS 上,只需输入:

exit

然后创建你的存储库:

cd /my/workspace
mkdir project && cd project
git init

然后,我们需要配置存储库的远程路径。告诉 Git 添加一个名为 live 的远程:

git remote add live ssh://user@mydomain.com/var/<WBR>repo/site.git

这里应该提供存储库链接,而不是实际的 live 文件夹。

假设我们在这个文件夹中有一些很棒的工作准备好了。我们应该执行添加文件和提交消息的常规步骤:

git add .
git commit -m "My project is ready"

git add 后的点表示你正在将所有文件添加到暂存区。在 git commit 后,我们有 -m,表示我们将输入一条消息。最后,我们将一切都推送到服务器。我们使用了在设置远程时使用的 live 别名。

git push live master

这里我们告诉 Git 推送到 live 远程的 master 分支。要了解更多关于分支以及如何使用它的信息,你可以阅读此教程。

Beta

如果你不想一次部署所有内容怎么办?也许你想先测试一下,并有一个 beta 目录。

其中一种方法是创建另一个存储库。让我们再次登录到我们的 VPS 并创建我们的目录:

cd /var/www/
mkdir beta

创建我们的存储库:

cd /var/repo
mkdir beta.git && cd beta.git
git init --bare

同样,我们应该创建 post-receive 文件,因为我们想在 beta 目录中看到我们的项目:

cd hooks
cat > post-receive

输入文件内容:


```sh
#!/bin/sh
git --work-tree=/var/www/beta --git-dir=/var/repo/beta.git checkout -f

当你完成输入后,按下‘control-d’保存。为了执行该文件,我们需要使用以下命令设置适当的权限:

chmod +x post-receive

让我们回到本地代码库:

exit
cd /my/workspace/project

现在我们可以设置另一个指向 beta 仓库的远程地址:

git remote add beta ssh://user@mydomain.com/var/<WBR>repo/beta.git

有了这个设置,我们可以进行两步操作。首先推送到 beta 并进行检查,如果一切正常,再推送到 live:

git add .
git commit -m "New version"
git push beta master

然后:

git push live master

从服务器上线

也许你有一个团队在同一个项目上工作,你希望其他人也能决定何时上线。为了实现这一点,我们可以在服务器上将 beta 仓库和 live 仓库进行关联。登录到你的 VPS 并输入以下命令:

cd /var/repo/beta.git
git remote add live ../site.git

现在你可以在服务器上从 beta 推送到 live:

cd /var/repo/beta.git
git push live master

恭喜!你的 VPS 现在已经设置为使用 Git 进行自动部署!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/62779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Goland或Idea启动报错

Goland或Idea启动不了 报错如图&#xff1a; 原因&#xff1a;破解导致 解决方案 环境变量中有关Goland的全部删除

ceph手动部署

ceph手动部署 一、 节点规划 主机名IP地址角色ceph01.example.com172.18.0.10/24mon、mgr、osd、mds、rgwceph02.example.com172.18.0.20/24mon、mgr、osd、mds、rgwceph03.example.com172.18.0.30/24mon、mgr、osd、mds、rgw 操作系统版本&#xff1a; Rocky Linux release …

C#基础之方法

文章目录 1 方法1.1 定义方法1.2 参数传递1.2.1 按值传递参数1.2.2 按引用传递参数1.2.3 按输出传递参数1.2.4 可变参数 params1.2.5 具名参数1.2.6 可选参数 1.3 匿名方法1.3.1 Lambda 表达式1.3.1.1 定义1.3.1.2 常用类型1.3.1.3 Lambda 表达式与 LINQ1.3.1.4 Lambda 表达式的…

Unity——Toggle的状态监听处理

文章目录 前言一、单个Toggle的事件监听二、多个Toggle的事件监听注意事项 前言 在Unity中&#xff0c;Toggle 是一种用户界面&#xff08;UI&#xff09;元素&#xff0c;通常用于提供一个开关选项&#xff0c;允许用户选择开启或关闭某个特定的功能。Toggle 组件有一个 onVa…

PMP–一、二、三模、冲刺–分类–8.质量管理

文章目录 技巧五、质量管理 一模8.质量管理--质量管理计划--质量管理计划包括项目采用的质量标准&#xff0c;到底有没有满足质量需求&#xff0c;看质量标准即可。6、 [单选] 自项目开始以来&#xff0c;作为项目经理同事的职能经理一直公开反对该项目&#xff0c;在讨论项目里…

LabVIEW实现UDP通信

目录 1、UDP通信原理 2、硬件环境部署 3、云端环境部署 4、UDP通信函数 5、程序架构 6、前面板设计 7、程序框图设计 8、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利…

在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程

在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程 在 Ubuntu 20.04 上使用 Lux 下载 Bilibili&#xff08;哔哩哔哩&#xff09;视频的完整和详细步骤如下&#xff0c;包括使用预编译二进制文件的安装方法&#xff1a; 1. 安装依赖 确保你的系统已安装 FFmpeg&…

C语言——库函数

常用的函数 https://cplusplus.com/reference/ 没事儿多看看 1 数学函数 #include <math.h> #include <stdio.h> int main() {printf("%lf\n", sqrt(4));//开平方根——>double类型printf("%lf\n", pow(2, 10));//求几次方的——>do…

纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力GoFly快速开发框架

前言​ 开发纯go插件的原因是因为目前 Go 生态系统中几乎所有现有的人脸检测解决方案都是纯粹绑定到一些 C/C 库&#xff0c;如 ​​OpenCV​​ 或 ​​​dlib​​​&#xff0c;但通过 ​​​cgo​​​ 调用 C 程序会引入巨大的延迟&#xff0c;并在性能方面产生显著的权衡。…

硬菜3道+馒头

硬菜3道 1、可乐鸡翅 》鸡翅滑刀酱油耗油胡椒粉盐》 搅拌腌制3-5分钟 》油锅&#xff0c;直到2面煎黄 》倒入可乐&#xff0c;到大火收汁&#xff0c;出锅 2、洋葱牛肉 》冻牛肉切薄酱油耗油胡椒粉盐 》手指摇匀 》加入生粉水&#xff0c;继续摇匀》直到粘稠 》油锅牛肉炒半熟&…

27 基于51单片机的方向盘模拟系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机&#xff0c;采用两个MPX4115压力传感器作为两路压力到位开关电路&#xff0c; 采用滑动变阻器连接数模转换器模拟重力加速度传感器电路&#xff1b; 一个按键控制LED灯的点亮与…

win10环境mysql8.4免安装版配置

下载后解压 dos管理员&#xff0c;进入bin目录 mysqld -install net start mysql 出现错误&#xff0c;服务无法启动 MySQL 服务正在启动 . MySQL 服务无法启动。 服务没有报告任何错误。 请键入 NET HELPMSG 3534 以获得更多的帮助。 services.msc&#xff0c;查看服务…

【C语言】结构体嵌套

结构体嵌套是指在一个结构体中定义另一个结构体作为其成员。这种方式可以实现更复杂的数据结构设计&#xff0c;便于对数据进行分层管理和组织&#xff0c;广泛应用于实际开发中&#xff0c;例如操作系统内核、嵌入式系统、网络协议解析等。下面是对结构体嵌套的详细介绍&#…

Java中的请求重发机制:详细解读与实现

Java中的请求重发机制&#xff1a;详细解读与实现 在进行网络请求时&#xff0c;尤其是对外部服务的调用&#xff0c;网络波动或服务器故障常常会导致请求失败。因此&#xff0c;重试机制&#xff08;请求重发&#xff09;是实现高可用系统的重要组成部分。在Java中&#xff0…

贪心算法理论

系列博客目录 文章目录 系列博客目录贪心算法 (Greedy Algorithm)贪心算法的特点贪心算法的适用条件常见的贪心算法问题贪心算法的步骤贪心算法示例&#xff1a;活动选择问题贪心算法的优缺点 贪心算法 (Greedy Algorithm) 贪心算法是一种在每一步选择中都采取当前状态下最优的…

centos更换源文件,换源,替换源

期初怎么折腾就是不行&#xff0c;换了源也是不能使用的&#xff0c;最后发现不是换的源不行&#xff0c;而是之前的源文件不行&#xff0c;然后给所有的源文件在yum源统一放在了bak目录下&#xff0c;随后我们再去下载安装源文件。 您将yum源下载之后&#xff0c;先将您的其他…

网络安全之IP伪造

眼下非常多站点的涉及存在一些安全漏洞&#xff0c;黑客easy使用ip伪造、session劫持、xss攻击、session注入等手段危害站点安全。在纪录片《互联网之子》&#xff08;建议搞IT的都要看下&#xff09;中。亚伦斯沃茨&#xff08;真实人物&#xff0c;神一般的存在&#xff09;涉…

Python 爬虫实战基于 Class 的天气查询与反爬虫练习

需求&#xff1a; 要实现一个简单的天气查询爬虫&#xff0c;使用 requests 库来获取网页内容&#xff0c;使用 BeautifulSoup 来解析网页并提取天气信息。以下是一个基本示例&#xff0c;展示了如何抓取天气信息并输出当天的温度和天气状况。 以下是使用 class 类方式实现带有…

线性表-链式描述(C++)

链式实现的线性表&#xff1a; 链式实现的线性表&#xff0c;即链表&#xff08;Linked List&#xff09;&#xff0c;是一种通过节点&#xff08;Node&#xff09;的集合来存储数据的线性数据结构。在链表中&#xff0c;每个节点包含两部分&#xff1a;存储数据的域&#xff…

蓝牙定位的MATLAB仿真程序|基于信号强度的定位,平面、四个蓝牙基站(附源代码)

这段代码通过RSSI信号强度实现了蓝牙定位&#xff0c;展示了如何使用锚点位置和测量的信号强度来估计未知点的位置。它涵盖了信号衰减模型、距离计算和最小二乘法估计等基本概念。通过图形化输出&#xff0c;用户可以直观地看到真实位置与估计位置的关系。 文章目录 蓝牙定位原…