일상 운영 시나리오
Ansible로 관리되는 서버에서 자주 수행하는 작업들의 명령 모음입니다.
계정(account) wrapper 사용
이 문서의 모든 명령은 <account>를 실제 계정명(예: self, customer-a)으로 바꿔서 실행합니다.
scripts/ansible-account.sh가 inventory, vault, roles_path를 계정별로 자동 주입하여 타 계정 사고를 방지합니다.
직접 ansible-playbook 호출은 디버깅 목적으로만 사용하고, 일상 운영은 wrapper를 통해 실행하세요.
시나리오 1: 신규 서버 추가
# 1. IaaS 대시보드/API에서 서버 생성 (Ubuntu 24.04, SSH 키 등록) — Vultr/DigitalOcean/Linode 등
# 2. Inventory에 추가 (해당 계정 폴더의 hosts.ini)
cat >> workspace/_infra/ansible-accounts/<account>/inventory/hosts.ini << 'EOF'
[app_servers]
msk-app-new ansible_host=64.176.xx.xx
EOF
# 3. Bootstrap (최초 1회, root로 접속)
cd workspace/_infra
scripts/ansible-account.sh <account> bootstrap --limit msk-app-new -u root
# 4. 표준 셋업 (deploy로)
scripts/ansible-account.sh <account> site --limit msk-app-new
# 5. 역할별 배포
scripts/ansible-account.sh <account> app --limit msk-app-new
소요 시간: 약 10~15분
시나리오 2: 전체 서버 보안 패치
# apt 보안 업데이트 (unattended-upgrades가 자동 실행하지만 수동 트리거)
ansible all -m apt -a "upgrade=safe update_cache=yes" --become
# 재부팅이 필요한 서버만 재부팅 (rolling)
ansible all -m reboot --become --serial 1 \
--extra-vars "reboot_timeout=300"
주의: 운영 중 서버는 --serial 1로 한 대씩 재부팅하여 다운타임 최소화.
시나리오 3: 특정 역할만 재설정
# NPM 서버들만 재구성
ansible-playbook playbooks/npm.yml --limit npm_servers
# 모든 서버의 Tailscale role만 재실행
ansible-playbook playbooks/site.yml --tags tailscale
# 특정 서버 + 특정 role
ansible-playbook playbooks/site.yml --limit msk-app-quant --tags docker
시나리오 4: 서버 장애 후 재구축
# 1. IaaS에서 동일 스펙 새 서버 생성 (동일 or 다른 IaaS)
# 2. Inventory의 해당 호스트 IP만 업데이트
vim workspace/_infra/ansible/inventory/hosts.ini
# 3. Bootstrap + site.yml 재실행
ansible-playbook -u root playbooks/bootstrap.yml --limit msk-app-quant --ask-vault-pass
ansible-playbook -u deploy playbooks/site.yml --limit msk-app-quant
# 4. 데이터 복원 (DB 덤프, 볼륨 백업 등 — 별도 백업 절차)
ansible-playbook playbooks/restore-from-backup.yml --limit msk-app-quant \
--extra-vars "backup_date=2026-04-17"
서버 자체는 10분 이내 재구축 → 데이터 복원 시간이 전체 RTO 결정 요인.
시나리오 5: 환경변수 변경
# group_vars 또는 vault 수정
ansible-vault edit vault/secrets.yml
# 영향 받는 서비스만 재배포 (NPM 예시)
ansible-playbook playbooks/npm.yml --limit npm_servers --tags config
많은 role이 notify: restart service 패턴을 써서 config 변경 시 자동 재시작.
시나리오 6: Ad-hoc 명령
모든 서버의 디스크 사용량 확인
ansible all -m shell -a "df -h /"
특정 프로세스 상태
ansible app_servers -m shell -a "docker ps --format '{{.Names}}: {{.Status}}'"
긴급 파일 배포
ansible all -m copy -a "src=./hotfix.sh dest=/tmp/hotfix.sh mode=0755"
ansible all -m shell -a "/tmp/hotfix.sh"
시나리오 7: Tailscale ACL 재적용
# Tailscale Admin Console에서 ACL 변경 후
# 각 서버에서 tag 재등록 필요할 때
ansible all -m command -a "tailscale up --authkey={{ tailscale_authkey }} --advertise-tags=tag:app" --become
시나리오 8: Docker 컨테이너 재시작 (롤링)
# 한 대씩 순차 재시작 (무중단 배포)
ansible-playbook playbooks/app.yml \
--limit app_servers \
--tags deploy \
--serial 1
운영 베스트 프랙티스
1. --check 드라이런 습관화
# 실제 변경 전 항상 드라이런
ansible-playbook playbooks/site.yml --check --diff
2. --limit으로 범위 좁히기
# 전체 대신 특정 서버만
ansible-playbook playbooks/site.yml --limit msk-app-quant
전체 서버 대상 실수를 방지.
3. 태그 기반 실행
# 전체 role 중 특정 태그만
ansible-playbook playbooks/site.yml --tags docker,tailscale