Wordpress: 아무나 손 쉽게 블로그, 웹사이트, 쇼핑몰 등을 구축하는 웹사이트 제작 도구이며
Web - PHP - DB로 구성된다.
WooCommerce: 세계에서 가장 많이 사용하는 워드프레스 쇼핑몰 결제 플러그인이다.
실습은 여러 버전으로 나눠서 해보겠습니다.
첫 번째는 이렇게 구성해보겠습니다.
1. Cloudformation을 아래의 URL로 만들어 준 후 웹서버 설치와 관련하여 AllInOne EC2 instance에 퍼블릭 IP주소로 Xshell을 통해 접속해준다음 아래의 코드를 입력합니다.
# Cloudformation의 URL
https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/Wordpress/aws-wordpress-db2.yaml
# 관리자 전환
sudo su -
# 설치
yum install httpd -y
# 서비스 실행
systemctl start httpd && systemctl enable httpd
# 웹서버 버전 확인
httpd -v
# 웹 접속하여 확인
http://EC2_PublicIP/
2. PHP 설치를 위해 아래처럼 입력하고 중간중간마다 확인해줍니다.
# 설치
amazon-linux-extras install php7.4 -y
# PHP 버전 확인
php -v
# PHP Extensions 설치
yum install gcc php-xml php-mbstring php-sodium php-devel php-pear ImageMagick-devel ghostscript -y
# PHP Extensions 정보 확인
php --ini
# PHP Extensions - imagick 설치
## imagick 관련 ini 파일 생성
cat <<EOT> /etc/php.d/40-imagick.ini
; Enable imagick extension module
extension = imagick.so
EOT
# php.ini 파일 수정(아래 pecl 실행 시 필요한 메모리 확보 = 무제한 설정)
sed -i 's/^memory_limit = 128M/memory_limit = -1/g' /etc/php.ini
systemctl restart httpd
## pecl 로 imagick 설치
printf "\n" | pecl install imagick
# php-fpm 재시작으로 imagick 적용
systemctl restart php-fpm
systemctl restart httpd
# PHP Extensions 정보 확인
php --ini
# php info 페이지 생성
echo "<?php phpinfo(); ?>" > /var/www/html/info.php
# phpinfo.php 웹 접속하여 확인 -> 웹으로 접속함
http://EC2_PublicIP/info.php
# php.ini 파일 수정
sed -i 's/^upload_max_filesize = 2M/upload_max_filesize = 64M/g' /etc/php.ini
sed -i 's/^post_max_size = 8M/post_max_size = 64M/g' /etc/php.ini
sed -i 's/^max_execution_time = 30/max_execution_time = 300/g' /etc/php.ini
sed -i 's/^memory_limit = 128M/memory_limit = 256/g' /etc/php.ini
# php-fpm 재시작으로 적용
systemctl restart php-fpm
3. MariaDB 설치를 위해 아래 코드를 입력해줍니다.
# 설치
amazon-linux-extras install mariadb10.5 -y
# 서비스 시작
systemctl start mariadb && systemctl enable mariadb
# DB root 계정 설정 및 권장 설정
echo -e "\n Y\n n\n Y\n Y\n Y\n Y\n" | /usr/bin/mysql_secure_installation
# DB 에 한글 입력을 위한 설정
sed -i'' -r -e "/\[mysqld\]/a\character-set-server=utf8" /etc/my.cnf.d/mariadb-server.cnf
sed -i'' -r -e "/\[mysqld\]/a\collation-server=utf8_general_ci" /etc/my.cnf.d/mariadb-server.cnf
sed -i'' -r -e "/\[mysqld\]/a\init_connect=\"SET NAMES utf8\"" /etc/my.cnf.d/mariadb-server.cnf
sed -i'' -r -e "/\[mysqld\]/a\init_connect=\"SET collation_connection = utf8_general_ci\"" /etc/my.cnf.d/mariadb-server.cnf
sed -i'' -r -e "/\[client\]/a\default-character-set=utf8" /etc/my.cnf.d/client.cnf
sed -i'' -r -e "/\[mysql\]/a\default-character-set=utf8" /etc/my.cnf.d/mysql-clients.cnf
sed -i'' -r -e "/\[mysqldump\]/a\default-character-set=utf8" /etc/my.cnf.d/mysql-clients.cnf
# root 계정을 외부에서도 접속 가능하게 설정
mysql -e "set password = password('qwe123');"
mysql -uroot -pqwe123 -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'qwe123';"
# wordpressdb 데이터베이스 생성 및 확인
mysql -uroot -pqwe123 -e "CREATE DATABASE wordpressdb"
mysql -uroot -pqwe123 -e "show databases;"
# 서비스 재시작
systemctl restart mariadb
# 버전 확인
mysql --version
4. Wordpress 설치를 위해 아래 코드를 입력해줍니다.
# 다운로드
wget https://ko.wordpress.org/wordpress-latest-ko_KR.zip
# 압축 풀기
unzip wordpress-latest-ko_KR.zip
# wp-config.php 파일 복사
cp wordpress/wp-config-sample.php wordpress/wp-config.php
# wp-config.php 파일에 db 접속을 위한 정보 입력
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
# wp-config.php 파일에 메모리 상향 설정
cat <<EOT>> wordpress/wp-config.php
define('WP_MEMORY_LIMIT', '256M');
EOT
# 압축 푼 wordpress 파일을 웹 디렉터리에 복사
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
5. Wordpress 웹에 접속하여 관리자 계정 정보를 입력합니다.
# AllInOne 퍼블릭 IP
http://EC2_PublicIP/
6. Wordpress 에 글과 이미지도 삽입해보면서 하나의 EC2 인스턴스인 AllInOne에 Web+PHP+DB가 잘 구성되었는지 확인합니다.
7. 다음은 이와 같이 구성해보겠습니다.
8. AWS RDS서비스로 들어가 데이터베이스를 아래와 같이 생성해줍니다.
# 별로 언급이 없는 부분은 기본값 설정입니다!
생성 방식 : 표준 생성
엔진 옵션 : MySQL
템플릿 : 프리 티어
DB 인스턴스 식별자 : wpdb (현재 AWS 리전에서 AWS 계정이 소유하는 모든 DB 인스턴스에 대해 유일, 각자 편하게 설정)
마스터 사용자 이름 : root
마스터 암호(암호확인) : qwe12345
DB 인스턴스 클래스 : 버스터블 클래스(t 클래스 포함) db.t2.micro
VPC : WP-VPC1
퍼블릭 액세스 가능 : 아니요
VPC 보안 그룹 : ##-VPC1SG3-## 포함된것 선택 , 기본 default 는 제거
추가 구성 : 클릭
- 초기 데이터베이스 이름 : wordpressdb
- DB 파라미터 그룹 : ##-my
9. 몇분 후에 만들어진 DB의 엔드포인트를 복사해줍니다.
10. Websrv2 EC2 Instance에 Xshell로 접속해줍니다.
# 관리자 전환
sudo su -
# EFS 확인
df |grep efs
df -hT |grep efs
# RDS 엔드포인트를 변수에 지정
RDS=wpdb.cfd4iq95pfdk.ap-northeast-2.rds.amazonaws.com
# wp-config.php 파일에 DB 주소를 RDS 엔드포인트로 설정
sed -i "s/localhost/$RDS/g" /var/www/wordpress/wp-config.php
# DB 접속 테스트
mysql -h $RDS -uroot -pqwe12345 -e 'show databases;'
mysql -h $RDS -uroot -pqwe12345
11. Websrv2 퍼블릭 IP로 웹페이지에 들어가 워드프로스에 자격정보를 기입 사용한다.
12. 설정에서 빨간박스 부분을 RDS 엔드포인트로 연결해주면 끝입니다.
13. 자원제거 방법은 RDS를 삭제한 후 CloudFormation을 삭제하고 무사히 삭제되었는지 확인해줍니다.
'AWS > 실습(입문)' 카테고리의 다른 글
AWS-입문(10주차) Wordpress 이중화 구성 (0) | 2021.08.19 |
---|---|
AWS-입문(8주차) EC2 Auto Scaling (0) | 2021.07.31 |
AWS-입문(7주차) 네트워크 부하분산 서비스 (0) | 2021.07.23 |
AWS-입문(6주차) 데이터베이스 서비스 (1) | 2021.07.15 |
AWS-입문(5주차) 보안 서비스 (0) | 2021.07.12 |