✔️ Ad-hoc 명령으로 Wordpress 구성하기
✔️ Wordpress 구성에 필요한 작업
- 패키지 설치 : yum
- 서비스 제어 : service
- 텍스트 수정 : lineinfile, blockline, replace
- 압축 : archive, unarchive
- 방화벽 : firewalld, ufw, iptables
- 방화벽 모듈은 system 모듈에서 찾아볼 수 있다.
- REH 계열은 firewalld를 사용하나 데비안 계열은 UFW를 사용한다.
- 파일 복사 : copy, fetch
- 파일 다운로드 : get_url
- 데이터베이스 관리 : mysql_db, mysql_user
- 인증서 생성 : openssl
- 파일 관리 : file
✔️ yum의 전자 서명 기능
yum 기능 중에는 gpg 기능이 있다.
- 해시 체크
- 서명 확인
- 받았던 패키지가 공격자에 의해 바꿔치기 된 패키지가 아닌지 검증 작업
gpg 개념
1. GPG 서명은 GnuPG(Gnu Privacy Guard)라고도 부르는데, rpm 패키지를 인증할 때 암호화된 서명을 사용하는 방법
2. 페도라 프로젝트에서 제공하는 rpm 패키지는 GPG 서명을 함으로써 잘못된 패키지가 설치되는 일을 방지
3. 메시지나 파일을 암호화하여 전송할 수 있는 툴, 소스를 배포하는 각종 프로그램의 변조 유무를 검사할 수 있는 프로그램
4. 배포자의 서명과 서명된 파일이 제공되므로 소스에 대한 무결성 검사
5. 메일이나 중요한 데이터에 대해 서명과 함께 전송함으로써 허가된 사용자만 해당 데이터를 볼 수 있는 권한을 부여
6. 보안 메일, 전자 서명 시스템에서 응용 가능
gpgkey
아스키 GPG 키가 들어 있는 저장소의 URL이 적혀 있으면 된다.
[vagrant@node1 ~]$ cd /etc/pki/rpm-gpg
[vagrant@node1 rpm-gpg]$ ls
RPM-GPG-KEY-CentOS-7 RPM-GPG-KEY-EPEL-7 RPM-GPG-KEY-remi2018 RPM-GPG-KEY-remi2021
RPM-GPG-KEY-CentOS-Debug-7 RPM-GPG-KEY-remi RPM-GPG-KEY-remi2019 RPM-GPG-KEY-remi2022
RPM-GPG-KEY-CentOS-Testing-7 RPM-GPG-KEY-remi2017 RPM-GPG-KEY-remi2020
[vagrant@node1 rpm-gpg]$ sudo cat RPM-GPG-KEY-CentOS-7
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (GNU/Linux)
mQINBFOn/0sBEADLDyZ+DQHkcTHDQSE0a0B2iYAEXwpPvs67cJ4tmhe/iMOyVMh9
Yw/vBIF8scm6T/vPN5fopsKiW9UsAhGKg0epC6y5ed+NAUHTEa6pSOdo7CyFDwtn
4HF61Esyb4gzPT6QiSr0zvdTtgYBRZjAEPFVu3Dio0oZ5UQZ7fzdZfeixMQ8VMTQ
4y4x5vik9B+cqmGiq9AW71ixlDYVWasgR093fXiD9NLT4DTtK+KLGYNjJ8eMRqfZ
Ws7g7C+9aEGHfsGZ/SxLOumx/GfiTloal0dnq8TC7XQ/JuNdB9qjoXzRF+faDUsj
WuvNSQEqUXW1dzJjBvroEvgTdfCJfRpIgOrc256qvDMp1SxchMFltPlo5mbSMKu1
x1p4UkAzx543meMlRXOgx2/hnBm6H6L0FsSyDS6P224yF+30eeODD4Ju4BCyQ0jO
................
hQvsI9FdIIlTP4XhFZ4N9ndnEwA4AH7tNBsmB3HEbLqUSmu2Rr8hGiT2Plc4Y9AO
aliW1kOMsZFYrX39krfRk2n2NXvieQJ/lw318gSGR67uckkz2ZekbCEpj/0mnHWD
3R6V7m95R6UYqjcw++Q5CtZ2tzmxomZTf42IGIKBbSVmIS75WY+cBULUx3PcZYHD
ZqAbB0Dl4MbdEH61kOI8EbN/TLl1i077r+9LXR1mOnlC3GLD03+XfY8eEBQf7137
YSMiW5r/5xwQk7xEcKlbZdmUJp3ZDTQBXT06vavvp3jlkqqH9QOE8ViZZ6aKQLqv
pL+4bs52jzuGwTMT7gOR5MzD+vT0fVS7Xm8MjOxvZgbHsAgzyFGlI1ggUQmU7lu3
uPNL0eRx4S1G4Jn5
=OGYX
-----END PGP PUBLIC KEY BLOCK-----
✔️ Wordpress 배포를 위한 기본 패키지 설치 및 설정
✔️ 패키지 설치 및 활성화
remi 레포지토리에서 remi-release-7 버전을 받아와 설치한다.
[vagrant@controller ~]$ ansible wp -m yum -a 'name=https://rpms.remirepo.net/enterprise/remi-release-7.rpm state=present validate_certs=no' -b
remi 레포지토리 중 remi-safe는 비활성화시킨다.
ansible wp -m yum_repository -a 'name=remi-safe file=remi-safe mirrorlist=http://cdn.remirepo.net/enterprise/7/safe/mirror description=remi-safe enabled=no' -b
remi-php74는 활성화 시킨다.
ansible wp -m yum_repository -a 'name=remi-php74 file=remi-php74 mirrorlist=http://cdn.remirepo.net/enterprise/7/php74/mirror description=remi-php74 enabled=yes' -b
wordpress 배포를 위해 필요한 모든 패키지를 설치한다.
ansible wp -m yum -a 'name=httpd,php,php-mysqlnd,mariadb,mariadb-server,python2-PyMySQL state=installed' -b
✔️ YUM Repo가 꼬였을 경우 초기화 하는법
yum repository가 꼬였을 경우 yum 초기화하기
yum 명령어를 이용해서 어플리케이션을 설치하다보면 가끔 repository가 꼬여서 yum install 등 옵션이 구동되지 않을때 사용
방법
1. /etc/yum.repos.d/ 이동해서 repository 지우기
cd /etc/yum.repos.d/ //repository 저장 디렉토리로 이동
ls -al // repository 확인
rm -f 삭제할 repository // base는 지우면 안됨 !
ls -al // 확인
2. /var/cache/yum/에서 캐쉬디렉토리 삭제
cd /var/cache/yum/
ls -al // 캐쉬 디렉토리 확인
rm -rf x86_64
3. headers, packages, metadata 삭제
yum clean headers
yum clean packages
yum clean metadata
✔️ key 오류 발생시
발생 원인
managed node에 접속해 다음 명령을 실행하면 mysql과 관련된 2가지의 패키지가 나온다.
[vagrant@node1 ~]$ yum list | grep php-mysql
php-mysqlnd.x86_64 7.4.29-1.el7.remi @remi-php74
php-mysql.x86_64 5.4.16-48.el7 base
우리가 필요한 패키지의 버전은 php 7.4 버전이다.
php-mysql 패키지를 설치하면 php 5.4에 대응되어 문제가 발생한다.
따라서 설치시에 php-mysqlnd를 설치해주면 된다.
✔️ 해결 방법 1)
ansible로 managed node에 패키지 설치시 php-mysqlnd를 설치하기
ansible wp -m yum -a 'name=httpd,php,php-mysqlnd,mariadb,mariadb-server,python2-PyMySQL state=installed' -b
✔️ 해결 방법 2)
managed node에 사용할 gpg-key를 import 해주기
sudo rpm --import /etc/pki/rpm-gpg/RPM*
이를 ansible로 변경하기위해 다음 url을 참고하자
rpm_key 모듈에는 두개의 변수 key, state가 있다. key에 사용하고자 하는 키를 지정하면 된다.
ansible wp -m rpm_key -a "key=/etc/pki/rpm-gpg/RPM-GPG-KEY-remi state=present" -b
✔️ 해결 방법 3)
가장 안좋은 방법이다. 처음부터 gpg-key를 체크하지 않는다.
disable_gpg_check=yes → 전자서명을 체크하지 않도록 설정하기
[vagrant@controller ~]$ ansible wp -m yum -a 'name=php-mysql disable_gpg_check=yes state=installed' -b
192.168.100.11 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"changes": {
"installed": [
"php-mysql"
]
},
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.kakao.com\n * epel: ftp.iij.ad.jp\n * extras: mirror.kakao.com\n * remi-php74: ftp.riken.jp\n * updates: mirror.kakao.com\nPackage php-mysql-5.4.16-48.el7.x86_64 is obsoleted by php-mysqlnd-7.4.29-1.el7.remi.x86_64 which is already installed\nNothing to do\n"
]
}
✔️ 해결 방법 4)
epel-release를 설치하기
패키지 의존성 문제를 해결할 수 있다.
[vagrant@controller ~]$ ansible wp2 -m yum -a 'name=epel-release state=installed' -b
192.168.100.12 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"msg": "",
"rc": 0,
"results": [
"epel-release-7-11.noarch providing epel-release is already installed"
]
}
[vagrant@controller ~]$ ansible wp2 -m yum -a 'name=php-mysql state=installed' -b
192.168.100.12 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"changes": {
"installed": [
"php-mysql"
]
},
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.navercorp.com\n * epel: ftp.riken.jp\n * extras: mirror.navercorp.com\n * remi-php74: ftp.riken.jp\n * updates: mirror.navercorp.com\nPackage php-mysql is obsoleted by php-mysqlnd, trying to install php-mysqlnd-7.4.29-1.el7.remi.x86_64 instead\nResolving Dependencies\n--> Running transaction check\n---> Package php-mysqlnd.x86_64 0:7.4.29-1.el7.remi will be installed\n--> Processing Dependency: php-pdo(x86-64) = 7.4.29-1.el7.remi for package: php-mysqlnd-7.4.29-1.el7.remi.x86_64\n--> Running transaction check\n---> Package php-pdo.x86_64 0:7.4.29-1.el7.remi will be installed\n--> Processing Dependency: php-common(x86-64) = 7.4.29-1.el7.remi for package: php-pdo-7.4.29-1.el7.remi.x86_64\n--> Running transaction check\n---> Package php-common.x86_64 0:7.4.29-1.el7.remi will be installed\n--> Processing Dependency: php-json(x86-64) = 7.4.29-1.el7.remi for package: php-common-7.4.29-1.el7.remi.x86_64\n--> Running transaction check\n---> Package php-json.x86_64 0:7.4.29-1.el7.remi will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n php-mysqlnd x86_64 7.4.29-1.el7.remi remi-php74 255 k\nInstalling for dependencies:\n php-common x86_64 7.4.29-1.el7.remi remi-php74 1.2 M\n php-json x86_64 7.4.29-1.el7.remi remi-php74 74 k\n php-pdo x86_64 7.4.29-1.el7.remi remi-php74 139 k\n\nTransaction Summary\n================================================================================\nInstall 1 Package (+3 Dependent packages)\n\nTotal size: 1.6 M\nInstalled size: 14 M\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Installing : php-common-7.4.29-1.el7.remi.x86_64 1/4 \n Installing : php-json-7.4.29-1.el7.remi.x86_64
2/4 \n Installing : php-pdo-7.4.29-1.el7.remi.x86_64 3/4 \n Installing : php-mysqlnd-7.4.29-1.el7.remi.x86_64 4/4 \n Verifying : php-pdo-7.4.29-1.el7.remi.x86_64 1/4 \n Verifying : php-mysqlnd-7.4.29-1.el7.remi.x86_64 2/4 \n Verifying : php-json-7.4.29-1.el7.remi.x86_64
3/4 \n Verifying : php-common-7.4.29-1.el7.remi.x86_64 4/4 \n\nInstalled:\n php-mysqlnd.x86_64 0:7.4.29-1.el7.remi \n\nDependency Installed:\n php-common.x86_64 0:7.4.29-1.el7.remi php-json.x86_64 0:7.4.29-1.el7.remi \n php-pdo.x86_64 0:7.4.29-1.el7.remi \n\nComplete!\n"
]
}
✔️ 설치한 패키지를 활성화한다.
ansible wp -m service -a 'name=httpd state=started enabled=yes' -b
ansible wp -m service -a 'name=mariadb state=started enabled=yes' -b
✔️ Wordpress 설치하기
✔️ get-url
get-url 모듈을 이용해 wordpress의 안정적인 버전을 설치한다.
설치 디렉토리는 managed node의 /home/vagrant 디렉토리이다.
ansible wp -m get_url -a 'url=https://wordpress.org/wordpress-5.9.3.tar.gz dest=/home/vagrant '
apache 권한을 사용해 node1의 /var/www/html 하위에 다운받은 압축 파일을 풀어준다.
ansible wp -m unarchive -a 'src=/home/vagrant/wordpress-5.9.3.tar.gz remote_src=yes dest=/var/www/html' -b
✔️ DB 설정하기
mysql-db-module
✔️ wordpress DB 생성하기
root 계정으로 wordpress db를 생성한다.
ansible wp -m mysql_db -a 'name=wordpress state=present login_user=root'
wordpress DB가 생성이 됐는지 확인한다.
✔️ DB 사용자 추가하기
root 권한을 사용하는 것 보다 wordpress DB만 관리할 수 있는 사용자 계정을 만드는 것이 보안상 좋다.
Wordpress DB에만 접근할 수 있는 'wpadm' 이라는 사용자를 추가하고 password를 'P@ssw0rd'로 설정한 뒤 wordpress db에 접근할 수 있는 권한을 부여한다.
ansible wp -m mysql_user -a 'name=wpadm password=P@ssw0rd state=present login_user=root priv="wordpress.*:ALL"'
✔️ 필요한 파일 복사 및 httpd 파일 설정
wp-config.php를 구성하기 위해 wp-config-sample.php의 내용을 복사해온다.
owner 옵션을 설정하지 않으면 root 권한이므로 apache 권한을 부여한다.
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'
✔️ wordpress 시작 화면을 index.html → index.php로 변경하기
ansible wp -m replace -a 'path=/etc/httpd/conf/httpd.conf regexp=index.html replace=index.php' -b
✔️ httpd 설정 파일 수정했으므로 httpd를 재시작해줘야 한다.
ansible wp -m service -a 'name=httpd state=restarted' -b
✔️ DB 세부 구성 설정
wp-config.php 파일을 우리가 사용하기 위해 만든 wordpress 설정으로 변경한다.
DB명을 wordpress로 변경
ansible wp -m replace -a 'path=/var/www/html/wordpress/wp-config.php regexp=database_name_here replace=wordpress' -b
사용자명을 wpadm으로 변경
ansible wp -m replace -a 'path=/var/www/html/wordpress/wp-config.php regexp=username_here replace=wpadm' -b
패스워드를 P@ssw0rd로 변경
ansible wp -m replace -a 'path=/var/www/html/wordpress/wp-config.php regexp=password_here replace=P@ssw0rd' -b
✔️ VM 초기화
가상 머신을 초기 상태로 돌릴 줄 아는 것도 중요하다.
ansible wp -m service -a 'name=httpd state=stopped' -b
ansible wp -m service -a 'name=mariadb state=stopped' -b
ansible wp -m file -a 'path=/var/www/html/wordpress state=absent' -b
ansible wp -m file -a 'path=/home/vagrant/wordpress-5.9.3.tar.gz state=absent' -b
ansible wp -m yum -a 'name=httpd,php,php-mysqlnd,mariadb,mariadb-server,python2-PyMySQL autoremove=yes state=absent' -b
ansible wp -m file -a 'name=/var/lib/mysql state=absent' -b
ansible wp -m yum -a 'name=remi-release autoremove=yes state=absent' -b
참고
'DevOps > Ansible' 카테고리의 다른 글
[Ansible] 변수(Variables) (0) | 2022.04.19 |
---|---|
[Ansible] Playbook 실행 (0) | 2022.04.16 |
[Ansible] module, ad-hoc, playbook, yaml 포맷 (0) | 2022.04.15 |
[Ansible] 정적 인벤토리 (0) | 2022.04.15 |
[Ansible] 관리 노드 접속 방법, 권한 상승과 관리 구성 파일 (0) | 2022.04.14 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!