服务端自动部署静态项目的几种方法

原创 2016年08月31日 11:19:33

使用场景

最近帮忙前端把一个静态的项目(挂在coding.net的仓库里)挂上自己的生产服务器 ,但是由于前端不会使用SSH登录服务器自行pull+checkout,因此我想了几种能让前端接受的方法把这个静态项目自动部署到服务器上。

node服务器 + 命令行脚本

这种方法比较简单粗暴,用node搭一个简单的服务器监听某一个端口,当前端访问这个端口的时候执行命令行脚本自动更新项目。
分别使用了node的http模块以及child_process模块:

var http = require("http");
var exec = require("child_process").exec;

http.createServer(function(request, response){
   exec("cd /path/to/project");
   exec("git pull origin branch-name");
   exec("git checkout HEAD");
   response.writeHead(200, {"Content-Type": "text/plain"});
   response.write("OK");
   response.end();
 }).listen(9999);

由于项目存储在coding.net上,如果采取传统的HTTPS认证,则每次认证都需要输入用户名和密码,这样的话以上脚本执行就不成功了。
因此可以选择将服务器的公钥添加到coding.net的项目公钥上,项目公钥只有读的权限,没有写的权限,因此很适合部署在服务器上面。
最后,在git clone的时候如果使用的是HTTPS的clone链接,可以通过以下命令改成使用SSH协议的链接。

git remote set-url [alias] [url]

Git Hook

在这里我不会展开对Git Hook的深入分析,有兴趣的参考Git关于钩子的官方文档
钩子分为客户端的钩子以及服务端的钩子,参考Git自定义钩子
简单的把钩子看成是事件的回调函数,当触发某一个动作(如push,commit)的时候,就会调用这个钩子,这个钩子通常在.git目录下的hooks里,里面提供了各种常用钩子的例子,不过后缀名都是sample,如果你希望使用其中的钩子,则必须去掉sample的后缀名。
值得注意的是,钩子不一定是shell scripts,也可以是Python,只要在第一行注释里面声明清楚就可以。
在简单的了解钩子的作用以后,结合之前的使用场景,实现的目的很明确,前端在提交(push)到远程主机的时候运行git hook里面更新静态项目的脚本,也就是编写push事情触发时的钩子。

Git init 与Git init –bare project.git

git的仓库是分为正常的仓库和裸(bare)仓库的,正常的仓库里面你可以进行任何正常的git操作,但在bare仓库里面不能进行类似git add以及git commit这样的操作,因为bare仓库是没有work-tree的。
说到这里,大概也明白了bare仓库其实就是类似于远程主机上的公共代码库(git对bare仓库默认的后缀名为.git),git clone这个公共代码库的链接就能得到一个正常的仓库。
这是从github上拿到的jquery的链接:

https://github.com/jquery/jquery.git

也就是说,在github的服务器上面放着这样一个jquery的bare仓库。
以下是参考的stack overflow链接:
What is the difference between “git init” and “git init –bare”?
How do you use “git –bare init” repository?

远程部署

  • 首先在自己的开发服务器上准备一个bare仓库,将自己的服务器当成远程主机。
cd ~
git init --bare project.git

因此,如果通过SSH访问我们服务器的git仓库,那么链接就是:

ssh://user@domian:/root/project.git
  • 在本地的开发机将自己的服务器作为远程主机加入并推送你想要推送的分支。
git remote add server ssh://user@domian:/root/project.git
git push server branch-name

如果使用了git remote -v命令查看所有的主机,会发现同一个远程主机有两条链接,分别是用于fetch和push的两条链接,这是为了读和写都能够使用不同的协议。

  • 在服务器上面再部署另一个正常的项目仓库,这个仓库是用于被外界访问的。
git clone /root/project.git
  • 最后,在bare仓库下的hook目录下创建或编写post-receive脚本,post-receive用于bare仓库收到push的时候运行。
#!/bin/sh

unset GIT_DIR
echo "远程更新"

DeployPath='/root/project'

cd ${DeployPath}
git pull origin branch-name
git checkout HEAD

值得注意的是,你还要更改post-receive权限,因为你当前用户可能没有执行权限。

chmod 755 ./post-receive

OK,此时只要在本地的开发机里面推送到server这台远程主机就能自动更新外界访问的静态项目了。
当然,以上所有操作的顺利进行都是基于本地的开发机的公钥已经放在服务器上面了。

Coding Pages + nginx proxy

在coding中开启项目Pages的服务,部署上去以后,当请求自己的服务器的时候proxy_pass到对应的coding的url。

server {
        resolver 8.8.8.8;
        listen 80 default_server;
        server_name  _;
        index index.html;

        location / {
            proxy_pass http://{user_name}.coding.me/{project_name}$request_uri;
        }
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。

tomcat动态部署和静态部署

一、静态部署 1、直接将web项目文件件拷贝到webapps 目录中 Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用。所以可以将JSP程序...
  • t0404
  • t0404
  • 2016年06月22日 10:09
  • 3872

静态资源web服务器配置详解

本文转载自 “许鼎的博客” 博客:http://xuding.blog.51cto.com/4890434/1743666 一、Nginx概述  1.Nginx简介           解...
  • lovemysea
  • lovemysea
  • 2017年07月17日 16:04
  • 640

tomcat动态部署和静态部署

一、静态部署 1、直接将web项目文件件拷贝到webapps 目录中 Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用。所以可以将JSP程序...
  • t0404
  • t0404
  • 2016年06月22日 10:09
  • 3872

阿里云的Tomcat服务器无法访问JavaWeb项目静态资源的解决办法

问题描述: 一个如下所示的个人主页JavaWeb项目: 默认首页:index.jsp 然后通过域名+项目名访问的结果显示为:...
  • zhangliangzi
  • zhangliangzi
  • 2016年05月09日 10:12
  • 6276

Spring Boot 微服务项目的推荐部署方式

如果开发过spring boot的程序,应该都知道,使用spring boot官方的maven打包插件(spring-boot-maven-plugin) 来打包,打出来的jar包一般有40M以上. ...
  • lc0817
  • lc0817
  • 2016年12月11日 19:39
  • 3243

服务端强行要求弹出客户端登录窗口自动登录方法

想做点东西练练javascript,于是打算为饭否AIR客户端爱饭加上额外的功能,例如上传图片等,先尝试了使用javascript验证和发送饭否消息,仅这个就花了不少时间,很多时间花在了去除低级错误上...
  • skiof007
  • skiof007
  • 2012年06月21日 16:58
  • 646

这是一个服务端自动验证框架,可以对JavaBean中的属性以及方法中参数列表进行自动验证

默认支持的验证规则MaxLengthValidate 验证最大长度 MaxValueValidate 验证最大值 MinLengthValidate ...
  • guixiang155cm
  • guixiang155cm
  • 2015年12月09日 14:33
  • 2634

isapi_Rewrite静态页面映射组件服务端

  • 2008年11月07日 10:40
  • 1.18MB
  • 下载

CAS服务端部署

  • 2017年05月16日 15:41
  • 757KB
  • 下载

Cas服务端部署+认证采用MD加密方式

  • 2017年11月21日 16:52
  • 43.04MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:服务端自动部署静态项目的几种方法
举报原因:
原因补充:

(最多只允许输入30个字)