[转] 使用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 ...
随机推荐
- EOF
Process to end of file 就是处理到文件的结束 以经典的 A + B Problem 为例 把每一行的两个数字加起来,然后打印出来,直到文件末尾 c 语言表示:
- Xcode-程序开发设计-01UIKit 框架
CGRect中的前缀:CoreGraphics.frameworksUIView中的前缀:User InterFace 属于UIKit的框架NS前缀,NS是NextStep 对象方法:辞去第1响应者- ...
- u-boot烧写Linux及系统整个启动过程
一.烧写文件 u-boot: u-boot.bin linux kernel: uImage Filesystem: root.bin(yaffs) 二.烧写步骤 1.烧写u-boot tftp 0 ...
- mp4下载完后才能播放的问题
下载完后才能播放的问题.mp4视频有metadata,通常在文件尾部,而flash读到这个metadata才开始播放,解决办法是用工具处理一下mp4,把它的metadata移至文件头部. 推荐工具:m ...
- android学习小例子——验证码倒计时按钮
1.activity_main.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/andro ...
- [BZOJ 1028] [JSOI2007] 麻将 【枚举+贪心判断】
题目链接:BZOJ - 1028 题目分析 枚举听的是哪种牌,再枚举成对的是哪种牌,再贪心判断: 从1到n枚举每一种牌,如果这种牌的个数小于0,就返回不合法. 将这种牌的张数 % 3, 剩下的只能和 ...
- 【UVA1371】Period (二分+DP)
题意: 给出两个字符串A,B将B分解成若干个子字符串,然后每个子字符串都要经过编辑变成字符串A,所有子串中编辑最多的次数即为当前状态下的最大编辑次数,要求求最小的最大编辑次数. 编辑操作包括修改.删除 ...
- 搭建DirectUi开发平台
DirectUi的效果可以使用GDI.GDI+.DirectX.OpenGL实现,常用的有GDI和GDI+,后两种有杀鸡用牛刀的感觉.在网络上能找到此方面的教材 现在的软件越来越多的有很炫目的界面,看 ...
- Spring MVC 解读——<mvc:annotation-driven/>(转)
转自:http://my.oschina.net/HeliosFly/blog/205343 Spring MVC 解读——<mvc:annotation-driven/> 一.Annot ...
- Activity 怎样获得另一个xml布局文件的控件
两个布局文件,一个main.xml,一个main2.xml,一个MActivity,在MActivity的onCreate()里设置的是setContentView(R.layout.main).现在 ...