개요
cloud-1은 ecole42의 DevOps 프로젝트로, Ansible과 Docker를 사용하여 WordPress 웹사이트를 클라우드 서비스에 배포하는 프로젝트다.
시스템 구성
이 프로젝트는 다음 서비스들을 Docker 컨테이너로 구성한다:
- MariaDB: WordPress 데이터베이스
- WordPress: 웹사이트 인스턴스 2개 (로드 밸런싱용)
- LoadBalancer: Nginx 기반 로드 밸런서 (포트 80, 443)
- phpMyAdmin: 데이터베이스 관리 도구 (포트 9090)
Ansible이란?
Ansible은 인프라 자동화 및 구성 관리 도구로 SSH를 통해 원격 서버에 접속하여 소프트웨어 설치, 설정, 배포 등의 작업을 자동화할 수 있다. Playbook이라는 YAML 형식의 파일을 작성하여 반복적인 작업을 정의하고, 여러 서버에 동일한 설정을 일괄 적용할 수 있다. 에이전트 설치가 필요 없고, 선언적 방식으로 원하는 상태를 정의하면 Ansible이 자동으로 해당 상태로 만들어준다.
사전 요구사항
- Vagrant
- VirtualBox
- Ansible
- SSH 키 설정
로컬 개발 환경 설정
1. Vagrant 가상머신 시작
vagrant up
2. 서비스 실행
ansible-playbook ./playbooks/run.yml --limit local
3. 서비스 중지
ansible-playbook ./playbooks/stop.yml --limit local
SSH 설정
SSH 키 생성 및 복사
# SSH 키 생성
ssh-keygen -t ed25519 -C "your comment on this key"
# 서버에 공개키 복사 (서버의 ~/.ssh/authorized_keys에 추가)
ssh-copy-id -i ~/.ssh/id_ed25519.pub [ip_address]
Ansible 명령어
연결 확인
# 호스트 연결 확인
ansible -m ping [hostname]
# 호스트 정보 수집
ansible -m gather_facts [hostname]
Playbook 실행
# 로컬 환경에 배포
ansible-playbook ./playbooks/run.yml --limit local
# 원격 서버에 배포
ansible-playbook ./playbooks/run.yml --limit remote
인증서 관리
SSL 인증서 발급 (Let's Encrypt)
원격 서버에 SSL 인증서를 발급하려면:
ansible-playbook ./playbooks/cert.yml
이 명령은 다음 작업을 수행한다:
- Nginx 설치 및 설정
- Let's Encrypt 인증서 발급
- 인증서를 LoadBalancer에 복사
WordPress 접속 정보
- 사용자 ID: kychoi
- 비밀번호: KyubongTest123
MariaDB 접속
명령줄에서 접속
mysql -u wp_user -pWpPassword wordpress
데이터베이스 덤프 (백업)
mysqldump -u [username] -p[password] [database_name] > db_backup.sql
원격 서버에서 파일 복사
원격 서버의 파일을 로컬로 복사:
scp user@remote_host:/root/inception/backup.sql /Users/yourname/Downloads/
프로젝트 구조
cloud-1/
├── ansible.cfg # Ansible 설정 파일
├── inventory.yml # 호스트 인벤토리 (로컬/원격 서버 정보)
├── Vagrantfile # Vagrant 설정 파일
├── playbooks/
│ ├── run.yml # 서비스 실행 Playbook
│ ├── stop.yml # 서비스 중지 Playbook
│ └── cert.yml # SSL 인증서 발급 Playbook
└── roles/
├── init/ # 초기 설정 역할
├── docker/ # Docker 설치 역할
├── inception/ # WordPress 스택 배포 역할
└── cert/ # SSL 인증서 관리 역할
환경 변수 설정
roles/inception/files/example.env 파일을 참고하여 환경 변수를 설정한다:
MYSQL_WP_PASSWORD: WordPress 데이터베이스 비밀번호MYSQL_ROOT_PASSWORD: MariaDB root 비밀번호WP_DOMAIN: WordPress 도메인PMA_HOST: phpMyAdmin 호스트PMA_USER: phpMyAdmin 사용자PMA_PASSWORD: phpMyAdmin 비밀번호PMA_DATABASE: phpMyAdmin 데이터베이스
Vagrant 명령어
vagrant box list # 사용 가능한 박스 목록
vagrant box remove [box_name] # 박스 제거
vagrant validate # Vagrantfile 검증
vagrant up # 가상머신 시작
vagrant halt # 가상머신 중지
vagrant destroy # 가상머신 삭제
vagrant ssh # 가상머신 SSH 접속
vagrant ssh-config # SSH 설정 확인
