Node 기반js의 서버 자동화 배치 구축 실록

5199 단어
  • Node 기반js의 서버 자동화 배치 구축 실록
  • 서버에 Node를 설치합니다.js
  • 창고 정리, 서버 스크립트 재부팅
  • Github 저장소의 Webhook 설정 구성
  • Node 구성js 스크립트
  • 기타 질문

  • Node 기반js의 서버 자동화 배치 구축 실록


    요약: 본고는 주로 제가 서버에서 GitHub의 Webhooks를 사용하여 사이트 자동화 배치를 하는 과정을 기록합니다.최종 효과: 개발 단말기가 Github 창고에 코드를 전송하면 서버 측이 자동으로 창고를 끌어당기고 서버를 다시 시작합니다.구축 과정은 주로 lovelucy를 참고했다.info의 블로그.
    구축 환경: Vultr 서버를 사용하고 있으며 시스템 버전은 CentOS 7 x64입니다.

    서버에 Node를 설치합니다.js


    가장 간단한 방법: EPEL 라이브러리에서 Node를 설치합니다.js
    $ sudo yum install epel-release
    $ sudo yum install nodejs
    //  
    $ node --version
    $ npm --version

    (주: 본인의 테스트를 거치지 않은 버전은 상대적으로 늙을 수 있습니다.)
    나는 개인적으로 구축하는 과정에서 Node를 사용했다.js 홈페이지의 Linux 바이너리 파일로 Node를 설치합니다.js.설치 패키지를 다운로드할 때는 Linux 버전에 유의해야 합니다.(X86/X64)
    // Node.js  
    $ cd /usr/local/bin 
    
    // Node.js   Linux  
    $ wget https://nodejs.org/dist/v8.12.0/node-v8.12.0-linux-x64.tar.xz
    
    //  
    $ tar xvJf node-v8.12.0-linux-x64.tar.xz
    
    //  
    $ vi /etc/profile
    
    //   ====================
    export NODE_HOME=/usr/local/bin/nodejs
    
    export PATH=$PATH:$NODE_HOME/bin
    
    export NODE_PATH=$NODE_HOME/lib/node_modules
    
    //   ====================
    
    //  source , 
    $ source /etc/profile 
    
    //  
    $ node -v
    $ npm -v

    이로써 서버에 최신 버전의 Node를 설치했습니다.js.

    창고 가져오기, 서버 재시작 스크립트 작성


    참고할 수 있는 예: deploy.sh
    #!/bin/bash
    
    WEB_PATH='/home/nodejs-be-demo'
    
    echo "Start deployment"
    cd $WEB_PATH
    echo "pulling source code..."
    git reset --hard origin/master
    git clean -f
    git pull
    git checkout master
    npm install
    npm run start
    echo "Finished."

    Github 저장소의 Webhook 설정 구성

  • 설정할 Github의 설정 페이지에서 Webhooks 옵션을 찾으면 "Add webhook"을 누르십시오.
  • Payload URL(POST 요청 서버 URL)을 구성합니다.
  • 시크릿.
  • Content-type 선택application/json.
  • 나머지 기본값은 입니다.

  • Node를 구성합니다.js 스크립트


    Node를 구성하고 있습니다.js 스크립트를 설치하기 전에 의존을 설치해야 합니다. 여기에는 중간부품인github-webhook-handler와 프로세스 관리 서비스forever가 사용됩니다.
    $ npm install -g github-webhook-handler
    $ npm install -g forever

    스크립트 내용은 다음과 같습니다. deploy.js
    var http = require('http')
    var createHandler = require('github-webhook-handler')
    var handler = createHandler({ path: '/autodeploy', secret: 'mySecret' }) 
    //   secret   GitHub  
    
    function run_cmd(cmd, args, callback) {
    var spawn = require('child_process').spawn;
    var child = spawn(cmd, args);
    var resp = "";
    
    child.stdout.on('data', function(buffer) { resp += buffer.toString(); });
    child.stdout.on('end', function() { callback (resp) });
    }
    
    http.createServer(function (req, res) {
    handler(req, res, function (err) {
        res.statusCode = 404
        res.end('no such location')
    })
    }).listen(7777)
    //  
    
    handler.on('error', function (err) {
    console.error('Error:', err.message)
    })
    
    handler.on('push', function (event) {
    console.log('Received a push event for %s to %s',
        event.payload.repository.name,
        event.payload.ref);
    run_cmd('sh', ['./deploy.sh'], function(text){ console.log(text) });
    })
    
    /*
    handler.on('issues', function (event) {
    console.log('Received an issue event for % action=%s: #%d %s',
        event.payload.repository.name,
        event.payload.action,
        event.payload.issue.number,
        event.payload.issue.title)
    })
    */

    여기 노드.js가 감청한 것은 7777 포트입니다. 당신도 Nginx 역방향 에이전트를 사용하여 80 포트로 갈 수 있습니다.
    다음 명령으로 테스트를 해보면push를 받으면 컨트롤러에 출력이 있습니다.
    $ node deploy.js

    만약 아무런 문제가 없다면, forever는 운전할 수 있을 것이다.
    $ forever start deploy.js

    기타 문제


    배치 과정에서 해당 포트에 접근할 수 없는 문제가 발생할 수 있으므로 서버의 방화벽 설정을 확인해야 합니다.대부분의 서버는 화이트리스트 메커니즘으로 특정한 포트만 개방한다.
    CentOS 7에서 기본적으로 사용되는 방화벽은 FirewallD입니다. 이전 버전은 iptables를 검색하십시오.별도: FirewallD와 iptables의 차이점?
    FirewallD 관련 명령:
  • 서비스를 시작하고 시스템 부트 방식으로 서비스를 시작
     sudo systemctl start firewalld
     sudo systemctl enable firewalld
  • 중지 및 비활성화
     sudo systemctl stop firewalld
     sudo systemctl disable firewalld
  • 방화벽 상태를 검사한다.출력은 실행 중이거나 not 실행 중일 것입니다.
     sudo firewall-cmd --state
  • 임의의 포트/프로토콜을 허용하거나 거부합니다(예: 12345 포트, 이 규칙은public 구역에서)
     sudo firewall-cmd --zone=public --add-port=12345/tcp --permanent
     sudo firewall-cmd --zone=public --remove-port=12345/tcp --permanent
  • FirewallD를 다시 로드하면 규칙이 즉시 적용됩니다
     sudo firewall-cmd --reload
  • 특정 영역의 모든 구성 보기
     sudo firewall-cmd --zone=public --list-all
    예제 출력:
     public (default, active)
         interfaces: ens160
         sources:
         services: dhcpv6-client http ssh
         ports: 12345/tcp
         masquerade: no
         forward-ports:
         icmp-blocks:
         rich rules:
  • 자세한 FirewallD 구성은 CentOS의 FirewallD 설명서를 참조하십시오.
    다음으로 전송:https://www.cnblogs.com/JerryChan31/p/9746479.html

    좋은 웹페이지 즐겨찾기