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
- 점프호스트를 위한
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"'
- 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@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"
}
패키지 설치
필요한 패키지
패키지명 | 설명 |
---|---|
httpd | apache |
php | php |
php-mysqlnd | php에서 데이터베이스접속을 위한 라이브러리 |
mariadb | mariadb 클라이언트 |
mariadb-server | mariaddb 서버 |
python2-PyMySQL | python 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"
]
}
서비스 시작
[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'
홈 디렉토리에 압축파일 받아오기
압축해제
[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
데이터베이스 관련설정
사용할 데이터베이스 생성
[vagrant@controller ~]$ ansible wp -m mysql_db -a 'name=wordpress state=present login_user=root'
데이터 베이스 관리 사용자 생성
[vagrant@controller ~]$ ansible wp -m mysql_user -a 'name=wpadm password=P@ssw0rd state=present login_user=root priv="wordpress.*:ALL"'
워드프레스 설정
설정파일 복사
[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
그룹지정도 동시에
설정파일 수정
데이터베이스 설정 변경
[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
Author And Source
이 문제에 관하여(45/120), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@numerok/45120저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)