02. 클라우드 보안 공부/실습로그

✅ [실습로그] Ansible로 서버 관리 자동화 - NGINX와 HTTPD 설치 및 관리

taegi- 2025. 5. 17. 19:08

🌐 Ansible서버 관리 자동화하기

💡 실습 목표

  • Ansible사용하여 서버 관리 작업을 자동화하고, HTTPDNGINX 서버를 설치하고 관리한다.
  • SSH 기반 접속 설정으로 비밀번호 없이 Ansible 작업을 수행한다.
  • Ansible 플레이북을 작성하여 반복 작업을 자동화하고 관리 효율성을 높인다.
  • Ansible 모듈을 사용하여 서버 설치, 시작, 방화벽 설정, 파일 관리 작업을 자동화한다.

🛠️ Ansible 설정과 SSH 기반 접속

1. SSH 기반 접속 설정

생성 명령어

bash
복사편집
ssh-keygen -t ed25519 -C "ansible_key"

💡 TIP:

  • ed25519: RSA보다 빠르고 보안성이 뛰어남
  • 위치: 기본적으로 ~/.ssh/id_ed25519저장
  • C 옵션: 키에 주석을 추가하여 식별 용이

전송 명령어

bash
복사편집
ssh-copy-id -i ~/.ssh/id_ed25519.pub rockylinux@192.168.111.131

💡 TIP:

  • ssh-copy-id: SSH 공개 키를 원격 서버로 전송하여 설정
  • -i 옵션: 공개 파일 지정
  • 설정이 완료되면 비밀번호 없이 접속할 있음

2. Ansible 인벤토리 설정

인벤토리 파일 수정

bash
복사편집
vi /etc/ansible/hosts

설정 예시

bash
복사편집
[serverd] 192.168.111.131 ansible_user=rockylinux ansible_ssh_private_key_file=/root/.ssh/id_ed25519

💡 TIP:

  • ansible_user: 원격 서버에 접속할 사용자 지정
  • ansible_ssh_private_key_file: SSH 파일 경로
  • 인벤토리 파일은 Ansible관리할 호스트 목록을 지정하는 사용

3. 접속 테스트

기본 접속 명령어

bash
복사편집
ansible all -m ping

💡 TIP:

  • ping 모듈: 원격 서버와의 연결 상태를 확인
  • all: 인벤토리 파일에 설정된 모든 서버에 대해 명령 실행
  • 성공 pong 응답이 출력됨

💻 Ansible 기본 명령어

1. 파일 수정 멱등성 보장

lineinfile 모듈 사용

bash
복사편집
ansible localhost -m lineinfile -a "path=myfile line=test4"

💡 TIP:

  • lineinfile 모듈: 특정 파일에 줄을 추가하거나 수정
  • 멱등성 보장: 이미 추가된 줄이 있을 경우 중복되지 않음
  • 서버 설정이나 환경 변수 추가 유용

Shell 모듈 사용 (비권장)

bash
복사편집
ansible localhost -m shell -a "echo test4 >> myfile"

💡 TIP:

  • shell 모듈직접 명령어를 실행하는 방식이라 멱등성이 보장되지 않음
  • 중복 실행 동일한 줄이 여러 추가될 위험이 있음
  • 설정 파일이나 구성 관리에 적합하지 않음

🌱 Ansible서버 설치 자동화 - NGINX 예시

🔧 NGINX 자동 설치 플레이북 작성

YAML 파일 작성 규칙

  • 들여쓰기는 2칸씩 (Tab 사용 금지)
  • - name: 형식으로 작업 이름 지정
  • key: value 형태로 모듈과 인자를 구분하여 작성

NGINX 설치 플레이북 (nginx.yaml)

yaml
복사편집
--- - name: NGINX 설치 설정 hosts: all become: yes tasks: - name: NGINX 설치 yum: name: nginx state: latest - name: index.html 복사 copy: src: /root/index.html dest: /usr/share/nginx/html/index.html - name: NGINX 시작 service: name: nginx state: started - name: 방화벽 설정 (HTTP 허용) firewalld: service: http permanent: yes state: enabled immediate: yes

💡 TIP:

  • become: yes: 관리자 권한으로 실행
  • yum 모듈: NGINX 패키지 설치
  • copy 모듈: index.html 파일 복사
  • service 모듈: NGINX 서비스 시작
  • firewalld 모듈: 방화벽 설정

💻 플레이북 실행 명령어

bash
복사편집
ansible-playbook nginx.yaml

💡 옵션:

  • --list-hosts: 명령이 실행될 호스트 목록 확인
  • --check: 실제 실행 없이 변경 사항을 미리 확인

🌐 서버 제거 자동화 - NGINX 제거 플레이북

NGINX 제거 플레이북 (nginx_remove.yaml)

yaml
복사편집
--- - name: NGINX 제거 hosts: serverd tasks: - name: NGINX 중지 service: name: nginx state: stopped - name: 방화벽 닫기 firewalld: service: http permanent: yes state: disabled immediate: yes - name: index.html 삭제 file: path: /usr/share/nginx/html/index.html state: absent - name: NGINX 패키지 제거 yum: name: nginx state: absent

💡 TIP:

  • file 모듈: 특정 경로의 파일 삭제
  • state: absent: 파일이 없는 상태로 유지

실습 결과

  1. SSH 기반 접속 설정 완료하여 비밀번호 없이 Ansible 작업 수행
  2. NGINX 서버 설치, 시작, 방화벽 설정을 자동화하여 배포
  3. NGINX 서버 제거, 방화벽 닫기 파일 삭제 자동화 구현
  4. lineinfile 모듈을 사용하여 설정 파일 수정 멱등성 확보
  5. 플레이북을 통한 반복 작업 자동화로 관리 효율성 증대

📝 결론

Ansible사용하여 서버 관리 작업을 자동화하면 효율성과 일관성을 크게 높일 있습니다. 특히 SSH 기반 접속 설정으로 비밀번호 없이 안전하게 관리할 있으며, lineinfile 모듈을 사용하여 설정 작업의 멱등성확보할 있습니다. HTTPDNGINX 서버를 각각 설치하고 제거하는 과정을 자동화하여 서버 관리의 복잡성을 줄였습니다.

💡 다음 목표:

  1. Ansible사용한 대규모 서버 관리 자동화
  2. Ansible Tower 도입으로 GUI 기반 관리 강화
  3. 복잡한 서비스 구성을 위한 플레이북 작성과 관리 최적화