이전에 Ansible Tower 설치방법과 Playbook , Role 작성 방법에 대해 포스팅 했었다. 그럼 실제로 이런 내용을 정리하여 Node 설치를 자동화 하는 방법에 대해 작성하려고 한다. 매우 간단한 내용이며 Node 뿐 아니라 Tomcat 혹은 반복해서 하던 모든 일들을 자동화 할 수 있기 때문에 매우 편리한 툴이라고 생각한다.
동작 정리
먼저 Ansible 을 이용해 수행할 동작들을 정리해야 한다. 자동으로 수행할 내용이 어떤 것인지 사전에 먼저 작성해놓으면 롤을 만들 때 순서에 맞게 쉽게 만들 수 있기 때문이다.
이전에 작성했던 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 명령어를 수행하면 정상적으로 노드가 설치되고 사용이 가능함을 확인할 수 있다.