일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 오블완
- aws lambda
- splunk db connect
- 티스토리챌린지
- web3
- metacode
- web security academy
- File Upload
- Path Traversal
- metacodem
- 스마트 컨트랙트
- 탈중앙화
- Session Manager
- amazon s3 트리거
- 보안 그룹
- ELB
- 메타코드M
- 정보처리기사
- 정처기
- AWS SSM
- 스마트컨트랙트
- 정처기필기
- aws 트리거
- systems manager
- web3 보안
- 블록체인
- 정처기 필기
- 메타코드
- web shell
- AWS CLI
- Today
- Total
min8282
[AWS] 워드프레스 단일/복합 환경 구성 본문
이번 글에서는 AWS 교과서에서 배운 내용(1~9장)을 바탕으로, 다양한 AWS 서비스를 활용해 워드프레스 블로그를 구축하는 과정을 정리하려고 합니다. 단일 구성부터 시작해 복합 구성까지 단계적으로 실습을 진행하며, AWS 서비스의 활용법과 워드프레스 특성을 이해할 수 있는 것을 목표로 합니다.
워드프레스 실습을 진행하기 앞서 전반적인 워드프레스 특징과 구성 요소와 웹 시스템 구성 요소, 실습 개요에 대해서 간단하게 알아보고 시작하겠습니다.
워드프레스의 특징
워드프레스는 전 세계적으로 널리 사용되는 오픈 소스 웹사이트 제작 플랫폼으로, 블로그, 쇼핑몰, 포트폴리오 사이트 등 다양한 웹 사이트를 손쉽게 제작할 수 있는 도구입니다.
1. 다양한 테마 제공
- 무료 및 유료 테마를 활용해 디자인을 자유롭게 변경 가능합니다.
2. 플러그인으로 기능 확장
- 필요한 기능을 플러그인으로 추가하여 원하는 사이트를 손쉽게 완성할 수 있습니다.
웹 시스템 기본 구성
웹 시스템을 구축하려면 보통 다음과 같은 3가지 주요 구성 요소가 필요합니다.
- 웹 서버: 클라이언트 요청에 따라 정적 또는 동적 콘텐츠를 제공합니다.
- 웹 애플리케이션 서버: 클라이언트 요청을 처리하여 동적 콘텐츠를 생성합니다.
- 데이터베이스 서버: 데이터를 저장하고 불러오는 역할을 수행합니다.
웹 사용자가 적은 소규모 환경에서는 모든 구성 요소를 단일 서버에서 운영할 수 있습니다. 이 경우 관리가 간편하다는 장점이 있지만, 다음과 같은 단점도 존재합니다.
- 한 구성 요소를 수정하면 다른 구성 요소에 영향을 줄 수 있다.
- 특정 구성 요소가 침해를 당하면 전체 시스템이 위험해질 가능성이 있다.
따라서 일반적으로 웹 서버와 웹 애플리케이션 서버는 외부 인터넷망에 두고, 데이터베이스 서버는 외부 접근이 불가능한 내부망에 두는 분리 구성 방식을 사용합니다. 분리 구성이란 네트워크 앞단에 방화벽 보안 장비를 배치하여 추가적인 보안성을 확보하는 구성 방식입니다.
워드프레스 구성 요소
워드프레스는 일반적인 웹 시스템과 마찬가지로 다음과 같은 구성 요소를 필요로 합니다.
- 웹 서버: Apache or Nginx를 지원합니다.
- 웹 애플리케이션 서버: PHP 언어를 지원하며, 동적 웹 페이지를 생성하는 역할을 합니다.
- 데이터베이스 서버: MySQL or MariaDB를 지원합니다.
실습 개요
이번 실습에서는 aws 환경에서 워드프레스를 직접 설치하며, 다음 두 가지 구성을 단계적으로 진행합니다.
1. 단일 구성
- 하나의 EC2 인스턴스에 웹 서버, 웹 애플리케이션 서버, 데이터베이스 서버를 모두 설치하는 방식입니다.
- 간단히 구성 가능하지만, 보안성과 유지보수 관점에서 비효율적일 수 있습니다.
2. 복합 구성
- EC2 인스턴스와 Amazon EFS에 웹 서버 및 웹 애플리케이션 서버를 구성하고, Amazon RDS를 데이터베이스 서버로 사용하는 방식입니다.
- 주요 특징:
- 웹 서버와 데이터베이스 서버를 분리하여 독립적으로 관리 가능
- 무제한 저장소를 사용하여 파일 시스템의 안정성을 확보
- 저장소 부족으로 서버가 동작하지 않는 문제 방지
실습 순서는 아래와 같습니다.
- 실습을 위한 기본 인프라를 CloudFormation으로 배포
- 기본 인프라 환경 검증
- 워드프레스의 단일 구성 환경 구성
- 워드프레스의 복합 구성 환경 구성
- 실습을 위해 생성된 자원 전체 삭제
1. CloudFormation으로 기본 인프라 배포
여기서는 필요한 기본 인프라 자원을 AWS CloudFormation으로 자동 배포할 예정입니다.
- 서비스 > CloudFormation 메뉴에서 스택 생성
- 아래쪽에서 Amazon S3 URL에 다음 URL을 입력하고 다음 클릭
- 스택 세부 정보 지정 페이지에서 다음과 같이 설정하고 클릭
- 스택 이름에 wplab 입력
- KeyName은 사용자 키 페어 파일 선택
- 스택 옵션 구성에서는 별도의 설정을 하지 않고 다음 클릭. wplab 검토에서 별도의 설정은 없으나 가장
아래쪽에서 ‘AWS CloudFormation에서 사용자 지정 이름으로 IAM 리소스를 생성할 수 있음을
승인합니다.’에 체크하고 전송해야 함
- AWS CloudFormation 기본 인프라를 배포하고 일정 시간(약 5분)이 지나 스택 상태가
‘CREATE_COMPLETE’가 되면 모든 인프라 배포가 정상적으로 완료됨
2. 기본 인프라 환경 검증
기본 인프라로 생성된 자원 중에는 Amazon EFS 파일 시스템과 Amazon RDS 인스턴스가 있습니다. EFS와 RDS 서비스에 들어가 생성된 자원을 확인합니다.
3. 워드프레스의 단일 구성 환경 구성
워드프레스의 단일 구성 환경은 한 대의 EC2 인스턴스에 웹 서버 + 웹 애플리케이션 서버 + 데이터베이스 서버를 모두 구성하게 됩니다.
워드프레스의 단일 구성 환경은 3단계로 진행됩니다.
3-1. EC2 인스턴스에 웹 서버 + 웹 애플리케이션 서버 + 데이터베이스 서버를 모두 구성
- 먼저 AllInOne 인스턴스에 웹 서버 설치 후, AllInOne 인스턴스에 SSH로 접속하여 다음 명령어를 입력하고 결과를 확인
# apache 웹 서버 설치
yum install httpd -y
# 서비스 실행
systemctl start httpd && systemctl enable httpd
# 웹 서버 버전 확인
httpd -v
# 웹 서버에 접속
curl http://10.1.1.100
- 인스턴스에 SSH로 접속하는 방법은 이전 포스팅에서 다뤘으니 생략하고 넘어가겠습니다.
- 웹 브라우저에서 AllInOne 인스턴스의 퍼블릭 IP 주소로 접속하여 잘 접속되는지 확인
- 이제 AllInOne 인스턴스에 웹 애플리케이션 서버를 실치 후, AllInOne 인스턴스에 SSH로 접속하여 다음 명령어를 입력하고 결과 확인
# php 설치
amazon-linux-extras install php8.2 -y
# php 버전 확인
php -v
# PHP Extensions 설치 후 적용
yum install -y php-xml php-mbstring ImageMagick ImageMagick-devel php-pear php-devel
printf "\n" | pecl install imagick
echo "extension = imagick.so" > /etc/php.d/40-imagick.ini
systemctl restart php-fpm && systemctl restart httpd
# PHP Extensions 정보 확인
php --ini
# php 정보를 출력하는 웹 페이지 생성 및 확인
echo "<?php phpinfo(); ?>" > /var/www/html/info.php
ls /var/www/html
# info.php 웹에 접속해서 확인
curl http://10.1.1.100/info.php
- 이제 웹 브라우저에서 AllInOne 인스턴스의 http://퍼블릭 IP/info.php로 접속하여 확인
- 마지막으로 AllInOne 인스턴스에 데이터베이스 서버를 설치해야 합니다.
- AllInOne 인스턴스에 SSH로 접속하여 다음 명령어를 입력하고 결과 확인
# mariadb 설치
amazon-linux-extras install mariadb10.5 -y
# mariadb 서비스 시작
systemctl start mariadb && systemctl enable mariadb
# mariadb 계정 관련 초기화 설정
echo -e "\n n\n n\n Y\n n\n Y\n Y\n" | /usr/bin/mysql_secure_installation
# mariadb root 계정 암호 설정: qwe123
mysql -e "set password = password('qwe123');"
# mariadb root 계정을 원격에서도 접속 가능하게 설정
mysql -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'qwe123';"
# mariadb에 워드프레스가 사용할 wordpressdb 데이터베이스 생성 및 확인
mysql -e "CREATE DATABASE wordpressdb"
mysql -e "show databases;"
# mariadb 서비스 재시작
systemctl restart mariadb
# mariadb 버전 확인
mysql --version
3-2. 워드프레스를 설치한 후 초기 설정 진행
- AllInOne 인스턴스에 SSH로 접속하여 다음 명령어를 입력하고 결과 확인
# 워드프레스 내려받기
wget https://wordpress.org/wordpress-6.2.zip
# 압축 풀기
unzip wordpress-6.2.zip
# 워드프레스 설정 파일 복사: wp-config.php
cp wordpress/wp-config-sample.php wordpress/wp-config.php
# 워드프레스 설정 파일에 mariadb 접속을 위한 정보 입력: 데이터베이스 이름, 계정 이름, 계정 암호
sed -i "s/database_name_here/wordpressdb/g" wordpress/wp-config.php
sed -i "s/username_here/root/g" wordpress/wp-config.php
sed -i "s/password_here/qwe123/g" wordpress/wp-config.php
# 정보가 입력된 워드프레스 설정 파일 확인
grep 'Database settings -' wordpress/wp-config.php -A15
# 압축 푼 wordpress 파일을 apache 웹 디렉터리에 복사
cp -r wordpress/* /var/www/html/
# 웹 사용자와 권한 설정
chown -R apache /var/www
chgrp -R apache /var/www
chmod 2775 /var/www
find /var/www -type d -exec chmod 2775 {} \;
find /var/www -type f -exec chmod 0664 {} \;
# 웹 서비스 재시작
systemctl restart httpd
- AllInOne 인스턴스에 퍼블릭 IP 주소로 웹에 접속.
- 최초 접속하는 것이므로 자동으로 초기 설정 페이지로 진입하기 때문에, 언어를 한국어로 선택하고 아래쪽에 있는 계속을 클릭
- 워드프레스 초기 설정 진행
사이트 제목과 관리자 정보를 입력한 후 아래쪽에 있는 워드프레스 설치
➊ 사이트 제목에 ‘my blog’ 입력
➋ 사용자명에 ‘myuser’ 입력
➌ 비밀번호에 ‘qwe123’ 입력
➍ 비밀번호 확인에서 ‘약한 비밀번호 사용 확인’에 체크
➎ 이메일 주소에 ‘a@a.com’ 입력
➏ 워드프레스 설치 누르기
- 워드프레스 관리자로 로그인
- 앞서 지정했던 관리자 계정과 암호를 입력한 후 아래쪽에 있는 로그인 클릭
➊ 사용자명 또는 이메일 주소에 ‘myuser’ 입력
➋ 비밀번호에 ‘qwe123’ 입력
3-3. 워드프레스에 블로그 글 작성
- 워드프레스 관리자 로그인 페이지에서 글 메뉴를 선택한 후 오른쪽 새로 추가 클릭
- 블록 편집기 설명 창이 열리면 오른쪽 위에 X를 클릭해서 건너뛸 수 있음
- 제목과 내용을 작성 후, 오른쪽에서 + > 이미지를 선택하고 이미지 파일 업로드
- 내용과 이미지는 자유롭게 작성
- 글을 모두 작성했으면 오른쪽 위에서 공개를 선택 후, 한 번 더 공개를 클릭하여 글을 발행
- 오른쪽에서 글 보기를 선택하면 작성한 글을 확인 가능함
4. 워드프레스 복합 구성 환경 구성하기
지금까지 워드프레스를 단일 구성 환경으로 구성을 해보았습니다. 이번에는 복합 구성 환경으로 구성해 보겠습니다.
WebSrv 인스턴스의 기본 설정 정보 확인하기
- WebSrv 인스턴스에 SSH로 접속하여 다음 명령어를 입력하고 결과 확인
# EFS 저장소 마운트 확인
df -hT --type nfs4
# 워드프레스 관련 파일 확인
ls /var/www/wordpress
# EFS 파일시스템 확인
aws efs describe-file-systems --output table --region ap-northeast-2
# Amazon RDS 인스턴스 정보 확인
aws rds describe-db-instances --region ap-northeast-2 --output table
# RDS 인스턴스의 접속 주소 확인: Endpoint
aws rds describe-db-instances --region ap-northeast-2 --query 'DBInstances[*].Endpoint.Address' --output text
# RDS 인스턴스의 접속 주소를 변수에 지정
RDS=$(aws rds describe-db-instances --region ap-northeast-2 --query 'DBInstances[*].Endpoint.Address' --output text)
echo $RDS
# 워드프레스 설정 파일에 mariadb 접속을 위한 정보 확인
grep 'Database settings -' /var/www/wordpress/wp-config.php -A15
# 워드프레스 설정 파일에 mariadb 접속 주소 설정을 변경하고 확인
sed -i "s/localhost/$RDS/g" /var/www/wordpress/wp-config.php
grep 'Database settings -' /var/www/wordpress/wp-config.php -A15
# 워드프레스가 사용할 wordpressdb 데이터베이스 생성
mysql -h $RDS -uroot -pqwe12345 -e 'CREATE DATABASE wordpressdb;'
# 생성된 데이터베이스 확인
mysql -h $RDS -uroot -pqwe12345 -e 'show databases;'
- 웹 브라우저에서 WebSrv 인스턴스의 퍼블릭 IP 주소로 접속하여 잘 접속되는지 확인해 보겠습니다.
- 단일 구성과 동일하게 최초 접속때는 초기 설정 페이지로 이동하게 됩니다.
- 이전과 마찬가지로 관리자 계정을 설정합니다. (이메일 주소도 작성하셔야 합니다!)
5. 실습을 위해 생성된 자원 삭제
- CloudFormation>스택 메뉴에서 wplab 스택을 체크한 후 삭제
- 이후 열린 창에서 스택 삭제를 누르고, 정상적으로 삭제되었는지 확인
참고 자료
- 길벗출판사, AWS 교과서
이 게시글은 해당 교재를 기반으로 하여 진행되었으며, 구체적인 설명은 교재를 참고하실 수 있습니다.
'Security > Cloud' 카테고리의 다른 글
[AWS] 버킷 정책을 활용한 S3 권한 제어 (0) | 2025.02.28 |
---|---|
[AWS] AWS CLI 설치 및 명령어 사용 (0) | 2025.02.27 |
[AWS] Amazon CloudFront로 CDN 구성 (1) | 2024.11.25 |
[AWS] Amazon VPC로 퍼블릭/프라이빗 서브넷 구성하기 (0) | 2024.11.24 |
[AWS] AWS EC2 인스턴스 배포 및 접근(for mac) (1) | 2024.11.23 |