새소식

⇥ DevOps Tech 🙋🏻‍♀️/✏️ Ansible

Ansible Role 을 이용한 노드 설치 자동화

  • -
반응형

Ansible Role 노드 설치 자동화 목차

  • 관련 글
  • 동작 정리
  •  

     

     

    관련 글

    2023.10.17 - [✏️ Ansible] - Ansible Tower (AWX) 설치 방법

    2022.10.06 - [✏️ Ansible] - Ansible Playbook

    2023.10.18 - [✏️ Ansible] - Ansible Role 작성 방법

    이전에 Ansible Tower 설치방법과 Playbook , Role 작성 방법에 대해 포스팅 했었다.
    그럼 실제로 이런 내용을 정리하여 Node 설치를 자동화 하는 방법에 대해 작성하려고 한다. 매우 간단한 내용이며 Node 뿐 아니라 Tomcat 혹은 반복해서 하던 모든 일들을 자동화 할 수 있기 때문에 매우 편리한 툴이라고 생각한다.

    동작 정리

    먼저 Ansible 을 이용해 수행할 동작들을 정리해야 한다. 자동으로 수행할 내용이 어떤 것인지 사전에 먼저 작성해놓으면 롤을 만들 때 순서에 맞게 쉽게 만들 수 있기 때문이다.

    먼저 설치할 노드 버전을 다운받는다. 여기서 자동으로 설치할 버전은 Node.18.17.1 이고 공식 문서에서 다운로드 받았다.
    https://nodejs.org/ko/blog/release/v18.17.1

     

    Node v18.17.1 (LTS) | Node.js

    Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

    nodejs.org

    이전에 작성했던 roles 구조의 files 디렉토리에 해당 압축파일을 저장해놓고 롤북을 작성해주었다.
    files 디렉토리는 role이 수행될 때 사용하는 파일을 저장하는 곳이다.

    노드 설치의 과정은 간단하다.

    1. 노드가 설치되어 있는지 확인
    2. 설치되어 있지 않다면 files 의 노드 설치파일 압축해제
    3. 압축해제 했다면 해제한 디렉토리의 이름 변경
    4. node, npm 에 대한 symlink 생성

    위와 같은 동작을 자동화 하고 멱등성을 유지할 수 있도록 role 을 작성하면 아래와 같다.

    - name: Check node directory
      stat: path=/usr/local/node18
      register: dir_node
    
    # Unzip the file and deliver it to the target server
    - name: extract_node18
      unarchive:
        src: ../files/node-v18.17.1-linux-x64.tar.xz
        dest: /usr/local/
        remote_src: no
      when: dir_node.stat.exists == false
    
    # move dir
    - name: move_node_directory
      command: mv /usr/local/node-v18.17.1-linux-x64 /usr/local/node18
      when: dir_node.stat.exists == false
    
    # symbolic link
    - name: create_symlink_node18
      file:
        src: /usr/local/node18/bin/node
        dest: /usr/bin/node
        state: link
    
    # symbolic link
    - name: create_symlink_npm
      file:
        src: /usr/local/node18/lib/node_modules/npm/bin/npm-cli.js
        dest: /usr/bin/npm
        state: link

    dir_node 변수에 node18 경로가 있는지 확인한다. 즉 설치가 되어있는지 여부를 체크한 후 만약 설치되어 있지 않다면 files 에 저장해두었던 node 설치 파일의 압축을 해제한다. 그리고 node18 디렉토리로 변경해준다.
    remote_src 옵션은 압축해제 할 파일이 원격 서버에 존재하는지 여부이며 기본 값은 no 이다. 만약 no라면 files 디렉토리에서 가져와서 수행하게 된다.

    압축해제하고 디렉토리 명을 변경했다면 node 실행 파일과 npm 실행 파일을 /usr/bin 경로에 symlink 를 생성해준다.
    이제 해당 원격 장비에 접속해서 node, npm 명령어를 수행하면 정상적으로 노드가 설치되고 사용이 가능함을 확인할 수 있다.

    반응형
    Contents

    포스팅 주소를 복사했습니다

    이 글이 도움이 되었다면 공감 부탁드립니다.