zoukankan      html  css  js  c++  java
  • Centos:基于Git的代码自动部署

    关于在Centos上使用Git做代码管理和自动部署的方案,网上已经有不少教程了。近几天在部署环境的时候碰了不少坑,很大部分都是由于权限太乱导致的,这里详细写一下流程。

     

    1. 自动部署原理

    先讲实现方法和原理。Git服务和仓库都是在服务器上的,服务器上的Web目录和本地都有完整的代码。Git有个叫hook的机制,可以在代码更新时执行回调(执行一段shell)。一般执行流程是开发完成后,通过git push将代码传到服务器git仓库上,这时git hook自动到Web目录git pull,将Web目录下的代码更新。这样就完成了自动部署。

     

    2. 配置用户

    本例Centos版本为7.0,,以apache作服务器。若没有安装git或apache,先安装:

    # yum install httpd
    # yum install git

    修改git用户权限(执行命令权限、用户目录、组、改密码):

    # usermod git -s /bin/bash -d /home/git -g apache
    # passwd git

    如果安装完git后没有git用户,把以上一句 usermod 改成 useradd 就行了。以上命令设置了git用户的家目录和组,把git归属到apache组是因为需要git管理网站目录的文件,同组方便操作。这里要注意的是网上很多教程使用/bin/git-shell作为命令权限,但个人认为不推荐,因为后续还要使用git用户做一些操作,需要基本的shell命令。

     

    3. 创建仓库和网站代码

    使用git用户身份,新建git仓库:

    # su git
    $ git init --bare ~/repo/website.git

    以上表示在git用户的家目录repo文件夹中,建立website.git仓库。

    到网站目录(/var/www/html),克隆一份website代码:

    $ cd /var/www/html
    $ git clone ~repo/website.git

    这样网站目录就有一份仓库的完整代码。

    接下来写hook文件:

    $ cd ~/repo/website.git/hooks
    $ vim post-receive

    在post-receive钩子文件里写以下内容[1]:

    #!/bin/sh
    unset GIT_DIR
    cd /var/www/html/website
    git pull

    编辑后保存退出。以上命令表示cd到网站目录,并git pull更新。随后还要把post-receive改成可执行:

    $ chmod 775 post-receive

    可以看到,以上大部分命令都是以git身份执行的,是因为涉及很多文件操作,如果用其他用户执行则要改权限,以及chown把文件归属给git用户。

     

    最后最后,完成所有操作,才把git的命令权限改回去(用root身份):

    # usermod -s /bin/git-shell

    git用户专门管理git的所有事务,而不能用于登录系统。至于公钥密钥的配置,请自行参考其他资料。

    如果要防止.git被访问,httpd.conf加入以下限制:

    <Files ~ ".git">
        Require all denied
    </Files>

    附上git仓库的地址,用于远程开发克隆,把serverHost换成服务器地址:

    git@serverHost:~/repo/website.git

    参考资料及引用:

    [1] git hook分类:CSDN博客. git钩子. http://blog.csdn.net/hongchangfirst/article/details/46693237

  • 相关阅读:
    设计模式-策略模式
    .NET操作RabbitMQ组件EasyNetQ使用中文简版文档。
    LayIM项目之基础数据获取代码优化,Dapper取代ADO.NET
    干货!手把手教你如何使用第三方通讯服务实现LayIM Socket组件开发。
    几句代码简单实现IoC容器
    .NET Core On Mac 第一步,配置环境
    Func<T,T>应用之Elasticsearch查询语句构造器的开发
    四个人17分钟过桥的问题
    ElasticSearch中的简单查询
    ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(十四)之漏掉的客服消息
  • 原文地址:https://www.cnblogs.com/kavmors/p/5483230.html
Copyright © 2011-2022 走看看