13년차의 서버실

서버, 인프라, 홈랩 기술 블로그

Ansible로 홈랩 자동화 입문 — 인벤토리와 첫 플레이북

홈랩에 서버가 몇 대만 넘어가도 “하나하나 SSH 접속해서 똑같은 설정” 반복이 지옥이 됩니다. 저는 그래서 Ansible을 씁니다. 제어 노드 한 대에서 여러 서버를 동시에, 일관되게 설정하는 자동화 도구죠. 홈랩에 Ansible 학습 환경을 꾸리고 쓰는 법을 입문자 눈높이로 정리합니다.

1. Ansible이 좋은 이유

  • 에이전트 불필요: 관리 대상에 뭘 설치할 필요 없이 SSH만 되면 됩니다.
  • 멱등성(idempotent): 같은 플레이북을 몇 번 돌려도 결과가 같습니다(이미 된 건 건너뜀).
  • YAML: 사람이 읽는 선언형 문법이라 진입장벽이 낮습니다.

2. 홈랩 학습 토폴로지

저는 제어 노드 1대 + 관리 대상 여러 대로 학습 랩을 구성했습니다.

역할 설명
제어 노드(control) Ansible 설치, 여기서 명령 실행
관리 대상(node1~3) SSH로 제어받는 서버들

Proxmox에서 cloud-init 템플릿으로 노드 몇 대를 찍어내면 학습 환경이 몇 분 만에 완성됩니다.

3. 설치와 인벤토리

# 제어 노드에 설치
sudo apt install -y ansible

# SSH 키를 관리 대상에 배포(비밀번호 없이 접속)
ssh-copy-id user@node1

인벤토리는 “누구를 관리할지” 목록입니다.

# inventory.ini
[webservers]
node1 ansible_host=10.0.0.11
node2 ansible_host=10.0.0.12

[all:vars]
ansible_user=user
# 연결 확인 (전체에 ping)
ansible -i inventory.ini all -m ping

4. 첫 플레이북

플레이북은 “무엇을 할지”를 YAML로 적은 것입니다. 패키지 설치 + 서비스 보장 예시입니다.

# site.yml
- hosts: webservers
  become: true
  tasks:
    - name: nginx 설치
      apt:
        name: nginx
        state: present
        update_cache: true

    - name: nginx 실행 보장
      service:
        name: nginx
        state: started
        enabled: true
ansible-playbook -i inventory.ini site.yml

이 한 번으로 모든 webservers에 nginx가 설치·실행됩니다. 다시 돌려도 “이미 됨”으로 건너뛰는 게 멱등성입니다.

5. 실전에서 자주 쓰는 모듈

모듈 용도
apt/dnf 패키지 관리
copy/template 파일·설정 배포(변수 치환)
service/systemd 서비스 제어
user 계정 관리
lineinfile 설정 파일 한 줄 수정

6. 홈랩에서의 활용

  • 초기 세팅 표준화: 새 VM마다 계정·SSH·방화벽·패키지를 플레이북 하나로.
  • 일괄 업데이트: apt upgrade를 전 서버에 동시에.
  • 설정 드리프트 방지: 플레이북이 곧 “원하는 상태” 문서이자 복구 수단.

7. 정리

Ansible은 인벤토리(누구를) + 플레이북(무엇을), 이 두 가지가 전부입니다. 에이전트 없이 SSH만으로, 멱등하게, 여러 서버를 한 번에 — 홈랩이 2~3대만 넘어가도 체감 효과가 큽니다. cloud-init으로 노드를 찍고 Ansible로 설정하는 조합이면, 서버를 “손으로” 만지는 일이 확 줄어듭니다.