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 설정 구성
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
sudo firewall-cmd --state
sudo firewall-cmd --zone=public --add-port=12345/tcp --permanent
sudo firewall-cmd --zone=public --remove-port=12345/tcp --permanent
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:
다음으로 전송:https://www.cnblogs.com/JerryChan31/p/9746479.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.