使用git自动部署简单网站

本文作者:IMWeb yangchunwen 原文出处:IMWeb社区 未经同意,禁止转载

要做什么

假设你有一个博客,有一台网站服务器(或者很多台作负载均衡的服务器),当你的博客要升级时,你可能要在你自己的电脑上写好代码(可能包括本地调试好),然后提交到git(或svn),然后在每个服务器中checkout一份代码并重启服务器应用……

这里要介绍的是一种直接在本地提交代码,即可自动完成服务器部署的方法。

怎么做

假设你有网站主机(后面统称线上机):

user:user
host:1.2.3.4
password:passwd

并且确保你的本地开发机器(后面统称开发机)与线上机均已安装好Git(不是Github)

1. 线上机增加三个文件夹:

mkdir ~/git-directory.git
mkdir ~/deploy-directory-1
mkdir ~/deploy-directory-2

其中git-directory.git作为代码仓库,即开发机的代码统一提交到这里存放.

deploy-directory-1和deploy-directory-2是开发机上的部署目录,比如测试目录和正式线上内容目录

2. 线上机git仓库初始化:

cd ~/test.git
git init --bare
cd hook
cp post-receive.sample post-receive

3. 在post-receive文件中写入以下内容:

#!/bin/sh
#
DIR_ONE=/home/user/deploy-directory-1
DIR_TWO=/home/user/deploy-directory-2
#
git --work-tree=${DIR_ONE} clean -fd
git --work-tree=${DIR_ONE} checkout --force
#
git --work-tree=${DIR_TWO} clean -fd
git --work-tree=${DIR_TWO} checkout --force

4. 本地机增加文件夹并克隆远程git仓库:

mkdir whatever
cd whatever
git init
git remote add origin user@1.2.3.4:/home/git/test.git

注:此处会要求输入线上机器的登陆密码(passwd)

最终效果

本地机目录可以自由增删文件,并提交到线上机git仓库.

例如:

touch README
git add README
git commit -m 'first blood' README
git push origin master

此步操作完成后,查看线上机中第一步建立的那几个目录(git-directory.git、deploy-directory-1、deploy-directory-2),是不是多了一个你刚刚在本地创建的文件README?

还有一步

如果你的网站比较简单,到这一步就已经是完事了。

试想上面的例子,假如你的网站是静态网站,在deploy-directory-1、deploy-directory-2这两个文件夹中部署了同样的网站,一个用于测试,一个是真实环境,这样你就已经可以直接提交文件就完成上线了,是不是挺爽的?

事实上,通过这种方式,实际上git-directory.git就成了你的一个git服务器,上面第三步编辑的post-receive就是一个钩子(hook)文件,实际上就是一个可执行的shell脚本,当你在你的本地提交代码(git push)时,git服务器收到你的文件提交同时会触发这个钩子的动作,也就是执行这个shell脚本。说到这里,接下来这个shell脚本能做什么,重启服务器?触发构建?把文件部署到别的机器上……尽情地发挥你的想象吧!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏yw的数据分析

NCBI下载sra数据(新)

  今天要上NCBI下载sra数据发现没有下载的链接,网上查发现都是老的方法,NCBI页面已经变更,于是看了NCBI的help,并且记录下来新版的sra数据下载...

88990
来自专栏北京马哥教育

HTTP 协议漫谈

简介 网络上已经有不少介绍 HTTP 的好文章,对HTTP的一些细节介绍的比较好,所以本篇文章不会对 HTTP 的细节进行深究,而是从够高和更结构化的角度将 H...

314110
来自专栏静下来

php提示Notice:undefined index的解决方法

今天一个朋友的网站被他的服务商关站了,说是网站每天报错日志能有30M。想想一个文本,就一些提示就能有30M的大小,那错误是蛮多的了。 因为他用的虚拟空间,他这个...

41850
来自专栏云计算教程系列

如何在Ubuntu 14.04上使用Pydio托管文件共享服务器

随着云的采用增加,越来越多的数据被远程存储。从音乐到图片再到个人文档,很多人都将文件上传到他们不管理的服务器上。如果您希望将文件保存在您控制的服务器上,则可以使...

40600
来自专栏用户2442861的专栏

Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置

两年半前写的关于Maven的介绍,现在看来都还是不错的,自己转下。写博客的一大好处就是方便自己以后查阅,自己总结的总是最靠谱的。

40510
来自专栏云知识学习

Windows Server 2008 R2修改远程桌面连接数

计算机---属性---远程设置---勾选"允许运行任意版本远程桌面的计算机连接(较不安全)"……

1.4K130
来自专栏运维

系统重启后ngix reload不生效原因分析

这是一种比较少见,困扰我很久的问题,虽然这个问题很简单,但是找到根本原因还是费了不少时间,现在把分析过程分享如下。

9520
来自专栏运维小白

10.35 screen工具

screen工具 为了不让一个任务意外中断 nohup command & screen是一个虚拟终端 yum install -y screen screen...

21280
来自专栏Golang语言社区

HTTP协议漫谈

简介 园子里已经有不少介绍HTTP的的好文章。对HTTP的一些细节介绍的比较好,所以本篇文章不会对HTTP的细节进行深究,而是从够高和更结构化的角度将H...

372130
来自专栏运维小白

10.11 Linux网络相关

linux网络相关 ifconfig查看网卡ip(yum install net-tools) ifup ens33/ifdown ens33 设定虚拟网卡en...

31760

扫码关注云+社区

领取腾讯云代金券