IaC/Ansible 실습
Ansible 실습 | 하나의 Managed Node에 Wordpress, Apache, Mysql 세팅 (feat. Ad-hoc)
Greta Lee
2021. 8. 17. 02:10
SMALL
Ad-hoc 커맨드를 사용하여 하나의 Managed Node(192.168.200.101)에 Wordpress, Apache, Mysql 세팅하기
- 관련 패키지 설치
- 서비스 스타트 되었는지 확인
- wordpress 파일 다운로드 받아 아카이브 풀기
- wp-config.php 파일 수정
- db 생성
- db 사용자 세팅
1. DB(Mysql) 서버 구성
# mysql_user, mysql_db 모듈 사용하기 위한 요구사항 : pymysql 설치 ## when use module 'apt' ansible -m apt -a 'name=mysql-server,python3-pymysql state=latest update_cache=true' -b 192.168.200.101 ## when use module 'pip' ansible -m apt -a 'name=mysql-server,pip state=latest update_cache=true' -b 192.168.200.101 ansible -m pip -a 'name=pymysql state=latest' -b 192.168.200.101 # mysql service 확인 ansible -m service -a 'name=mysql state=started' -b 192.168.200.101 # mysql db 생성 : DB name=wpdb ansible -m mysql_db -a 'login_unix_socket=/var/run/mysqld/mysqld.sock name=wpdb state=present' -b 192.168.200.101 # mysql user 세팅 1 : 인증(login_user, login_password) 후 db 접근하는 방식 ansible -m mysql_user -a 'check_implicit_admin=yes login_unix_socket=/var/run/mysqld/mysqld.sock login_user=root login_password="" name=root password="P@ssw0rd" state=present' -b 192.168.200.101 ansible -m mysql_user -a 'login_user=root login_password=P@ssw0rd name=wpadm password="P@ssw0rd" host=192.168.200.101/32 priv="wpdb.*:ALL,GRANT" state=present' -b 192.168.200.101 # mysql user 세팅 2 : 인증없이 소켓 파일로 바로 db 접근 ## name=wpadm, password=P@ssw0rd ansible -m mysql_user -a 'login_unix_socket=/var/run/mysqld/mysqld.sock name=root password="P@ssw0rd" state=present' -b 192.168.200.101 ansible -m mysql_user -a 'login_unix_socket=/var/run/mysqld/mysqld.sock name=wpadm password="P@ssw0rd" host=192.168.200.101/32 priv="wpdb.*:ALL,GRANT" state=present' -b 192.168.200.101
- check_implicit : 처음에 패스워드 없이 root로 로그인할 수 있게 해주는 옵션
- login_unix_socket : /var/run/mysqld/mysqld.sock 소켓 파일을 이용해 mysql 서버 데몬에 접근 가능. (로그인하여 DB에 처음 접근할 때 라이브러리(pymysql)를 통해 접근하게 되는데, 이때 소켓 파일을 이용하여 접근한다. 패스워드가 세팅되어 있지 않은 계정으로 접근할 수 없으므로 이 때는 반드시 소켓을 사용해야 한다.) 소켓 파일을 사용하여 접근하면 인증 자체가 필요 없다. 즉, login_user, login_password 옵션을 지정하지 않아도 된다.
- 소켓 통신을 하지 않는 경우, login_user와 login_password 옵션을 사용하면 되지만, 최초 접근 시에는 반드시 소켓 통신을 해야 한다.
- (참고) mysql-server 패키지를 설치하면 /var/run/mysqld/ 디렉토리 밑에 여러 파일이 생성된다.
-
ansible -m apt -a 'name=mysql-server' ls /var/run/mysqld/
- login_user, login_password : DB에 접근할 때 사용하는 계정
- name, password : 생성할 사용자 계정
- priv : 생성한 DB에 대한 권한
- host: wpadm 사용자가 접속할 수 있는 호스트. 가장 좋은 것은 192.168.200.101/32 와 같이 호스트를 정확히 지정해주는 것이지만 192.168.200.0/24 와 같이 네트워크 대역을 지정해주는 것도 가능하다.
※만약 two 노드로 구성한다면 /etc/mysql/mysql.conf.d/mysqld.cnf 파일의 bind-address 라인을 주석 처리 해주어야 한다. (이것도 ad-hoc 커맨드로 구성해보기 by replace 모듈)
1.1 mysqsl 접속 테스트
ssh 192.168.200.101 mysql -u root -p mysql> show databases;
2. 웹(Apache) 서버 구성
# apache, php 관련 패키지 설치 ansible -m apt -a 'name=apache2,php,php-mysql,php-gd,php-mbstring state=latest' -b 192.168.200.101 # apache service 시작 ansible -m service -a 'name=apache2 state=started' -b 192.168.200.101
3. wordpress 구성
# wordpress 다운로드 ansible -m get_url -a 'url="https://wordpress.org/wordpress-5.8.tar.gz" checksum=sha1:6476e69305ba557694424b04b9dea7352d988110 dest=/home/devops/wordpress-5.8.tar.gz' 192.168.200.101 # wordpress unarchive ansible -m unarchive -a 'src=/home/devops/wordpress-5.8.tar.gz remote_src=true dest=/var/www/html/' -b 192.168.200.101 # wordpress 설정 파일 복사 ansible -m copy -a 'src=/var/www/html/wordpress/wp-config-sample.php remote_src=true dest=/var/www/html/wordpress/wp-config.php' -b 192.168.200.101 # wordpress 설정 파일(wp-config.php) 수정 ansible -m replace -a 'path=/var/www/html/wordpress/wp-config.php regexp=database_name_here replace=wpdb' -b 192.168.200.101 ansible -m replace -a 'path=/var/www/html/wordpress/wp-config.php regexp=username_here replace=wpadm' -b 192.168.200.101 ansible -m replace -a 'path=/var/www/html/wordpress/wp-config.php regexp=password_here replace=P@ssw0rd' -b 192.168.200.101 ansible -m replace -a 'path=/var/www/html/wordpress/wp-config.php regexp=localhost replace=192.168.200.101' -b 192.168.200.101
- checksum : https://wordpress.org/download/releases/ 에서 sha1 값과 비교하여, 지정한 checksum 값과 일치하면 다운로드를 진행한다.
SMALL