使用 git 自动部署简单网站

作者:yangchunwen

要做什么

假设你有一个博客,有一台网站服务器(或者很多台作负载均衡的服务器),当你的博客要升级时,你可能要在你自己的电脑上写好代码(可能包括本地调试好),然后提交到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

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

最终效果

本地机目录可以自由增删文件,并提交到线上机 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脚本能做什么,重启服务器?触发构建?把文件部署到别的机器上……尽情地发挥你的想象吧!

原文链接:http://ivweb.io/topic/56172ddc5d6f37745e8f4982

相关推荐

如何写好 Git commit messages

Git commit message和工作流规范

高水平的应用程序容错能力,无缝负载均衡容量

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

如何在 Openstack 上运行 ubuntu 镜像

1864
来自专栏杨建荣的学习笔记

半自动化搭建Data Guard的想法和实践(三)(r9笔记第81天)

今天总算抽了些时间把半自动化的脚本完成了大半,目前还缺少两部分的脚本,一部分是安装前的检查脚本,可以做一个预检查。虽然目前来看还不是必须,但是这些是标准和规范的...

3344
来自专栏Urahara Blog

域渗透-信息收集基础

2345
来自专栏青枫的专栏

安装最新版本的Oracle公司的虚拟机软件 VirtualBox + 安装虚拟机 Windows XP 系统 + 安装 Oracle 11g 软件 + 出现 ERROR: ORA-12541: TNS

  VirtualBox的下载链接:https://www.virtualbox.org/wiki/Downloads

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

如何在Ubuntu 14.04上将gzip模块添加到Nginx

网站加载的速度取决于浏览器下载的所有文件的大小。减少要传输的文件的大小不仅可以使网站加载速度更快,而且对那些必须为带宽使用付费的人来说更便宜。

670
来自专栏Hongten

python开发_platform_获取操作系统详细信息工具

=======================================================

562
来自专栏Java帮帮-微信公众号-技术文章全总结

SSO单点登录使用token机制来验证用户的安全性

登录的业务逻辑 { http:是短连接. 服务器如何判断当前用户是否登录? // 1. 如果是即时通信类:长连接. /...

3805
来自专栏格子的个人博客

Vmware vSphere hypervisor 6.5 安装教程

有vmware账号的,可以直接进入绿色通道登录进行下载,如果没有,可以按照下列步骤选择性操作。

872
来自专栏康怀帅的专栏

macOS PhpStorm Xdebug 使用详解

场景 LNMP 位于 macOS LNMP 位于 Docker LNMP 位于虚拟机中的 Docker php-xdebug 安装 # php也是通...

3234
来自专栏乐沙弥的世界

基于catalog 创建RMAN存储脚本

简言之,将rman的备份恢复命令写成脚本并保存在恢复目录内,恢复目录内的脚本可用性及通用性高于基于文件系统的脚本。

553

扫码关注云+社区