Python & Automation

[Ansible] Ansible playbook을 이용하여 rhel7에서 wordpress 서버 가동하기!

모모토 2022. 2. 28. 19:00
반응형

오늘은 남이 작성한 playbook을 다운로드하여서 내가 원하는 용도에 맞게 수정하여 사용하는 방법을 실습해볼 것이다.

 

엔지니어로써 playbook을 작성하는 방법은 어느 정도 알지만 처음부터 온전히 작성하기란 쉽지가 않은 법이다.

 

따라서 오픈소스나 다른 사람이 잘 작성해놓은 혹은 뼈대를 갖춰놓은 구조를 갖다가 쓰는 방법을 사용하여 wordpress서버를 띄워보자

 

사실 이와 같은 방법도 playbook 지식과 리눅스에서 wordpress서버를 띄워본 경험들이 있어야 가능한 것이다!  결코 쉬운 방법은 아니라는 것

 

기본 환경설정

control node와 managed node 설정을 모른다면 아래를 참고하자

https://griffithh.tistory.com/107?category=985975 

 

[Ansible] Control node & Managed node 설치 및 ssh 접속

Ansible 실습환경 구성 virtualBox 를 이용한 가상 환경 Virtual Machine CPU : dual core memory : 2GB 제어 노드 구성 필수요소 ★ sshd 활성화 python 3.x 버전 interpreter 설치 pip 패키지 설치 Control node..

griffithh.tistory.com

 

1. control node 서버 1대와 wordpress용 centos가 설치된 가상 머신을 준비한다.

초기 설정상태

 

 

2. github에서 repository를 다운로드

 

아래는 참고한 github 사이트이며 본인은 wordpress-nginx_rhel7 파일을 사용하였다.

https://github.com/ansible/ansible-examples

 

GitHub - ansible/ansible-examples: A few starter examples of ansible playbooks, to show features and how they work together. Se

A few starter examples of ansible playbooks, to show features and how they work together. See http://galaxy.ansible.com for example roles from the Ansible community for deploying many popular appl...

github.com

github에서 repository를 다운로드하는 방법은 혹시 모른다면 아래를 참고하자

https://griffithh.tistory.com/113

 

[Ansible] 본격! Playbook 개념의 이해 그리고 공유폴더

<참고> 본 포스팅에서 사용하는 실습컴퓨터(control node)는 다음 게시물에서 설정한 control node입니다. https://griffithh.tistory.com/107 [Ansible] Control node & Managed node 설치 및 ssh 접속 Ansible..

griffithh.tistory.com

 

repository라는 폴더를 새로 생성 후 전체를 다운로드한 상태이다. centos 와의 ssh 접속을 원활하게 하기 위하여 inventory 파일을 설정하자

 

[wordpress-server:vars] 아래와 같은 설정을 해주면 ssh-copy-id로 ssh키를 복사할 수고를 덜게 된다.

연결이 잘되는지 ping test를 해보자

 

자 이제 playbook을 실행할 환경이 구성되었다. wordpress-nginx_rhel7 폴더에 존재하는 site.yml 플레이북을 실행해보자

 

아마 이렇게 에러가 발생할 것이다. 왜 에러가 발생하는 걸까? 바로 남이 작성한 playbook을 가져와서 사용하기에 발생하는 당연한 결과이다. 쉽게 가져다 쓰기만 해도 된다면 공부할 필요가 없다.

 

우리는 엔지니어로써 이러한 오류들을 고쳐나가면서 playbook을 사용하면 된다.

 

playbook 수정

 

1. common : Firewalld service state 

Failed to execute operation: Cannot send after transport endpoint shutdown

구글에 검색해본 결과 방화벽 재시작 , 시작 시 가장 많이 발생하는 오류이다.

마스킹을 풀어줘야 centos7에서 방화벽이 활성화될 수 있다.

Cause for this Issue:
This firewalld failed issue mainly occurs due to the firewalld service is locked. Another cause of this error is the mask symbolic link is broken.
Solution:
We can fix this issue by unlocking or unmasking the firewalld service. In order to unmask the firewalld service, we can use the below command.
systemctl unmask firewalld

이제 playbook에 저 명령어를 추가해주자

 

 

2. mariadb : Install MariaDB package

위의 에러를 조사하기 전에 먼저 이해해야 하는 일련의 과정들이 필요하다.

 

yum으로 nginx , php , database 등을 설치할 때 기본적으로 ' yum 공식 repository ' 에 존재하는 버전들이 centos7에 설치하기엔 너무 낮은 버전들이라 전체적으로 원활하게 설치가 되지 않을 때 위와 같은 현상이 벌어진다.

 

그래서 repository are already installed but they are not correct for this package 같은 메시지가 뜨는 것이다.

 

repo 파일

epel은 공식 yum repo가 아닌 외부의 repository와 연결하기 위한 package이다. 그러한 epel을 설치하기 위한 위치가 바로 epel.repo이다.

 

nginx.repo 는 높은 버전의 nginx 설치를 위한 외부 repository 주소이다.

 

remi.repo 는 php 설치용 외부 repository 주소이다.

 

database 설치 시 아마도 버전에 대한 문제가 생긴 것이기 때문에 우리가 직접 db에 관련한 repo파일을 추가해주면 해결이 될 것이다.

 

본인은 깃 헙에서 바로 폴더를 생성 후 파일을 만들었다. 파일 이름은 MariaDB.repo ->. repo는 repository파일을 의미

repo파일을 등록했다면 이제 MariaDB를 설치하는 tasks에서 이 repo파일을 yum 공식 repository에 추가하는 스크립트를 작성하면 이제 설치하는데 문제가 없을 것이다.

데이터 베이스 설치 완료

 

 

3. nginx: http service state

 

자 새로운 error가 발생했다. 두려울 게 없다 왜냐하면 우리에겐 구글이 있으니까.

 

그래도 구글을 이용하기 전에 에러 메시지를 정독해보는 습관을 가지도록 하자

메시지는 말한다. 시작을 실패했으니 systemctl로 대충 알아보라고 나온다. centos 컴퓨터로 넘어가 보자

응? httpd가 실행이 되고 있더라.. 구글링을 해보니 위와 같은 메시지는 이미 httpd를 서비스하는 80 포트가 사용 중일 때 나는 에러라고 한다. 따라서 centos 서버에서 httpd를 중지시키고 서비스를 다시 실행해보았더니 실행이 잘되더라..

01
그렇다고 한다.

이번엔 비교적 어렵지 않게 에러를 수정했다.

 

 

4. php-fpm : Install php-fpm and deps

 

Error: Package: php-simplepie-1.5.65 ~..~ (remi)\n Requires: php(language) = 5.6\n ~

현재 php-simplepie를 설치하기 위해선 php5.6 버전이 필요한 상태인데 존재하지 않아서 원활하게 설치가 진행되지 않는 모습이다.

 

결론적으로 php 5.6 repo 파일을 등록하는 스크립트를 추가해야 하는 것이다. 하지만 github에서 파일을 조회해보니 이미 php5.6의 repository에 관한 설정은 완료가 되어있었다.

그렇다면 tasks를 확인해보자

 

처음부터 tasks 에는 repo파일을 참조하는 스크립트가 존재하지 않았다..

이제 php 5.6 repo를 추가하는 스크립트를 작성하였고 , php-simplepie를 설치하기 위한 준비가 끝났다.

php error까지 해결하고 나니 wordpress 서버 구동을 위한 모든 요소들이 정상적으로 설치되었다. 이제 wordpress가 잘 작동하는지 인터넷으로 접속해보자!

 

실습 성공!

 

이렇게 ansible playbook을 이용한 wordpress server 설정을 완료하였다.

 

playbook의 개념이 어려운 건 아니지만 이번 실습처럼 에러를 하나하나 고쳐가면서 자신에게 또는 고객의 요구에 맞게 바꾸는 과정이 어렵고 힘들 수 있지만 나름 즐거운 작업이다.

 

다음엔 ubuntu로도 돌려보는 실습을 올릴 수 있다면 올려보겠다.