--- 센토스 아파치 애드혹 관리 ---
ansible centos -m yum -a "name=httpd state=present" -k
httpd 설치함
하지만 기동은 안된 상태라서 centos에가면 curl 명령어가 되지 않는다.
ansible centos -m service -a "name=httpd state=started" -k
httpd 기동시켜주는 명령어!
접속테스트 해보았더니 된당!!!
(◦˘ З(◦’ںˉ◦)cнϋ♡
외부에서 접속해보기 위해 public ip로 테스트 해보았더니
요기도 접속이 완료 되었다!
그럼 웹페이지를 한번 꾸며볼까?
curl https://www.nginx.com/ -o index.html
ls
vi index.html
index 파일 내 타이틀을 수정해주었다.
ansible centos -m copy -a "src=index.html dest=/var/www/html/index.html" -k
copy 모듈을 이용해서 파일을 이동시켜주었음.
원래 이랬던 페이지가
⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩
이렇게 변경됨!
내가 지정한 문구가 그대로 페이지에 띄워졌다!!!
ansible centos -m shell -a "systemctl status firewalld" -k
active 상태이긴 하나, 현재 규칙이 셋팅되어 있지는 않음
ansible centos -m service -a "name=httpd state=stopped" -k
httpd를 멈추어 보았움
바로 접속 불가능!
ansible centos -m shell -a "systemctl start httpd" -k
페이지를 다시 기동시키기 위한 명령어!!
우왕
다시 기동됨 ㅎㅎ
ansible centos -m shell -a "systemctl status firewalld" -k
ansible centos -m shell -a "systemctnsl start firewalld" -k
active상태인데 또 active 명령해보기
shell 명령어에 멱등성이 없을 수 있다.
멱등성이 없는 모듈의 경우 직관적이다.
ansible centos -m service -a "name=httpd state=started" -k
stop 명령어를 started로 변경해보자
--- 우분투 아파치 애드혹 관리 ---
ansible ubuntu -m apt -a "name=apache2 state=present" -k
설치하기!!
우분투 ip
ansible ubuntu -m copy -a "src=index.html dest=/var/www/html/index.html" -k
ansible ubuntu -m service -a "name=apache2 state=stopped" -k
명령을 두번 입력했을 때 노란색에서 그린색으로 바뀐다!
그 이유는 멱등성 때문임!!
동일한 작업은 두번이상 하지 않는당
ansible centos -m yum -a "name=httpd state=absent" -k
ansible ubuntu -m apt -a "name=apache2 state=absent" -k
앞서 설치한 httpd와 apache2 모두 지우기!
멱등성!!!!
Ansible은 멱등성(Idempotency)이란 특징을 가집니다.
이는 여러 번 적용해도 결과가 바뀌지 않으며, 수정된 부분이 있다면 그 부분만 새롭게 반영되는 특징이 있습니다.
이렇게 두번의 같은 명령을 수행했는데도 가능한 모습을 보면
이건 멱등성이 없는 것임!
그래서 동일한 IP가 두개나 등록되었다.
앤서블로 명령을 주었더니 '멱등성'에 의해 동일한 IP가 중복 등록되지 않는다.
그렇다면 멱등성이 있는 것만 사용하면 되지 않느냐 싶지만,
또 멱등성이 없는 것이 직관적이기 때문에 필요하다.
--- 플레이북 ---
플레이북 구조
YAML 형식으로 작성된 각각의 Playbook들은 하나 이상의 Play를 가지며
각각의 Play는 하나 이상의 task(Ansible 모듈)을 실행한다
--- 센토스, 우분투 아파치 설치 플레이북 ---
# mkdir playbook && cd $_
# vi apache_install.yml
- name: Install apache on centos
hosts: centos
vars:
ansible_password: wldbsWkd01
tasks:
- name: install apache web server
yum: name=httpd state=present # ansible centos -m yum -a "name=httpd state=present" -k
- name: upload default index.html for web server
get_url: url=https://www.nginx.com dest=/var/www/html/ mode=0644
- name: start apache web server
service: name=httpd state=started enabled=yes
- name: Install apache on ubuntu
hosts: ubuntu
vars:
ansible_password: wldbsWkd01
tasks:
- name: install apache web server
apt: name=apache2 state=present
- name: upload default index.html for web server
get_url: url=https://www.nginx.com dest=/var/www/html/ mode=0644
- name: start apache web server
service: name=apache2 state=started
# ansible-playbook apache_install.yml
이 안에 있는 name부분은 필수가 아니다.
centos / ubuntu 모두 다 nginx 페이지가 보여진다.
--- 센토스, 우분투 아파치 삭제 플레이북 ---
# vi apache_remove.yml
- name: Remove apache on centos
hosts: centos
tasks:
- name: remove apache web server
yum: name=httpd state=absent
- name: Remove apache on ubuntu
hosts: ubuntu
tasks:
- name: remove apache web server
apt: name=apache2 state=absent
# ansible-playbook apache_remove.yml -k
--- 센토스, 우분투 NFS 설치 플레이북 ---
앤서블 IP -> 10.178.0.6
# vi nfs.yml
- name: Setup for nfs server
hosts: localhost
tasks:
- name: make nfs_shared directory
file: #path에 경로를 정의하면 해당 경로를 생성해줌
path: /root/nfs_shared
state: directory
mode: 0777
- name: configure /etc/exports
lineinfile:
path: /etc/exports
line: /root/nfs_shared 10.178.0.6/20(rw,sync)
- name: Install NFS
yum:
name: nfs-utils
state: present
- name: nfs service start
service:
name: nfs-server
state: restarted
enabled: yes
- name: Setup for nfs clients
hosts: centos
tasks:
- name: make nfs_client directory
file:
path: /root/nfs
state: directory
- name: Install NFS
yum:
name: nfs-utils
state: present
- name: mount point directory as client
mount:
path: /root/nfs
src: 10.178.0.6:/root/nfs_shared
fstype: nfs
state: mounted
- name: Setup for nfs clients U
hosts: ubuntu
tasks:
- name: make nfs_client directory
file:
path: /root/nfs
state: directory
- name: Install NFS-U #ubuntu=U라고 지정
apt:
pkg: nfs-common
state: present
update_cache: yes #apt update
- name: mount point directory as client
mount:
path: /root/nfs
src: 10.178.0.6:/root/nfs_shared
fstype: nfs
opts: nfsvers=3
state: mounted
# ansible-playbook nfs.yml -k
echo "Hello Chu" > /root/nfs_shared/test.txt
ansible centos -m shell -a "ls -al /root/nfs" -k
ansible centos -m shell -a "cat /root/nfs/test.txt" -k
마운트 정보 변경해보기
# vi nfs.yml
path: /var/www/html
# ansible-playbook nfs.yml -k
ansible-playbook apache_install.yml
잉???
centos / ubuntu에 들어가서 umount 해주자!
마운트 해제 했으니, 다시 지정!!
# vi nfs.yml
path: /var/www/html
# ansible-playbook nfs.yml -k
ansible-playbook nfs.yml -k
tar -xvf /home/jyoon/sale.tar -C /root/nfs_shared/
ansible centos -m shell -a "setenforce 0" -k
ansible centos -m shell -a "sestatus" -k
vi /root/nfs_shared/index.html
--- 워드프레스 만들기 ---
vi /etc/ansible/hosts
# vi wordpress.yml
- name: Setup for webserver
hosts: webserver
tasks:
- name: Install http
yum:
name: "{{ item }}"
state: present
with_items:
- httpd
- php
- php-mysql
- php-gd
- php-mbstring
- wget
- unzip
- name: Unarchive a file that needs to be downloaded (added in 2.0)
ansible.builtin.unarchive: #압축을 풀어주는 모듈
src: https://ko.wordpress.org/wordpress-4.8.2-ko_KR.zip
dest: /var/www/html
remote_src: yes
- name: chown
file: # chown -R apahce:apache /var/www/html/wordpress
path: /var/www/html/wordpress
owner: "apache"
group: "apache"
recurse: "yes"
- name: web service restart
service:
name: httpd
state: restarted
- name: Setup for dbserver
hosts: dbserver
tasks:
- name: Install mariadb
apt:
pkg: mariadb-server
state: present
update_cache: yes
- name: Install pymysql
apt:
pkg: python-pymysql
state: present
- name: Install pymysql
apt:
pkg: python3-pymysql
state: present
- name: set root password
mysql_user:
name: 'root'
password: '{{ mysql_root_password }}'
login_unix_socket: /var/run/mysqld/mysqld.sock
state: present
- name: edit file
replace:
path: /etc/mysql/mariadb.conf.d/50-server.cnf
regexp: "bind-address"
replace: "#bind-address"
- name: db service restart
service:
name: mysql
state: restarted
- name: Create database
mysql_db:
db: wordpress
login_unix_socket: /var/run/mysqld/mysqld.sock
state: present
- name: Create database user
mysql_user:
user: wpuser
password: Test1752!
priv: "wordpress.*:ALL,GRANT"
host: '%' # wpuser@% 어디서나 접속이 가능
login_unix_socket: /var/run/mysqld/mysqld.sock
state: present
# anp wordpress.yml --extra-vars "mysql_root_password=Test1752!" -k
anp wordpress.yml --extra-vars "mysql_root_password=Test1752!"
-> 결국 fail!!
nfs쪽 충돌로 인해 자꾸 fail이 되어
마운트를 다시 풀어주기로ㅠ
ㄷㄷ.. python-pymysql이 없다고 하여...
아래와 같이 해당 패키지는 주석처리 해주기로!
vi wordpress.yml
1045, \"Access denied for user 'root'@'localhost' (using password: NO)\"
하지만 또 다른 이슈.....
'Ansible' 카테고리의 다른 글
Ansible - 인스턴스 설치(GCP에 함) 및 앤서블 명령어 (0) | 2024.02.21 |
---|---|
Ansible이란? (1) | 2024.02.21 |