IT/AWS EC2

AWS EC2에 APM(Apache PHP Mysql) 설치

김 정 환 2021. 1. 22. 21:42
반응형

 

가장 먼저 Apache와 PHP 그리고 Mysql가 어떻게 조직되어 있는지 알아보자. 

 

 

Apache는 HTTP 웹 서버이다.

 

PHP(Hypertext Preprocessor)는 프로그래밍 언어의 일종이다. 동적 웹 페이지를 쉽고 빠르게 만들 수 있도록 해준다. PHP로 작성된 코드를 HTML 코드 안에 추가하면, 웹 서버는 해당 PHP 코드를 해석하여 동적 웹 페이지를 생성합니다. php는 중간에서 다리 역할을 해서 middle ware라고 불린다.

 

Mysql은 데이터베이스이다.

 

 

아래 과정을 설명하면 다음과 같다.

Web browser에서 test.php를 web server(apache)로 보낸다.

-> web server(apache)는 php파일을 처리하지 못하므로 php에게 보낸다.

-> php파일에는 데이터베이스에 요청을 보내는 코드가 적혀있다. php는 mysql에게 query를 보낸다.

-> php는 결과를 받아서 html 형태로 바꾸고 web server(apache)에게 보낸다.

-> web server(apache)는 web browser에게 받은 데이터를 html보낸다.

https://www.imagitrue.com/how-to-run-apache-mysql-and-php-on-windows-platform/

 

 

Mysql (MariaDB 5.5) 설치

이곳에서 MariaDB 5.5를 설치했습니다. 저는 5.5를 관리해야 해서 5.5를 설치했습니다. 그런데 너무 오래된 버전이라서 권장하지 않습니다.

 

 

Appache, Mysql, PHP 설치

설치하는 곳은 Amazon Linux AMI 입니다. 생성한 인스턴스를 실행하고 보안그룹에서 SSH(port 22), HTTP(port 80), HTTPS(port 443) 연결을 허용합니다. AWE EC2에서 인스턴스 생성하는 방법은 이곳에 있습니다.

 

 

일단 모든 소프트웨어 패키지가 최신 버전인지 확인하고 업데이트 합니다.

sudo yum update -y

 

 

이제 3개를 동시에 설치합니다. 필요한 것만 설치하셔도 됩니다. 저는 이미 mysql을 설치해서 mysql57-server만 빼고 설치했습니다.

sudo yum install -y httpd24 php72 mysql57-server php72-mysqlnd

 

 

Apache 웹 서버를 시작합니다. 

sudo service httpd start

그러면 'Starting httpd:      [OK]'가 뜰 것 입니다.

 

 

Apache 웹 서버를 매번 시스템이 부팅할 때마다 시작되도록 합니다. chkconfig 명령어를 이용합니다.

sudo chkconfig httpd on

성공하면 아무 메시지도 나타나지 않습니다.

 

 

httpd가 실행되는지 확인합니다.

chkconfig --list httpd

그러면 'httpd 0:off    1:off    2:on    3:on    4:on    5:on    6:off'라고 뜰 것 입니다.

 

 

웹 서버가 작동하는 테스트합니다. 실행중인 인스턴스를 클릭하면 '퍼블릭 IPv4 주소'를 복사합니다. xxx.xxx.xxx.xxx 형식입니다. 복사한 주소를 웹 브라우저에 넣습니다. 그러면 아래와 같은 화면을 볼 수 있다면 웹 서버가 작동하는 것 입니다.

[문제 해결]
위와 같은 화면이 나타나지 않는다면, 사용 중인 보안 그룹에서 HTTP(port 80) 트래픽을 허용하는지 확인하시길 바랍니다.

[문제 해결 끝]

 

Apache httpd는 /var/www/html에 있는 파일을 처리합니다. 즉, 이곳에 필요한 파일들을 작성해서 넣으면 됩니다. ec2-user 계정에서 이 디렉터리를 조작하기 위해서 권한을 변경해야 합니다. ec2-user를 apache 그룹에 추가하여 apache 그룹에 /var/www 디렉토리의 소유권을 부여하고 쓰기 권한을 할당할 것 입니다. 그러면 ec2-user와 apache그룹의 향후 멤버는 /var/www/html에서 파일 추가, 삭제, 편집을 할 수 있고, 이를 통해 사용자는 정적 웹 사이트 또는 php 애플리케이션과 같은 콘텐츠를 추가할 수 있습니다.

 

 

사용자(ec2-user)를 apache 그룹에 추가합니다.

sudo usermod -a -G apache ec2-user

 

 

로그아웃합니다.

exit

 

 

로그인해서 새 그룹을 선택하고 멤버십을 확인합니다.

groups

그러면 'ec2-user wheel apache'가 뜰 것 입니다.

 

 

/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 {} \;

 

 

그룹 쓰기 권한을 추가하려면 /var/www 및 그 하위 디렉터리의 파일 권한을 반복하여 변경합니다.

find /var/www -type f -exec sudo chmod 0664 {} \;

 

 

 

Appache, Mysql, PHP 연동 테스트

서버가 설치되어 실행 중이고 파일 권한이 올바르게 설정되어 있다면 사용자의 ec2-user계정을 통해서 /var/www/html에 php 파일을 생성할 수 있습니다.

 

 

/var/www/html로 이동해서 phpinfo.php를 만들어 줍니다.

sudo vi phpinfo.php

phpinfo.php의 내용을 아래와 같습니다.

1
2
3
4
<?php
phpinfo();
?>
 
cs

 

 

웹 브라우저에 퍼블릭 DNS 주소와 파일을 아래와 같은 형식으로 입력합니다.

http://퍼블릭 DNS 주소/Login.php

그러면 아래와 같은 화면이 나타납니다.

 

 

[문제 해결]

위 화면이 보이지 않을 경우, 모든 패키지가 설치되어 있는지 확인합니다.

sudo yum list installed httpd24 php72 mysql57-server php72-mysqlnd

 

위 화면이 보이지 않고, 코드가 직접 나타나는 경우 httpd와 php가 연동이 안된 경우 입니다. 이전에 httpd와 php를 따로 설치한 경우가 있었습니다. 버전이 서로 맞지 않는 등의 문제가 있었습니다.

httpd.conf 파일이 어디 있는지 찾습니다. 보통 /etc/httpd/conf/httpd.conf에 있습니다. 없을 경우, 아래 방법으로 찾습니다.

find / -name httpd.conf

httpd.conf을 열어서 아래 처럼 2 부분을 바꿔줍니다.

1
2
3
4
5
6
7
8
9
10
11
DirectoryIndex index.html index.html.var // 이 부분을 찾아서 index.php index.php3 추가
(변경) DirectoryIndex index.html index.html.var index.php index.php3
 
# If the AddEncoding directives above are commented-out, then you
# probably should define those extensions to indicate media types:
 
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz // 이 부분 찾아서 아래 2줄 추가
 
AddType application/x-httpd-php .php .html .htm .inc
AddType application/x-httpd-php-source .phps
cs

 

 

httpd를 재시작합니다.

sudo service httpd restart

[문제 해결 끝]

 

 

이제 phpinfo.php를 삭제합니다. 중요한 정보를 담고 있어서 개발할 때를 제외하고 공개되면 안 됩니다.

sudo rm /var/www/html/phpinfo.php

 

 

이제 mysql과의 연결을 테스트 해보겠습니다. /var/www/html에 dbconnect.php 파일을 생성합니다. 그리고 아래 내용을 넣습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
echo "MySql 연결 테스트<br>";
 
$con = mysqli_connect('localhost or 퍼블릭 DNS 주소''사용자 명''비밀번호''DB 이름');
 
if($con){
    echo "connect : 성공<br>";
}
else{
    echo "disconnect : 실패<br>";
}
 
$sql = 'SELECT VERSION()';
$result = mysqli_query($con$sql);
$data = mysqli_fetch_assoc($result);
echo $data['VERSION()'];
?>
 
cs

웹 브라우저에 '퍼블릭 DNS 주소/파일 이름'을 입력합니다. 만약 연결이 잘되면 아래와 같은 메시지가 뜰 것 입니다.

 

[문제 해결]

실패가 뜨는 경우, 어떤 오류가 있는지 확인해야 합니다. php에서 오류를 볼 수 있도록 하겠습니다. 이 방법은 개발할 때 유용해서 켜 놓지만, 배포 후에는 꺼 놓습니다. 왜냐하면, 중요한 내용이 드러나서 위험하기 때문입니다.

 

php.ini 파일을 찾습니다. 저는 php-7.2.ini 파일이 대신 있었습니다. 파일을 열어서 'display_errors = Off'를 찾아줍니다. 그리고 On으로 바꿔줍니다. 그리고 httpd를 재시작합니다. 그러면, 웹 브라우저에 php에 대한 오류가 출력됩니다. 출력된 오류를 보고 해결하면 됩니다.

[문제 해결 끝]

반응형