如何在 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-receive、post-receive 和 update。pre-receive 在服务器接收到 push 后立即执行,update 类似,但它对每个分支执行一次,post-receive 在 push 完全完成时执行,这是我们感兴趣的。
在我们的存储库中,如果你输入:
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 进行自动部署!
相关文章:
如何在 VPS 上使用 Git 设置自动部署
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 介绍 要了解 Git 的基本知识以及如何安装,请参考介绍教程。 本文将教你如何在部署应用程序时使用 Git。虽然有许多使用 Gi…...
Linux下的三种 IO 复用
目录 一、Select 1、函数 API 2、使用限制 3、使用 Demo 二、Poll 三、epoll 0、 实现原理 1、函数 API 2、简单代码模板 3、LT/ET 使用过程 (1)LT 水平触发 (2)ET边沿触发 4、使用 Demo 四、参考链接 一、Select 在…...
通过 SSH 进行WordPress网站的高级服务器管理
我在管理hostease的服务器时,时常需要通过SSH登录服务器进行修改。而在网站管理中,SSH不仅是一个基础工具,更是高级用户用来精细化管理和优化服务器的重要工具。通过SSH,你可以深入监控服务器的性能、精细管理系统资源,…...
速盾高防cdn支持移动端独立缓存
随着移动互联网的快速发展,移动端网页访问量也越来越大。然而,移动端的网络环境相对不稳定,用户体验可能会受到影响。因此,使用高防CDN来加速移动端网页访问,成为越来越多网站运营者的首选。 速盾高防CDN是一种分布式…...
PMP–一、二、三模、冲刺–分类–8.质量管理
文章目录 技巧五、质量管理 一模8.质量管理--质量管理计划--质量管理计划包括项目采用的质量标准,到底有没有满足质量需求,看质量标准即可。6、 [单选] 自项目开始以来,作为项目经理同事的职能经理一直公开反对该项目,在讨论项目里…...
如何快速使用Unity 的UPR---1资源检测保姆级
关于我们的性能检测工具已经有很多了,比如UWA的或者是我们的Unity 的UPR 都是很好的,今天说一下UPR吧 官方网址 :UPR - Unity专业性能优化工具 这个是官方给的Demo 选择你的平台就可以 这个可以作为一个参考但是不是很建议用官方的因为我们…...
pytorch中的.clone() 和 .detach()
在PyTorch中,.clone() 和 .detach() 是两个用于处理张量(Tensor)的方法,它们各自有不同的用途: .clone(): .clone() 方法用于创建一个张量的副本(深拷贝)。这意味着原始张量和新张量…...
三十二:网络爬虫的工作原理与应对方式
随着互联网的快速发展,网络爬虫(Web Crawlers)作为一种自动化工具,被广泛应用于搜索引擎、数据采集、网站监控等领域。网络爬虫的作用是通过自动化程序,模拟人类浏览网页的行为,自动下载和解析网页内容&…...
nodejs相关知识介绍
1、nodejs官方文档: https://nodejs.org/zh-cn nodejs可以用nvm进入安装; 2、npm说明: npm官方教程:https://npm.p2hp.com/ npm是 Node.js 的标准包管理器,也就是说nodejs安装好,npm也就安装好了&#…...
MySQL排它锁
MySQL排它锁原理 MySQL中的排它锁(Exclusive Lock),也称为独占锁,是一种确保在事务期间,其他事务无法对锁定数据进行读取或修改的锁机制。当一个事务对某一行数据加上排它锁后,其他事务无法对该行数据进行…...
HarmonyOS4+NEXT星河版入门与项目实战(22)------动画(属性动画与显示动画)
文章目录 1、属性动画图解2、案例实现-小鱼移动游戏1、代码实现2、代码解释3、资源图片4、实现效果3、显示动画4、案例修改-显示动画5、总结1、属性动画图解 这里我们用一张完整的图来汇整属性动画的用法格式和使用的主要属性范围,如下所示: 2、案例实现-小鱼移动游戏 1、代…...
Vue3 Ts 如何获取组件的类型
vue3 Ts ref 子组件 1、默认写法 typeof:获取ts类型 InstanceType:获取模版的实例 <tempolate><myComponent ref"myCompRef"> </tempolate><script setup lang"ts"> import { ref } from "vue&quo…...
RAG数据拆分之PDF
引言RAG数据简介PDF解析方法及工具代码实现总结 二、正文内容 引言 本文将介绍如何将RAG数据拆分至PDF格式,并探讨PDF解析的方法和工具,最后提供代码示例。 RAG数据简介 RAG(关系型属性图)是一种用于表示实体及其关系的图数据…...
【算法day1】数组:双指针算法
题目引用 这里以 1、LeetCode704.二分查找 2、LeetCode27.移除元素 3、LeetCode977.有序数组的平方 这三道题举例来说明数组中双指针的妙用。 1、二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜…...
Ubuntu 22.04 离线安装软件包
在使用最小化安装时,默认是不带有vim 或者nano编辑器的,如果你的环境不能上外网就需要离线安装。 首先你需要先找一台可以上网的ubuntu系统(虚拟机搭建也行),下载所有的依赖包,然后上传到需要安装的服务器…...
网络安全——浅谈HTTP协议
HTTP请求 HTTP请求是客户端往服务端发送请求动作,告知服务器自己的要求。 HTTP请求由状态行、请求头、请求正文三部分组成: 状态行:包括请求方式Method、资源路径URL、协议版本Version;请求头:包括一些访问的域名、…...
鸿蒙开发-在ArkTS中制作音乐播放器
音频播放功能实现 导入音频播放相关模块 首先需要从ohos.multimedia.audio模块中导入必要的类和接口用于音频播放。例如: import audio from ohos.multimedia.audio;创建音频播放器实例并设置播放源 可以通过audio.createAudioPlayer()方法创建一个音频播放器实…...
Rust学习笔记_03——元组
Rust学习笔记_01——基础 Rust学习笔记_02——数组 Rust学习笔记_03——元组 文章目录 Rust学习笔记_03——元组元组1. 定义元祖2. 访问元组中的元素3. 元组的解构4. 元组不可遍历和切片5. 元组作为函数返回值6. 单元元组7. 代码演示 元组 在Rust编程语言中,元组&a…...
LabVIEW内燃机气道试验台测控系统
基于LabVIEW软件开发的内燃机气道试验台测控系统主要应用于内燃机气道的性能测试和数据分析,通过高精度的测控技术,有效提升内燃机的测试精度和数据处理能力。 项目背景 随着内燃机技术的发展,对其气道性能的精准测量需求日益增加。该系统通…...
git 本地同步远端分支
一、关联远程仓库 本地仓库关联远端仓库 git remote add origin https://github.com/user/repository.git 二、获取远程分支信息 获取远程仓库的最新分支信息 git fetch origin 三、创建或切换到本地分支以跟踪远程分支 1. 创建分支 创建分支并关联到远端分支 git bra…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
