Ansible 배포 노드. js
난이도 지수: 4 성 (만 성 5 성) 기술 지수: 5 성 (만 성 5 성) 이론 지수: 3 성 (만 성 5 성) 대상: 자동화 운영 & 초 중급 운영
디 렉 터 리 공유
1.1 추가 소스 1, 2 를 추가 하여 Node. js app 4, 3 을 배치 하고 Node. js app 6 1.4 Node. js app 서버 를 실행 합 니 다.질문
다음은 우리 의 CentOS 6. x 서버 에 Nodejs 를 설정 하고 간단 한 nodejs 인 스 턴 스 를 시작 할 것 입 니 다. 이 서버 는 간단 한 구조 가 있 습 니 다.
시 작 했 습 니 다. 우선 플레이 북 파일 을 만 듭 니 다. 우 리 는 가능 한 한 간단하게 유지 할 것 입 니 다.
---
- hosts: all
tasks:
이 플레이 북 을 실행 하 는 호스트 를 정의 한 다음 일련의 tasks 를 보 여 줍 니 다.
1.1 추가 소스 추가
서버 를 사용 하려 고 할 때 패 키 지 를 지정 하거나 최신 버 전에 사용 할 수 있 도록 관리자 가 먼저 추가 소스 를 추가 합 니 다.다음 스 크 립 트 는 node. js 와 유사 한 패 키 지 를 얻 을 수 있 도록 EPEL 과 Remi 소스 를 추가 하고 싶 습 니 다.셸 스 크 립 트 로 처리 하면 다음 과 같 습 니 다.
# Remi GPG – : http://rpms.famillecollet.com/RPM-GPG-KEY-remi
wget http://rpms.famillecollet.com/RPM-GPG-KEY-remi \
-O /etc/pki/rpm-gpg/RPM-GPG-KEY-remi
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-remi
# Remi repo, Remi repo PHP
rpm -Uvh --quiet \
http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# EPEL
yum install epel-release
# Node.js (npm + ).
yum --enablerepo=epel install npm
이 셸 스 크 립 트 는 EPEL 과 Remi 의 GPG keys 를 가 져 온 다음 원본 을 추가 하고 마지막 으로 Nodejs 를 설치 하 는 데 사 용 됩 니 다.이것 은 간단 한 배치 에 문제 가 없 지만, 이렇게 많은 명령 을 실행 하 는 것 은 비교적 어 리 석 은 방법 입 니 다. 만약 당신 의 연결 이 부주의 로 끊 어 지면, 당신 의 스 크 립 트 도 멈 출 것 입 니 다.만약 이때, 당신 의 대본 이 막 완성 되 었 다 면?
알림: 지정 한 절 차 를 뛰 어 넘 으 려 면 GPG keys 를 추가 하 는 절 차 를 뛰 어 넘 을 수 있 습 니 다. 명령 을 실행 할 때 - nogpgcheck 을 추가 하거나 Ansible 에서 yum 모듈 에 disable 을 설정 하 십시오.gpg_check 인 자 는 yes 이지 만 GPG keys 를 추가 하 는 것 이 좋 습 니 다.GPG 를 사용 하면 가방 의 작성 자가 누구 인지, 가방 에 수정 원고 가 있 는 지 알 수 있 습 니 다. 당신 이 무엇 을 하고 있 는 지 알 지 않 는 한 GPG 검 사 를 금지 하지 않 는 것 이 좋 습 니 다.
Ansible 은 일 을 더욱 건장 하 게 만 들 었 습 니 다. 아래 에 Ansible 을 사용 한 사례 는 더욱 상세 해 보 입 니 다. 이 는 위의 셸 스 크 립 트 와 같은 기능 을 가지 지만 이해 하기 쉽 고 구조 화 되 었 습 니 다.다음은 Ansible 의 변수 와 다른 유용 한 특성 을 사용 합 니 다.위의 플레이 북 을 이어서 우 리 는 계속 아래로 썼 다.
tasks:
- name: Import Remi GPG key
rpm_key: "key={{ item }} state=present"
with_items:
- "http://rpms.famillecollet.com/RPM-GPG-KEY-remi"
- name: Install Remi repo.
command: "rpm -Uvh --force {{ item.href }} creates={{ item.creates }}"
with_items:
- href: "http://rpms.famillecollet.com/enterprise/remi-release-6.rpm"
creates: "/etc/yum.repos.d/remi.repo"
- name: Install epel repo
yum: name=epel-release state=present
- name: Stop the firewall
service: name=iptables state=stopped
- name: Install NodeJS and npm
yum: name=npm state=present enablerepo=epel
구체 적 인 절 차 를 살 펴 보 자.
Node. js app 서버 가 있 습 니 다. 간단 한 Node. js app 을 배치 하여 80 포트 에서 HTTP 요청 에 응답 합 니 다.
1.2 Node. js app 배치
이 단 계 는 우리 서버 에 간단 한 Node. js app 을 배치 하 는 것 입 니 다.우선, 새 폴 더 를 만 드 는 것 을 통 해 간단 한 Node. js app 을 만 듭 니 다. 이 폴 더 는 위의 ymal 파일 과 같은 경로 아래 에 있 습 니 다.그리고 새 파일, app. js 를 만 들 고 이 폴 더 에서 아래 파일 을 편집 합 니 다.
//app.js
// express .
var express = require('express'),
app = express.createServer();
// ”/” 'Hello World'.
app.get('/', function(req, res){
res.send('Hello World! Yunzhonge');
});
// 80
app.listen(80);
console.log('Express server started successfully.')
node. js 의 문법 과 우리 의 사례 를 걱정 하지 마 세 요.우 리 는 빠 른 배치 사례 가 필요 합 니 다. 이 사례 는 Python, Perl, Java, PHP 또는 다른 프로 그래 밍 언어 로 쓸 수 있 습 니 다. 그러나 Node 는 매우 간단 한 언어 이기 때문에 간단 한 경량급 환경 을 운영 합 니 다. 이것 은 매우 좋 은 언어 로 서버 를 테스트 합 니 다.
이 작은 app 은 Express (간단 한 Node 의 HTTP 프레임 워 크) 에 의존 하기 때문에 저 희 는 package. json 파일 을 통 해 NPM 에 의존 관 계 를 알려 야 합 니 다. 이 파일 은 app. js 와 같은 경로 아래 에 있 습 니 다.
{
"name": "examplenodeapp",
"description": "Example Express Node.js app.",
"author": "yunzhonghe",
"dependencies": {
"express": "3.x.x"
},
"engine": "node >= 0.10.6"
}
그리고 다음 내용 을 플레이 북 에 추가 하고 앱 전 체 를 이 서버 에 복사 한 다음 npm 에 의존 하 는 것 을 다운로드 하도록 합 니 다. (여 기 는 express 입 니 다.)
- name: Ensure Node.js app folder exists.
file: "path={{ node_apps_location }} state=directory"
- name: Copy example Node.js app to server.
copy: "src=app dest={{ node_apps_location }}"
- name: Install app dependencies defined in package.json.
npm: "path={{ node_apps_location }}/app"
우 리 는 지금 forever 를 사용 하여 이 app 을 시작 합 니 다.
- name: Check list of running Node.js apps.
command: forever list
register: forever_list
changed_when: false
- name: Start example Node.js app.
command: "forever start {{ node_apps_location }}/app/app.js"
when: "forever_list.stdout.find('{{ node_apps_location }}/app/app.js') == -1"
이 플레이 에서 우 리 는 두 가지 새로운 일 을 했다.
두 번 째 play 는 실제로 forever 를 사용 하여 이 app 을 시작 했다.이 앱 을 시작 할 수 있 습 니 다. node {{node apps location}} / app / app. js 를 호출 할 수 있 습 니 다. 하지만 이 방식 은 더 제어 하기 어렵 습 니 다.
Forever 가 관리 하 는 Node app 을 추적 한 다음 에 저 희 는 Forever 의 list 옵션 을 사용 하여 일련의 실행 app 을 인쇄 합 니 다.우리 가 이 플레이 북 을 처음 실 행 했 을 때 이 list 는 분명히 비어 있 었 지만 비어 있 는 것 으로 판단 되면 실 행 됩 니 다. 만약 app 이 실행 중이 라면 다른 인 스 턴 스 를 시작 하지 않 을 것 입 니 다. 이러한 상황 을 피하 기 위해 서 우 리 는 when 문 구 를 사용 하여 app 의 경로 가 forever list 의 출력 정보 에 없 을 때 이 app 을 시작 합 니 다.
1.4 Node. js app 서버 요약.
이때 플레이 북 을 완성 한 다음 에 간단 한 Node. js app 을 설치 하여 80 포트 에서 HTTP 요청 에 응답 합 니 다.이 플레이 북 을 한 서버 에서 실행 하기 위해 아래 명령 을 사용 하여 node 를 전달 합 니 다.apps_location 변 수 는 명령 을 통 해
ansible-playbook --extra-vars="node_apps_location=/usr/local/opt/node"
서버 가 서버 설정 과 배 치 를 마 쳤 을 때 브 라 우 저 에서 테스트 서버 의 호스트 이름 을 지정 하여 효 과 를 봅 니 다.
간단 하지만 유효 합 니 다. 50 줄 이하 의 YMAL 파일 에 Nodejs 응용 서버 를 설정 하 였 습 니 다.
여기 서 마 치 겠 습 니 다. 여러분 의 관심 에 감 사 드 립 니 다.
1.5 문제:
문제 1: 내 가 100 대의 서버 에 nodejs app 배 치 를 진행 할 때 20 대가 중단 되 었 을 때 다시 실행 하 겠 습 니 다. 그 는 어떤 과정 입 니까? 앞 에 설 치 된 패 키 지 를 진행 하 는 설정 은 다시 실행 할 것 입 니까? 아니면 건 너 뛸 것 입 니까?번 거 로 운 황소 해답: Ansible 자체 가 멱 등 특성 을 가지 고 있어 모든 작업 의 안전성 을 효과적으로 보장 할 수 있 습 니 다. 실행 에 실패 한 경우 자동 으로 홈 디 렉 터 리 에서 해당 하 는 오류 서버 목록 을 생 성 합 니 다. - limit 을 통 해 나머지 작업 을 다시 목적 성 있 게 수행 합 니 다.
문제 2: 대 협 의 nodejs 는 도 구 를 통 해 배 치 된 것 입 니까?npm 복잡 하 다.
질문 3: -- extra - vars = 기업 에서 많이 응용 되 나 요?답: 많 습 니 다. 적어도 저희 업무 에서 계속 응용 되 었 습 니 다. 몇 기 전의 공유 도 보 셨 을 것 입 니 다. 이 매개 변 수 는 많이 응용 되 었 습 니 다.하지만 홈 페이지 에 소 개 된 것 은 한 몫 했다.많이 쓰 시 길 바 라 겠 습 니 다.
질문 4: 제 가 ansible 을 통 해 임 무 를 수행 하 는 과정 에서 임 무 를 장시간 카드 주인 에 게 맡 기 는 원인 이 발생 할 수 있 습 니 다. 이 는 보통 어떤 부분 을 다시 조사 해 야 합 니까? 답: 많은 친구 들 이 이 문 제 를 만 났 을 때 계속 물 었 습 니 다. 개인의 경험 에 따라 다음 과 같은 몇 가지 측면 에서 조사 하 는 것 을 권장 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.