24. Ansible로 Ubuntu Server 설정 자동화: 실용 가이드

소개

서버를 수동으로 설정하고 관리하는 작업은 특히 여러 서버가 있거나 반복적인 구성 작업이 있는 환경에서 지루하고 오류가 발생하기 쉬운 과정이 될 수 있습니다. 강력한 오픈소스 IT 자동화 도구인 Ansible을 사용하면 서버 프로비저닝, 구성, 관리를 쉽게 자동화하여 이 과정을 간소화할 수 있습니다. 이 가이드 “24. Ansible로 Ubuntu Server 설정 자동화: 실용 가이드” 에서는 Ansible을 사용하여 Ubuntu Server 설정 및 구성을 자동화하는 기본 사항을 안내합니다. 끝까지 읽으면 일반적인 서버 작업을 간소화하고 효율성을 높이며 인프라 전반의 일관성을 확보하기 위해 Ansible 플레이북을 작성하고 실행하는 방법을 배울 수 있습니다.


이전 글:

01. Ubuntu Server 소개 – SysOSX: AI & Cloud

02. 첫 Ubuntu Server 설정 방법: 초보자 가이드 – SysOSX: AI & Cloud

03. Ubuntu Server용 Linux 명령줄 마스터하기 – SysOSX: AI & Cloud

04. Ubuntu Server에서 사용자 및 권한 관리: 종합 가이드 – SysOSX: AI & Cloud

05. Ubuntu Server 네트워킹 기초: 종합 가이드 – SysOSX: AI & Cloud

06. Ubuntu Server에 소프트웨어 설치 및 관리: 완전 가이드 – SysOSX: AI & Cloud

07.Ubuntu Server 패치 및 업데이트: 종합 가이드 – SysOSX: AI & Cloud

08. Ubuntu Server 보안 강화: 하드닝 및 보호를 위한 실용적인 단계 – SysOSX: AI & Cloud

09. Ubuntu 서버 감사 및 로깅

10. Ubuntu Server용 시스템 모니터링 도구: 종합 가이드 – SysOSX: AI & Cloud

11. Ubuntu 서버를 위한 중앙 집중식 로깅: 필독 가이드 – SysOSX: AI & Cloud

12. Ubuntu Server 감사 및 규정 준수: 모범 사례 – SysOSX: AI & Cloud

13. 호스팅 및 웹 애플리케이션을 위한 Ubuntu Server 설정: 완벽 가이드 – SysOSX: AI & Cloud

14. 단일 Ubuntu Server에서 여러 웹사이트 호스팅하기: 유용한 팁 – SysOSX: AI & Cloud

15. Ubuntu Server에서 스토리지 및 디스크 관리: 간단 가이드 – SysOSX: AI & Cloud

16. Ubuntu Server에서 파일 공유 서비스 설정: 완전 가이드 – SysOSX: AI & Cloud

17. Ubuntu에서 안전한 데이터베이스 서버 설정: MySQL 대 MariaDB – SysOSX: AI & Cloud

18. Ubuntu Server에서 LVM 구성 및 사용 방법: 종합 가이드 – SysOSX: AI & Cloud

19. KVM을 활용한 가상화 소개: Ubuntu Server 초보자 가이드 – SysOSX: AI & Cloud

20. Ubuntu Server에 Docker 설치 방법: 컨테이너화에 대한 단계별 가이드 – SysOSX: AI & Cloud

21. LXD 시작하기: 컨테이너 쉽게 설치 + 치트 시트 – SysOSX: AI & Cloud

22. Ubuntu Server에서 Podman 시작하기: 완전 가이드 – SysOSX: AI & Cloud

23. 클라우드에 Ubuntu Server 배포하기: 단계별 가이드 – SysOSX: AI & Cloud



서버 자동화에 Ansible을 사용해야 하는 이유

Ansible은 단순성과 강력함 덕분에 서버 자동화에 널리 사용됩니다. 최고의 선택인 이유는 다음과 같습니다.

  • 에이전트리스: Ansible은 대상 서버에 에이전트 소프트웨어를 설치할 필요가 없습니다. 통신에는 SSH를 사용합니다.
  • 선언적 구문: Ansible 플레이북은 사람이 읽기 쉬운 구문인 YAML을 사용하므로 원하는 상태를 쉽게 정의할 수 있습니다.
  • 재사용 가능한 구성: 플레이북을 한 번 작성하면 여러 서버에서 재사용할 수 있습니다.
  • 멱등성: Ansible은 필요한 경우에만 작업을 실행하므로 불필요한 작업을 피할 수 있습니다.
  • 확장성: Ansible은 패키지 설치, 파일 관리, 서비스 구성 등의 작업을 처리하기 위한 다양한 모듈을 지원합니다.

필수 조건

Ansible로 Ubuntu Server 설정을 자동화하기 전에 다음 사항을 준비하세요.

  1. 제어 노드: Ansible이 설치된 머신(로컬 시스템 또는 전용 서버).
  2. 대상 서버: 구성하려는 Ubuntu 서버(온프레미스 또는 클라우드).
  3. SSH 액세스: 제어 노드와 대상 서버 간에 비밀번호 없는 SSH 액세스가 설정되었는지 확인하세요.

1단계: Ansible 설치하기

1.1 제어 노드에 Ansible 설치하기

제어 노드(예: Ubuntu를 실행하는 로컬 머신)에 Ansible을 설치하세요.

sudo apt update  
sudo apt install ansible -y  

1.2 설치 확인하기

Ansible이 올바르게 설치되었는지 설치된 버전을 확인하세요.

ansible --version  

예제 출력:

ansible 2.10.8
  config file = None
  configured module search path = ['/home/uadmin/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.10.12 (main, Feb  4 2025, 14:57:36) [GCC 11.4.0]


2단계: SSH 액세스 설정하기

Ansible은 SSH를 통해 대상 서버와 통신합니다. 제어 노드에서 대상 서버로 비밀번호 없는 SSH 액세스를 설정해야 합니다.

2.1 SSH 키 쌍 생성하기

SSH 키 쌍이 아직 없다면 생성하세요.

ssh-keygen -t rsa -b 2048  

2.2 SSH 키를 대상 서버에 복사하기

다음 명령을 사용하여 공개 키를 대상 서버에 복사하세요.

ssh-copy-id ubuntu@<target-server-ip>  

SSH 액세스를 테스트하여 비밀번호 없이 동작하는지 확인하세요.

ssh ubuntu@<target-server-ip>  


3단계: 인벤토리 정의하기

Ansible은 관리할 대상 서버를 정의하기 위해 인벤토리 파일 을 사용합니다.

3.1 인벤토리 파일 만들기

작업 디렉터리에 파일을 만드세요. 파일 이름: inventory 입니다.

nano inventory  

대상 서버의 IP 주소나 호스트 이름을 추가하세요. 예를 들면:

[ubuntu_servers]  
192.168.50.42  
192.168.50.145

파일을 저장하고 종료하세요(Ctrl+O한 다음 Ctrl+X).

3.2 연결 테스트하기

모듈을 사용하여 대상 서버 연결을 테스트하세요. 모듈: ping 입니다.

ansible -i inventory ubuntu_servers -m ping  

예제 출력:

192.168.50.145 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
192.168.50.42 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}


4단계: 첫 Ansible 플레이북 작성하기

Ansible 플레이북은 자동화하려는 작업을 정의하는 YAML 파일입니다. Ubuntu Server 설정을 자동화하는 플레이북을 만들어 보겠습니다.

4.1 플레이북 파일 만들기

파일을 만드세요. 파일 이름: setup.yml입니다.

nano setup.yml  

4.2 플레이북 정의하기

플레이북에 다음 내용을 추가하세요.

---  
- name: Configure Ubuntu Server  
  hosts: ubuntu_servers  
  become: true  

  tasks:  
    - name: Update and upgrade apt packages  
      apt:  
        update_cache: yes  
        upgrade: dist  

    - name: Install common packages  
      apt:  
        name:  
          - curl  
          - wget  
          - git  
          - build-essential  
        state: present  

    - name: Enable UFW and allow SSH  
      ufw:  
        rule: allow  
        name: OpenSSH  
        state: enabled  

    - name: Create a new user  
      user:  
        name: devuser  
        password: "{{ 'password123' | password_hash('sha512') }}"  
        state: present  
        groups: sudo  

작업 설명

  1. 패키지 업데이트 및 업그레이드: 서버에 최신 업데이트와 보안 패치가 적용되었는지 확인합니다.
  2. 일반적인 패키지 설치하기: 필수 도구( curl, wget, git)를 설치합니다.
  3. UFW 활성화하기: SSH 액세스를 허용하도록 방화벽을 구성합니다.
  4. 새 사용자 만들기: sudo 권한을 가진 새 사용자를 추가합니다.
  5. 호스트 이름 설정하기: 서버의 호스트 이름을 구성합니다.

파일을 저장하고 종료하세요.


5단계: 플레이북 실행하기

플레이북을 실행하여 구성을 적용하세요.

ansible-playbook -i inventory setup.yml  

Ansible은 각 작업의 진행 상황을 기록합니다. 모든 작업이 성공적으로 완료되면 Ubuntu Server 구성이 완료됩니다.

아래는 출력입니다.

uadmin@u2204-001:~$ sudo ansible-playbook -i inventory setup.yml

PLAY [Configure Ubuntu Server] ***************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************
ok: [192.168.50.145]
ok: [192.168.50.42]

TASK [Update and upgrade apt packages] *******************************************************************************
^X^C [ERROR]: User interrupted execution
uadmin@u2204-001:~$ sudo nano setup.yml
uadmin@u2204-001:~$ sudo ansible-playbook -i inventory setup.yml

PLAY [Configure Ubuntu Server] ***************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************
ok: [192.168.50.145]
ok: [192.168.50.42]

TASK [Update and upgrade apt packages] *******************************************************************************
ok: [192.168.50.42]
ok: [192.168.50.145]

TASK [Install common packages] ***************************************************************************************
changed: [192.168.50.145]
changed: [192.168.50.42]

TASK [Enable UFW and allow SSH] **************************************************************************************
changed: [192.168.50.145]
changed: [192.168.50.42]

TASK [Create a new user] *********************************************************************************************
changed: [192.168.50.42]
changed: [192.168.50.145]

PLAY RECAP ***********************************************************************************************************
192.168.50.145             : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
192.168.50.42              : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0



6단계: 구성 확인하기

6.1 설치된 패키지 확인하기

대상 서버 중 하나에 로그인하고 일반적인 패키지가 설치되었는지 확인하세요.

curl --version  
git --version  

6.2 방화벽 상태 확인하기

방화벽이 활성화되었는지 확인하세요.

sudo ufw status  

6.3 새 사용자 확인하기

새 사용자가 만들어졌는지 확인하세요.

cat /etc/passwd | grep devuser  


고급 사용 사례

기본 플레이북에 익숙해지면 더 고급 사용 사례를 살펴볼 수 있습니다.

  • 애플리케이션 배포하기: Ansible을 사용하여 웹 서버(예: Nginx, Apache)나 데이터베이스(예: MySQL, PostgreSQL)를 설치하고 구성하세요.
  • 여러 환경 관리하기: 스테이징, 프로덕션, 개발 환경별로 별도의 인벤토리 파일을 만드세요.
  • 역할 사용하기: 복잡한 설정을 위해 플레이북을 재사용 가능한 역할로 정리하세요.
  • CI/CD 통합: CI/CD 파이프라인의 일부로 서버 설정을 자동화하세요.

참고 자료:

Ansible 설명서 — Ansible 커뮤니티 설명서


결론

Ansible은 서버 설정 및 구성을 자동화하는 강력한 도구입니다. 이 가이드에서는 다음을 다루었습니다.

  • 제어 노드에 Ansible 설치하기.
  • 대상 서버에 대한 SSH 액세스 설정하기.
  • Ubuntu Server 설정을 자동화하기 위한 기본 플레이북 작성 및 실행.

Ansible을 활용하면 시간을 절약하고 오류를 줄이며 인프라 전반의 일관성을 확보할 수 있습니다. 서버 한 대를 관리하든 수백 대를 관리하든, Ansible은 현대적인 DevOps 워크플로에 필수적인 도구입니다.

2 thoughts on “24. Automating Ubuntu Server Setup with Ansible: A Practical Guide”

댓글 남기기