[转] 使用git自动部署简单网站
要做什么
假设你有一个博客,有一台网站服务器(或者很多台作负载均衡的服务器),当你的博客要升级时,你可能要在你自己的电脑上写好代码(可能包括本地调试好),然后提交到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脚本能做什么,重 启服务器?触发构建?把文件部署到别的机器上……尽情地发挥你的想象吧!
[转] 使用git自动部署简单网站的更多相关文章
- 基于webhook方案的Git自动部署方案
之前已经用Git实现了自己博客的提交自动部署,并自动提交到GitHub和coding以备不时之需.平时项目代码都托管在Coding或者GitHub上,也已经用上了coding提供的webhook功能, ...
- Git自动部署
Git自动部署文件位于repository下面的hooks里的post-receive #!/bin/sh set -e git-update-server-info gitosis-run-hook ...
- git自动部署到服务器
1.现在服务器配置空仓库 mkdir -p test/project.git chmod 777 test cd test/project.git/ git init --bare . cd .. c ...
- 利用Git搭建自动部署的Laravel环境 - 钟晨宇的博客 - CSDN博客
目标:服务器上搭建Laravel环境,本地使用IDE进行开发,使用Homestead做本地调试环境,代码提交后自动部署到服务器Root目录下. 下面是整个流程的示意图: 1. 准备工作,搭建LNMP ...
- Git 部署 Web 网站
/*************************************************************************** * Git 部署 Web 网站 * 说明: * ...
- 【前端】CentOS 7 系列教程之四: 配置 git 服务器自动部署
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/linux_4.html 安装pm2守护进程,备用 npm install -g pm2 创建/srv/www文件夹 ...
- 阿里云ECS云服务器CentOS部署个人网站
ping了一下coding pages和阿里云服务器的速度,意外感觉coding的速度反而更快.不过为了折腾,还是把博客迁移到阿里云,跌跌撞撞遇到很多坑,大多是由于对指令不熟悉以及部分教程省略了部分步 ...
- **使用 Git Hook 实现网站的自动部署
http://www.tuicool.com/articles/3QRB7jU 自动化能解放人类的双手,而且更重要的是,因为按照规定的流程来走,也减少了很多误操作的产生.不知道大家平时都是怎么样更新自 ...
- 做了一个简易的git 代码自动部署脚本
做了一个简易的git 代码自动部署脚本 http://my.oschina.net/caomenglong/blog/472665 发表于2个月前(2015-06-30 21:08) 阅读(200 ...
随机推荐
- ASP.NET MVC轻教程 Step By Step 12——客户端验证
前面两节使用的两种数据验证方法都是在服务器端进行的,也就是提交了表单,数据回传给服务器才能验证.这样会带来两个问题,一是用户体验不好,用户提交了表单之后才知道存在问题:二是会给服务器带来额外的压力.我 ...
- 手动实现 NSTabViewController 的 Rect Transition 及 Propagate Title-b
不知为何 我在 OS X 10.11.5 及 Xcode 7.3 的 Storyboard 中设置 Tab View Controller 的 Transition 属性时,Tab View Cont ...
- java答疑
问 什么是 Java 的字节码? 答 它是程序的一种低级表示,可以运行于 Java 的虚拟机.将程序抽象为字节码可以保证 Java 程序员的 代码能够运行在各种设备之上. 问 Java 允许整型溢出并 ...
- node场景
http://www.zhihu.com/question/19653241 http://www.csdn.net/article/2012-05-03/2805296 http://limu.it ...
- Java System类看到的一点小记
System类 位置java.lang包中 是final类,不能被继承,不能被修改 ,不能被实例化 private System(){}私有的构造函数,不允许被其他对象进行实例化 public fin ...
- 经典的单例模式c3p0来控制数据库连接池
package com.c3p0.datapools; //数据库连接池 单例模式 import java.sql.Connection; import java.sql.SQLException; ...
- dump iot表
SQL> create user scan identified by scan default tablespace users; User created. SQL> grant db ...
- bzoj3166
首先不难想到穷举次大数然后我们只要找到满足这个数是次大数的最大区间即可显然答案只可能是这两种[LL[i]+1,R[i]-1]和[L[i]+1,RR[i]-1]L[i]表示这个数ai左侧第一个比它大的数 ...
- 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
- VisualBox ubuntu14.04 64位 android4.4.4源码编译总结
转载请保留出处:http://www.cnblogs.com/wi100sh/p/4337907.html 折腾了好几天,今天终于编译通过,用了4个多小时,太不容易了.如下图所示: 软件环境 虚拟机: ...