45/120

ansible로 bastion 구성하고 private 인스턴스로 점프하기

참고하기
1. private 서브넷 생성
2. ssh 허용
3. 키등록으로 controller에서 생성한 id_rsa.pub 가져오기
4. bastion을 위한 public 인스턴스 생성
5. private 인스턴스 생성
6. !/.ssh/config 수정 및 ssh 점프 호스트 확인

  • 첫 번째 방법
Host bastion
	HostName 배스천IP
	User ec2-user
	Port 22
	IdentityFile ~/.ssh/id_rsa
Host node1
	Hostname 프라이빗IP
	User ec2-user
	Port 22
	IdentityFile ~/.ssh/id_rsa
$ ssh -J bastion node1
  • 두 번째 방법
Host node1
	ProxyJump bastion
  1. 점프호스트를 위한 ec2.ini 설정
[ec2]
priavte 인스턴스 IP

[ec2:vars]
ansible_user=ec2-user
ansible_ssh_common_args='-o ProxyCommand="ssh -p 22 -W %h:%p -q ec2-user@bastion IP"'
  1. id 명령어 실행으로 테스트
$ ansible ec2 -i ec2.ini -m command -a id

Ad-hoc 명령으로 워드프레스 구성

php74 설치를 위한 remi 저장소 설치

[vagrant@controller ~]$ ansible wp -m yum -a 'name=https://rpms.remirepo.net/enterprise/remi-release-7.rpm state=present validate_certs=no' -b
192.168.100.11 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "changes": {
        "installed": [
            "/home/vagrant/.ansible/tmp/ansible-tmp-1649929435.8-2896-129465800683746/remi-release-7X8yptA.rpm"
        ]
    }

관리노드에서 확인

[vagrant@node1 ~]$ yum repolist
    
repo id   repo name                status
remi-safe      Safe Remi's RPM repository for 

php74 설치 위한 repo 활성화

[vagrant@controller ~]$ ansible wp -m yum_repository -a 'name=remi-safe enabled=no baseurl=http://rpms.remirepo.net/enterprise/7/safe/$basearch/ description=remi-safe' -b
192.168.100.11 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "repo": "remi-safe",
    "state": "present"
}
[vagrant@controller ~]$ ansible wp -m yum_repository -a 'name=remi-php74 enabled=yes baseurl=http://rpms.remirepo.net/en
terprise/7/php74/$basearch/ description=remi-php74' -b
192.168.100.11 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "repo": "remi-php74",
    "state": "present"
}

패키지 설치

필요한 패키지

패키지명설명
httpdapache
phpphp
php-mysqlndphp에서 데이터베이스접속을 위한 라이브러리
mariadbmariadb 클라이언트
mariadb-servermariaddb 서버
python2-PyMySQLpython 2.x에서 mysql을 사용하기 위한 패키지

패키지 설치 오류

"msg": 
"warning: /var/cache/yum/x86_64/7/remi-php74/packages/php-7.4.29-1.el7.remi.x86_64.rpm: 
Header V4 DSA/SHA1 Signature, 
key ID 00f97f56: NOKEY\n\n\nPublic key 
for php-7.4.29-1.el7.remi.x86_64.rpm is not installed\n"

키 파일이 없어서 에러가 생긴다길래

rpm_key
remi-key

를 보고 굉장히 다양한 시도를 해봤지만

ansible wp -m rmp_key -a 'key=https://rpms.remirepo.net/RPM-GPG-KEY-remi'
ansible wp -m rpm_key -a 'key=https://rpms.remirepo.net/RPM-GPG-KEY-remi'
ansible wp -m rpm_key -a 'key=00f97f56'
ansible wp -m rpm_key -a 'key=RPM-GPG-KEY-remi'
ansible wp -m rpm_key -a 'key=RPM-GPG-KEY-remi2022'

전부다 실패.. 과연 key 값은 무엇으로 해야할까,,

정답은 repo파일에 있었다!

[vagrant@node1 ~]$ vi /etc/yum.repos.d/remi.repo

[remi]
...
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

rpm key 가져요기

[vagrant@controller ~]$ ansible wp -m rpm_key -a 'key=/etc/pki/rpm-gpg/RPM-GPG-KEY-remi' -b
192.168.100.11 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true
}

패키지 설치 완료!

[vagrant@controller ~]$ ansible wp -m yum -a 'name=httpd,php,php-mysqlnd,mariadb,mariadb-server,python2-PyMySQL state=present' -b
192.168.100.11 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "changes": {
        "installed": [
        	"httpd",
            "php",
            "php-mysqlnd",
            "mariadb",
            "mariadb-server",
            "python2-PyMySQL"
        ]
    }

서비스 시작

service module

[vagrant@controller ~]$ ansible wp -m service -a 'name=httpd enabled=yes state=started' -b
[vagrant@controller ~]$ ansible wp -m service -a 'name=mariadb enabled=yes state=started' -b

리눅스 시스템에서 불가능한 명령은 모듈에서도 불가능 -> 패키지 설치처럼 ,를 사용해서 여러개 한번에 시작은 되지 않아서 하나씩 실행해야함

워드프레스 파일 다운

압축파일 받아오기

wordpress.org
다운로드 시 자동으로 최신버전 url이 지정되는데, 항상 버전을 지정하여 다운 받을 것
get_url module

[vagrant@controller ~]$ ansible wp -m get_url -a 'url=https://wordpress.org/wordpress-5.9.3.tar.gz dest=/home/vagrant'

홈 디렉토리에 압축파일 받아오기

압축해제

unarchive module

[vagrant@controller ~]$ ansible wp -m unarchive -a 'src=/home/vagrant/wordpress-5.9.3.tar.gz remote_src=yes dest=/var/ww
w/html owner=apache group=apache' -b

데이터베이스 관련설정

사용할 데이터베이스 생성

mysql_db module

[vagrant@controller ~]$ ansible wp -m mysql_db -a 'name=wordpress state=present login_user=root'

데이터 베이스 관리 사용자 생성

mysql_user module

[vagrant@controller ~]$ ansible wp -m mysql_user -a 'name=wpadm password=P@ssw0rd state=present login_user=root priv="wordpress.*:ALL"'

워드프레스 설정

설정파일 복사

copy module

[vagrant@controller ~]$ ansible wp -m copy -a 'src=/var/www/html/wordpress/wp-config-sample.php remote_src=yes dest=/var/www/html/wordpress/wp-config.php owner=apache group=apache' -b

그룹지정도 동시에

설정파일 수정

replace moudle

데이터베이스 설정 변경

[vagrant@controller ~]$ ansible wp -m replace -a 'path=/var/www/html/wordpress/wp-config.php regexp=database_name_here replace=wordpress' -b

regexp의 값을 찾아 replace 값으로 변경

데이터베이스 유저 및 비밀번호 설정 변경

[vagrant@controller ~]$ ansible wp -m replace -a 'path=/var/www/html/wordpress/wp-config.php regexp=username_here replace=wpadm' -b
[vagrant@controller ~]$ ansible wp -m replace -a 'path=/var/www/html/wordpress/wp-config.php regexp=password_here replace=P@ssw0rd' -b

서비스 재시작

[vagrant@controller ~]$ ansible wp -m service -a 'name=httpd state=restarted' -b
[vagrant@controller ~]$ ansible wp -m service -a 'name=mariadb state=restarted' -b

결과 확인

워드프레스 결과

실습전 환경으로 되돌리기

서비스 종료

[vagrant@controller ~]$ ansible wp -m service -a 'name=httpd state=stopped' -b
[vagrant@controller ~]$ ansible wp -m service -a 'name=mariadb state=stopped' -b

워드프레스 파일 삭제

[vagrant@controller ~]$ ansible wp -m file -a 'path=/var/www/html/wordpress state=absent' -b
[vagrant@controller ~]$ ansible wp -m file -a 'path=/home/vagrant/wordpress-5.9.3.tar.gz state=absent' -b

패키지 삭제

[vagrant@controller ~]$ ansible wp -m yum -a 'name=httpd,php,php-mysqlnd,mariadb,mariadb-server,python2-PyMySQL autoremove=yes state=absent' -b

autoremove를 사용하면 의존성이 관련된 패키지까지 같이 삭제
no를 할 시 삭제되지 않음

데이터베이스 파일 삭제

[vagrant@controller ~]$ ansible wp -m file -a 'name=/var/lib/mysql state=absent' -b

삭제하지 않으면 다음에 데이터베이스 패키지를 재설치 후 실행 시, 유저 정보, 데이터베이스 정보가 남아 있게 되니 반드시 삭제

레포지토리 삭제

[vagrant@controller ~]$ ansible wp -m yum -a 'name=remi-release autoremove=yes state=absent' -b

playbook

yaml docs
yaml 형식의 파일을 작성하여 실행

ansible-playbook <YAMLFILE_NAME>
  • key, value 사용시 :때문에 문제가 되는경우
    ' '안에 value를 넣어 해결
  • value 값이 한줄로 너무 길때
    |, > 를 사용하여 멀티라인으로 작성

ad-hoc wordpress playbook 작성해서 해보기

- hosts: wp
  tasks:
    - yum:
        name: https://rpms.remirepo.net/enterprise/remi-release-7.rpm 
        state: present 
        validate_certs: no
    - yum_repository:
        name: remi-safe 
        enabled: no 
        baseurl: http://rpms.remirepo.net/enterprise/7/safe/$basearch/ 
        description: remi-safe
    - yum_repository:
        name: remi-php74 
        enabled: yes 
        baseurl: http://rpms.remirepo.net/enterprise/7/php74/$basearch/ 
        description: remi-php74
    - rpm_key:
        key: /etc/pki/rpm-gpg/RPM-GPG-KEY-remi
    - yum:
        name: httpd,php,php-mysqlnd,mariadb,mariadb-server,python2-PyMySQL 
        state: present
    - service:
        name: httpd 
        enabled: yes 
        state: started
    - service:
        name: mariadb
        enabled: yes 
        state: started   
    - get_url:
        url: https://wordpress.org/wordpress-5.9.3.tar.gz 
        dest: /home/vagrant
    - unarchive:
        src: /home/vagrant/wordpress-5.9.3.tar.gz 
        remote_src: yes 
        dest: /var/www/html
        owner: apache 
        group: apache
    - mysql_db:
        name: wordpress 
        state: present 
        login_user: root
    - mysql_user:
        name: wpadm
        password: P@ssw0rd
        state: present
        login_user: root
        priv: "wordpress.*:ALL"
    - copy:
        src: /var/www/html/wordpress/wp-config-sample.php
        remote_src: yes
        dest: /var/www/html/wordpress/wp-config.php
        owner: apache
        group: apache
    - replace:
        path: /var/www/html/wordpress/wp-config.php
        regexp: database_name_here
        replace: wordpress
    - replace:
        path: /var/www/html/wordpress/wp-config.php
        regexp: username_here
        replace: wpadm
    - replace:
        path: /var/www/html/wordpress/wp-config.php
        regexp: password_here
        replace: P@ssw0rd

되돌리기

- hosts: wp
  tasks:
    - service:
        name: httpd
        state: stopped
    - service:
        name: mariadb
        state: stopped
    - file:
        path: /var/www/html/wordpress
        state: absent
    - file:
        path: /home/vagrant/wordpress-5.9.3.tar.gz
        state: absent
    - yum:
        name: httpd,php,php-mysqlnd,mariadb,mariadb-server,python2-PyMySQL
        state: absent
        autoremove: yes
    - file:
        name: /var/lib/mysql
        state: absent
    - yum:
        name: remi-release
        autoremove: yes
        state: absent

좋은 웹페이지 즐겨찾기