AWS LAMP 환경 구성 + WordPress 설치

앙금빵·2021년 8월 1일
0

AWS Compute Service

목록 보기
5/9
post-thumbnail

AWS LAMP 환경 설치

Prerequisite

  • Amazon EC2 Linux 2 환경 구성

Chap 1. Amazon Linux 환경에서 APM 환경 설치

Step 1-1. 소프트웨어 패키지 최신 상태로 업데이트

  • Apache, PHP, MariaDB의 연동을 최적화 시키기 위한 목적

yum을 이용하여 간단히 업데이트를 진행할 수 있다.

# 아마존 리눅스 버전 확인
cat /etc/system-release

# 소프트웨어 패키지 최신 상태로 업데이트 확인
# 퀵 소프트웨어 업데이트 실행 명령
# 최신 보안 업데이트와 버그 수정을 위해 수행할 필요 있음

sudo yum update -y

Step 1-2. LAMP(Linux Apache, PHP, MariaDB)

  • 배포판에는 패키지 형태(rpm, dep)로 아파치를 배포
  • 배포판과 함께 제공되는 아파치와 연동되는 PHP, MySQL 버전은 배포판에 따라 제공된다.
  • 상/하위 버전의 아파치, PHP, MySQL의 조합을 이루기 위해서 컴파일 설치를 해야하는 경우가 많다.
# Apache: https://httpd.apache.org/
# PHP: https://www.php.net/
# MySQL: https://www.mysql.com/

# Amazon Linux Extras Repository 설치 & LAMP MariaDB 및 PHP 패키지 최신 버전 가져옴
sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2

# 인스턴스 최신상태이므로 Apache & MariaDB, PHP Software Package 설치
sudo yum install -y httpd mariadb-server

# 패키지 현재 버전 볼 수 있음
yum info package_name

-----
[ec2-user@aws_lamp ~]$ yum info mariadb
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Installed Packages
Name        : mariadb
Arch        : x86_64
Epoch       : 3
Version     : 10.2.38
Release     : 1.amzn2.0.1
Size        : 37 M
Repo        : installed
From repo   : amzn2extra-lamp-mariadb10.2-php7.2
Summary     : A community developed branch of MySQL
URL         : http://mariadb.org
License     : GPLv2 with exceptions and LGPLv2 and BSD
Description : MariaDB is a community developed branch of MySQL.
            : MariaDB is a multi-user, multi-threaded SQL database server.
            : It is a client/server implementation consisting of a server daemon (mysqld)
            : and many different client programs and libraries. The base package
            : contains the standard MariaDB/MySQL client programs and generic MySQL files.

[ec2-user@aws_lamp ~]$ yum info httpd
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Installed Packages
Name        : httpd
Arch        : x86_64
Version     : 2.4.48
Release     : 2.amzn2
Size        : 4.0 M
Repo        : installed
From repo   : amzn2-core
Summary     : Apache HTTP Server
URL         : https://httpd.apache.org/
License     : ASL 2.0
Description : The Apache HTTP Server is a powerful, efficient, and extensible
            : web server.
-----

Step 1-3. Apache 웹 서버 시작

# Apache 웹 서버 시작
sudo systemctl start httpd

# 매번 부팅할 때 Apache 웹서버 시작
sudo systemctl enable httpd

# httpd(Apache 웹서버) 실행되고 있는지 확인
sudo systemctl is-enabled httpd

Step 1-4. 웹 서버 테스트 및 쓰기 권한 할당

  • 인스턴스 Public DNS 주소(or Public IP 주소) 입력
  • /var/www/html 에 콘텐츠가 없으면 Apache 테스트 페이지가 표시된다.

  • Apache httpd는 Apache document root 라는 Directory에 보관된 파일을 처리한다.
  • Amazon Linux Apache Document root는 /var/www/html이며 기본적으로 root에서 소유

파일 권한 설정

  • chmod 명령을 통해 쓰기 권한을 추가한다.
  • 허가권한은 775 = User&Group rwx , Other rx 권한부여
  • 특수 권한 SetGID 2000 부여: 2775
    apache 그룹에 /var/www 디렉터리의 소유권을 부여하고 쓰기 권한을 할당

(※ SetGID는 파일 또는 디렉터리를 실행시에 해당 파일 및 디렉터리의 소유 그룹의 권한을 갖게 되는 퍼미션 설정)

# 사용자(ec2-user)를 apache 그룹에 추가
sudo usermod -a -G apache ec2-user

# exit 명령을 통해 로그아웃 & 재 로그인 -> 멤버쉽 확인
[ec2-user@aws_lamp ~]$ groups
ec2-user adm wheel apache systemd-journal

# /var/www/ 및 콘텐츠의 그룹 소유권을 apache 그룹으로 변경
sudo chown -R ec2-user:apache /var/www

# 그룹 쓰기 권한을 추가하여 나중에 하위 디렉터리에 대한 그룹 ID를 설정하려면 /var/www와 그 하위 디렉터리의 디렉터리 권한을 변경
sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
find /var/www -type f -exec sudo chmod 0664 {} \;
  • chmod 2775 vs 775
  • 리눅스 find 명령어

이제 ec2-user와 apache 그룹의 향후 멤버는 Apache document root에서 파일 추가, 삭제, 편집을 할 수 있고, 이를 통해 사용자는 정적 웹 사이트 또는 PHP Application과 같은 컨텐츠를 추가 할 수 있다.


Stpe 2. LAMP 서버 테스트

Step 2-1. Apache Document Root 에서 PHP 파일을 생성
[ec2-user@aws_lamp ~]$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

Step 2-2 . 웹 브라우저에서 방금 생성한 파일의 URL을 입력한다. (생성한 파일: php)

http://<개인 Public DNS 주소> /phpinfo.php

Step 2-3. 생성한 phpinfo 파일 삭제 (보안상 이유로 인터넷에 공개되어서는 안됨)

[ec2-user@aws_lamp ~]$ rm /var/www/html/phpinfo.php


Step 3. DB 서버 보안 설정

  • Production 서버에서는 비활성화되거나 제거되어야 한다.
# 3-1. MariaDB 서버 시작
sudo systemctl start mariadb

# 3-2. mysql_secure_installation 실행
sudo mysql_secure_installation

# 3-3. (Option) MariaDB 서버 중지
sudo systemctl stop mariadb
# 3-4. (Option) 부팅 시 Maria DB 서버 시작
sudo systemctl enable mariadb

Step 4 phpMyAdmin 설치

# 4-1 필요한 종속 항목 설치
sudo yum install php-mbstring php-xml -y

# 4-2 Apache 다시 시작
sudo systemctl restart httpd

# 4-3 php-fpm을 다시 시작
sudo systemctl restart php-fpm

# 4-4 Apache 문서 루트 /var/www/html 로 이동
cd /var/www/html

# 4-5 phpMyAdmin 최신 릴리스의 소스 패키지를 선택
wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz

# 4-6 phpMyAdmin 폴더 생성 & 패키지 압축 해제
mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1

# 4-7 phpMyAdmin-latest-all-languages.tar.gz tarball을 삭제
rm phpMyAdmin-latest-all-languages.tar.gz

# 4-8 (선택 사항) MySQL 서버가 실행 중이지 않으면 지금 시작
sudo systemctl start mariadb

# 4-9 웹 브라우저에서 phpMyAdmin 설치의 URL을 입력
http://my.public.dns.amazonaws.com/phpMyAdmin

# 4-10 root 사용자 이름 및 MySQL 루트 암호로 phpMyAdmin 설치에 로그인


Chap 2. WordPress 블로그 호스팅

Step 1. 연동 테스트를 위한 DB 및 사용자 생성

Step 1-1. WordPress 설치

# WordPress 설치 최신 패키지 다운로드
wget https://wordpress.org/latest.tar.gz

# 설치 패키지의 압축 및 Archiving 해제
tar -xzf latest.tar.gz

Step 1-2. DB 사용자 및 DB 생성

  • 블로그 게시물, 사용자 의견 등의 정보를 DB에 저장해야 한다.
  • 블로그의 DB와 DB에 대하여 정보 읽기 및 저장 권한이 있는 사용자를 생성할 수 있다.
# DB서버 시작
sudo systemctl start mariadb

# DB 서버에 root 사용자로 로그인
mysql -u root -p

# DB에 대한 사용자 및 암호 생성
# CREATE USER 'wordpress-user'@'localhost' IDENTIFIED BY 'your_strong_password';
CREATE USER 'jonghyun'@'localhost' IDENTIFIED BY 'qwe123';

# DB 생성 (설명할 수 있는 Name 부여)
# CREATE DATABASE `wordpress-db`;
CREATE DATABASE `Test-db`;

# DB에 대한 전체 권한을 이전에 생성한 WordPress 사용자에게 부여
# GRANT ALL PRIVILEGES ON `wordpress-db`.* TO "wordpress-user"@"localhost";
GRANT ALL PRIVILEGES ON `Test-db`.* TO "jonghyun"@"localhost";

# 데이터베이스 권한을 새로고침(flush) 해서 모든 변경사항이 적용되도록 한다.
FLUSH PRIVILEGES;

# mysql 클라이언트 종료
exit

Step 2. DB 연동 테스트

# wp-config-sample.php 파일을 wp-config.php 파일에 복사 (for 원본 백업)
cp wordpress/wp-config-sample.php wordpress/wp-config.php

# wp-config.php 파일에 설치 값 입력
vi wordpress/wp-config.php

  • WordPress 사용자가 로컬 컴퓨터에 저장하는 브라우저 쿠키에 암호 계층을 제공
  • 기본적으로 긴 무작위 값을 추가해서 사이트의 보안성을 강화
  • https://api.wordpress.org/secret-key/1.1/salt/ 방문하여 무작위로 생성 key 값의 세트를 반영


WordPress 파일을 Apache 문서 root 아래 설치

# WordPress를 문서 Root에서 실행 (=블로그를 웹 서버의 실제 루트 에서 사용)
cp -r wordpress/* /var/www/html/

# WordPress를 문서 루트 대체 디렉터리에서 실행
mkdir /var/www/html/blog
cp -r wordpress/* /var/www/html/blog/
  • 기존 WordPress가 올바르게 작동하기 위해 Apache.htaccess 파일 사용 But Amazon Linux에서 기본적으로 해당 파일을 사용할 수 없음. → Apache Document Root에서 모든 재정의를 허용해야 함
# httpd.conf 파일 편집
sudo vim /etc/httpd/conf/httpd.conf

AllowOverride None 라인을 AllowOverride All로 변경


(옵션) PHP 그래픽 그리기 라이브러리 설치

  • 이미지 수정할 수 있음
# PHP 그래픽 그리기 라이브러리 설치
sudo yum install php-gd

# 설치 버전 확인
sudo yum list installed | grep php-gd

WordPress URL 입력

WordPress를 문서 루트 대체 디렉터리 /var/www/html/blog에서 실행하므로

# http://<개인 Instance Public DNS 주소>/blog/wp-admin/install.php

http://ec2-3-34-131-156.ap-northeast-2.compute.amazonaws.com/blog/wp-admin/install.php

WordPress가 성공적으로 설치됬다면 다음과 같은 화면이 나올 것이다.

Fin.

profile
Cloud 관련 개인 공부 지식들을 기록하는 공간입니다.

0개의 댓글