튜토리얼: AL2 023에 LAMP 서버 설치 - Amazon Linux 2023

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

튜토리얼: AL2 023에 LAMP 서버 설치

다음 절차는 MariaDB (커뮤니티에서 개발한 My 포크) 지원이 포함된 PHP Apache 웹 서버를 023 인스턴스 (웹 서버 또는 스택이라고도 함) 에 AL2 설치하는 데 도움이 됩니다. SQL LAMP LAMP 이 서버를 사용하여 정적 웹 사이트를 호스팅하거나 데이터베이스에 정보를 읽고 쓰는 동적 PHP 애플리케이션을 배포할 수 있습니다.

중요

이 절차는 AL2 023과 함께 사용하기 위한 것입니다. 우분투 또는 Red Hat Enterprise Linux와 같은 다른 배포판에 LAMP 웹 서버를 설치하려는 경우 이 자습서는 작동하지 않습니다. 우분투의 경우 다음 Ubuntu 커뮤니티 문서를 참조하십시오. ApacheMySQLPHP 다른 배포는 관련 설명서를 참조하세요.

1단계: 서버 준비 LAMP

사전 조건
  • 이 자습서에서는 AL2 023을 사용하여 인터넷에서 연결할 수 있는 공개 DNS 이름을 가진 새 인스턴스를 이미 시작했다고 가정합니다. 자세한 내용은 AL2Amazon의 023 EC2 단원을 참조하십시오. 또한 SSH (포트 22), (포트 80) 및 HTTPS (포트 443) HTTP 연결을 허용하도록 보안 그룹을 구성해야 합니다. 이러한 사전 요구 사항에 대한 자세한 내용은 Amazon 사용 설명서의 Linux 인스턴스용 인바운드 트래픽 승인을 참조하십시오. EC2

  • 다음 절차는 023에서 사용 가능한 최신 PHP 버전 (현재 8.1) 을 AL2 설치합니다. 이 자습서에 설명된 것 이외의 PHP 응용 프로그램을 사용하려는 경우 8.1과의 호환성을 확인해야 합니다.

LAMP서버 준비하기
  1. 인스턴스에 연결합니다. 자세한 내용은 AL2023 인스턴스에 연결 단원을 참조하십시오.

  2. 모든 소프트웨어 패키지가 최신 상태로 업데이트되어 있는지 확인하기 위해, 인스턴스에서 퀵 소프트웨어 업데이트를 실행합니다. 이 과정은 몇 분 정도 시간이 소요될 수 있지만, 최신 보안 업데이트와 버그 수정이 있는지 확인하는 것이 중요합니다.

    -y 옵션을 사용하면 확인 여부를 묻지 않고 업데이트를 설치합니다. 설치 전에 업데이트 정보를 확인하려면 이 옵션을 생략합니다.

    [ec2-user ~]$ sudo dnf upgrade -y
  3. AL2023용 최신 버전의 Apache 웹 서버 및 PHP 패키지를 설치합니다.

    [ec2-user ~]$ sudo dnf install -y httpd wget php-fpm php-mysqli php-json php php-devel
  4. 소프트웨어 패키지 MariaDB를 설치합니다. dnf install 명령을 사용하여 여러 소프트웨어 패키지와 모든 관련 종속 프로그램을 동시에 설치합니다.

    [ec2-user ~]$ sudo dnf install mariadb105-server

    다음 명령을 사용하여 이러한 패키지의 현재 버전을 볼 수 있습니다.

    [ec2-user ~]$ sudo dnf info package_name

    예제:

    [root@ip-172-31-25-170 ec2-user]# dnf info mariadb105 Last metadata expiration check: 0:00:16 ago on Tue Feb 14 21:35:13 2023. Installed Packages Name : mariadb105 Epoch : 3 Version : 10.5.16 Release : 1.amzn2023.0.6 Architecture : x86_64 Size : 18 M Source : mariadb105-10.5.16-1.amzn2023.0.6.src.rpm Repository : @System From repo : amazonlinux Summary : A very fast and robust SQL database server URL : http://mariadb.org License : GPLv2 and LGPLv2 Description : MariaDB is a community developed fork from MySQL - a multi-user, multi-threaded : SQL database server. It is a client/server implementation consisting of : a server daemon (mariadbd) and many different client programs and libraries. : The base package contains the standard MariaDB/MySQL client programs and : utilities.
  5. Apache 웹 서버를 시작합니다.

    [ec2-user ~]$ sudo systemctl start httpd
  6. systemctl 명령을 사용하여 Apache 웹 서버가 매번 시스템이 부팅할 때마다 시작되도록 합니다.

    [ec2-user ~]$ sudo systemctl enable httpd

    다음 명령을 실행하여 httpd가 실행되고 있는지 확인할 수 있습니다.

    [ec2-user ~]$ sudo systemctl is-enabled httpd
  7. 인스턴스에 대한 인바운드 HTTP (포트 80) 연결을 허용하는 보안 규칙을 아직 추가하지 않았다면 추가하세요. 기본적으로 시작 마법사는 다음과 같습니다.N시작 중에 인스턴스에 대한 보안 그룹이 생성되었습니다. 보안 그룹 규칙을 추가하지 않은 경우 이 그룹에는 SSH 연결을 허용하는 단일 규칙만 포함됩니다.

    1. 에서 Amazon EC2 콘솔을 엽니다 https://console.aws.amazon.com/ec2/.

    2. 탐색 창에서 인스턴스(Instances)를 선택하고 인스턴스를 선택합니다.

    3. 보안 탭에서 인바운드 규칙을 확인합니다. 다음과 같은 규칙이 표시되어야 합니다.

      Port range Protocol Source 22 tcp 0.0.0.0/0
      주의

      0.0.0.0/0 사용하면 모든 IPv4 주소가 를 사용하여 인스턴스에 액세스할 수 SSH 있습니다. 테스트 환경에서 잠시 사용하는 것은 괜찮지만 프로덕션 환경에서는 안전하지 않습니다. 프로덕션에서는 특정 IP 주소나 주소 범위만 인스턴스에 액세스하도록 허용하세요.

    4. HTTP(포트 80) 연결을 허용하는 인바운드 규칙이 없는 경우 지금 규칙을 추가해야 합니다. 보안 그룹에 대한 링크를 선택합니다. Linux 인스턴스의 인바운드 트래픽 권한 부여의 절차를 사용하여 다음 값이 포함된 새 인바운드 보안 규칙을 추가합니다.

      • 다음을 입력합니다. HTTP

      • 프로토콜: TCP

      • 포트 범위: 80

      • 소스: 사용자 지정

  8. 웹 서버를 테스트합니다. 웹 브라우저에서 인스턴스의 퍼블릭 DNS 주소 (또는 퍼블릭 IP 주소) 를 입력합니다. /var/www/html에 콘텐츠가 없으면 "It works!"라는 메시지를 보여 주는 Apache 테스트 페이지가 표시됩니다.

    Amazon EC2 콘솔을 사용하여 인스턴스를 DNS 공개할 수 있습니다 (Public IPv4 DNS 열을 확인하고, 이 열이 숨겨져 있으면 Preferences (톱니바퀴 모양 아이콘) 을 선택하고 Public으로 전환하십시오). IPv4 DNS

    인스턴스의 보안 그룹에 포트 80에서의 HTTP 트래픽을 허용하는 규칙이 포함되어 있는지 확인하십시오. 자세한 내용은 보안 그룹에 규칙 추가를 참조하십시오.

    중요

    Amazon Linux를 사용하지 않는 경우, 이러한 연결을 허용하도록 인스턴스에서 방화벽을 구성해야 할 수도 있습니다. 방화벽 구성 방법에 대한 자세한 내용은 사용자의 특정 배포에 대한 문서를 참조하세요.

Apache httpd는 Apache document root라는 디렉터리에 보관된 파일을 처리합니다. Amazon Linux Apache 문서 루트는 /var/www/html이며, 기본적으로 루트에서 소유합니다.

ec2-user 계정에서 이 디렉터리의 파일을 조작할 수 있게 하려면 디렉터리의 소유권과 권한을 변경해야 합니다. 이 작업을 수행하는 방법에는 여러 가지가 있습니다. 본 자습서에서는 ec2-userapache 그룹에 추가하여 apache 그룹에 /var/www 디렉터리의 소유권을 부여하고 쓰기 권한을 할당합니다.

파일 권한 설정
  1. 사용자(이 경우는 ec2-user)를 apache 그룹에 추가합니다.

    [ec2-user ~]$ sudo usermod -a -G apache ec2-user
  2. 로그아웃하고 다시 로그인한 다음, 새 그룹을 선택하고 멤버십을 확인합니다.

    1. 로그아웃합니다(exit 명령을 사용하거나 터미널 창 닫기).

      [ec2-user ~]$ exit
    2. apache 그룹의 멤버십을 확인하려면 인스턴스에 다시 연결한 후 다음 명령을 실행합니다.

      [ec2-user ~]$ groups ec2-user adm wheel apache systemd-journal
  3. /var/www 및 그 콘텐츠의 그룹 소유권을 apache 그룹으로 변경합니다.

    [ec2-user ~]$ sudo chown -R ec2-user:apache /var/www
  4. 그룹 쓰기 권한을 추가하여 나중에 하위 디렉터리에 대한 그룹 ID를 설정하려면 /var/www와 그 하위 디렉터리의 디렉터리 권한을 변경합니다.

    [ec2-user ~]$ sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
  5. 그룹 쓰기 권한을 추가하려면 /var/www 및 그 하위 디렉터리의 파일 권한을 반복하여 변경합니다.

    [ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664 {} \;

이제 ec2-user (및 apache 그룹의 향후 구성원) 은 Apache 문서 루트에서 파일을 추가, 삭제 및 편집할 수 있으므로 정적 웹 사이트 또는 PHP 애플리케이션과 같은 콘텐츠를 추가할 수 있습니다.

웹 서버를 보호하려면(선택 사항)

HTTP프로토콜을 실행하는 웹 서버는 보내거나 받는 데이터에 대해 전송 보안을 제공하지 않습니다. 웹 브라우저를 사용하여 HTTP 서버에 연결하면 방문한 내용, 수신하는 웹 페이지의 내용, 제출하는 HTML 양식의 내용 (암호 포함) 이 네트워크 경로를 따라 어디에서든 도청자가 모두 볼 수 있습니다. URLs 웹 서버를 보호하는 가장 좋은 방법은/암호화로 데이터를 보호하는 HTTPS (HTTP보안) 지원을 설치하는 것입니다. SSL TLS

서버에서 활성화하는 HTTPS 방법에 대한 자세한 내용은 을 참조하십시오튜토리얼: AL2023 기반 SSL/TLS 구성.

2단계: LAMP 서버 테스트

서버가 설치되어 실행 중이고 파일 권한이 올바르게 설정되어 있다면 해당 ec2-user 계정으로 인터넷에서 사용할 수 있는 /var/www/html 디렉터리에 PHP 파일을 만들 수 있을 것입니다.

LAMP서버를 테스트하려면
  1. Apache 문서 루트에 PHP 파일을 생성합니다.

    [ec2-user ~]$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

    이 명령을 실행하는 동안 "Permission denied" 오류가 발생하면, 로그아웃하고 다시 로그인한 다음, 파일 권한 설정에서 구성한 적절한 그룹 권한을 선택합니다.

  2. 웹 URL 브라우저에 방금 만든 파일을 입력합니다. 이 URL 주소는 인스턴스의 퍼블릭 DNS 주소 뒤에 슬래시와 파일 이름이 붙습니다. 예:

    http://my.public.dns.amazonaws.com/phpinfo.php

    PHP정보 페이지가 표시되어야 합니다.

    LAMP서버 테스트 결과 PHP 정보 페이지가 표시됩니다.

    이 페이지가 보이지 않을 경우 이전 단계에서 /var/www/html/phpinfo.php 파일이 제대로 생성되었는지 확인하세요. 또한 다음 명령을 사용하여 필수 패키지가 모두 설치되었는지도 확인할 수 있습니다.

    [ec2-user ~]$ sudo dnf list installed httpd mariadb-server php-mysqlnd

    출력에서 필요한 패키지가 하나라도 나열되지 않으면, sudo yum install package 명령을 사용하여 패키지를 설치합니다.

  3. phpinfo.php 파일을 삭제합니다. 이 파일은 유용한 정보를 포함하고 있지만 보안상 이유로 인터넷에 공개되어서는 안 됩니다.

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

이제 모든 기능을 갖춘 LAMP 웹 서버가 생겼을 것입니다. Apache 문서 루트 위치에 콘텐츠를 추가하면 인스턴스의 공개 DNS 주소에서 해당 콘텐츠를 볼 수 있어야 합니다. /var/www/html

3단계: 데이터베이스 서버 보안 설정

MariaDB 서버의 기본 설치는 테스트 및 개발 기능에 유용한 여러 기능을 포함하고 있지만, 이 기능들은 프로덕션 서버에서는 비활성화되거나 제거되어야 합니다. mysql_secure_installation 명령을 통해 루트 암호를 설정하고 설치 패키지에서 보안성이 낮은 기능을 제거하는 과정을 수행할 수 있습니다. MariaDB 서버를 사용할 계획이 없더라도 이 절차를 수행하는 것이 좋습니다.

MariaDB 서버의 보안을 유지하려면
  1. MariaDB 서버를 시작합니다.

    [ec2-user ~]$ sudo systemctl start mariadb
  2. mysql_secure_installation를 실행합니다.

    [ec2-user ~]$ sudo mysql_secure_installation
    1. 암호를 입력하라는 메시지가 표시되면 루트 계정의 암호를 입력합니다.

      1. 현재 루트 암호를 입력합니다. 기본적으로 root 계정에는 암호가 없습니다. Enter를 누릅니다.

      2. 암호를 설정하려면 Y를 누른 후 안전한 암호를 두 번 입력합니다. 보안 암호 생성에 대한 자세한 내용은 을 참조하십시오 https://identitysafe.norton.com/password-generator/. 이 암호를 안전한 장소에 보관하시기 바랍니다.

        MariaDB에 대한 루트 암호를 설정하는 것은 데이터베이스를 보호하는 가장 기초적인 방법일 뿐입니다. 데이터베이스 기반 애플리케이션을 빌드하거나 설치할 때, 일반적으로 그 애플리케이션의 데이터베이스 서비스 사용자를 만들고 데이터베이스 관리 이외의 어떤 목적으로도 루트 계정을 사용하지 못하게 합니다.

    2. Y를 눌러서 익명 사용자 계정을 제거합니다.

    3. Y를 입력하여 원격 루트 로그인을 비활성화합니다.

    4. Y를 눌러서 테스트 데이터베이스를 제거합니다.

    5. Y를 눌러서 권한 테이블을 다시 로드하고 변경사항을 저장합니다.

  3. (선택 사항) 지금 바로 사용할 계획이 아니라면 MariaDB 서버를 중지합니다. 필요할 때 다시 시작할 수 있습니다.

    [ec2-user ~]$ sudo systemctl stop mariadb
  4. (선택 사항) 부팅 시 MariaDB 서버가 시작되도록 하려면 다음 명령을 입력합니다.

    [ec2-user ~]$ sudo systemctl enable mariadb

4단계: (선택 사항) 설치 phpMyAdmin

phpMyAdminEC2인스턴스의 내 SQL 데이터베이스를 보고 편집하는 데 사용할 수 있는 웹 기반 데이터베이스 관리 도구입니다. Amazon Linux 인스턴스에서 phpMyAdmin을 설치 및 구성하려면 다음 단계를 따르세요.

중요

TLSApache에서 SSL /를 활성화하지 않는 한 LAMP 서버에 액세스하는 phpMyAdmin 데 사용하지 않는 것이 좋습니다. 그렇지 않으면 데이터베이스 관리자 암호와 기타 데이터가 인터넷을 통해 안전하지 않게 전송됩니다. 개발자의 보안 권장 사항은 설치 보안을 phpMyAdmin 참조하십시오. EC2인스턴스의 웹 서버 보안에 대한 일반 정보는 을 참조하십시오튜토리얼: AL2023 기반 SSL/TLS 구성.

설치하려면 phpMyAdmin
  1. 필요한 종속 항목을 설치합니다.

    [ec2-user ~]$ sudo dnf install php-mbstring php-xml -y
  2. Apache를 다시 시작합니다.

    [ec2-user ~]$ sudo systemctl restart httpd
  3. php-fpm을 다시 시작합니다.

    [ec2-user ~]$ sudo systemctl restart php-fpm
  4. Apache 문서 루트(/var/www/html)로 이동합니다.

    [ec2-user ~]$ cd /var/www/html
  5. https://www.phpmyadmin.net/downloads 에서 최신 phpMyAdmin 릴리스의 소스 패키지를 선택합니다. 인스턴스로 파일을 직접 다운로드하려면 다음 예제와 같이 링크를 복사한 후 wget 명령에 붙여 넣습니다.

    [ec2-user html]$ wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
  6. phpMyAdmin 폴더를 생성하고 다음 명령을 사용하여 해당 폴더로 패키지의 압축을 풉니다.

    [ec2-user html]$ mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1
  7. 삭제 phpMyAdmin-latest-all-languages.tar.gz 타르볼.

    [ec2-user html]$ rm phpMyAdmin-latest-all-languages.tar.gz
  8. (선택 사항) 내 SQL 서버가 실행되고 있지 않으면 지금 시작하세요.

    [ec2-user ~]$ sudo systemctl start mariadb
  9. 웹 브라우저에 phpMyAdmin 설치 URL 내용을 입력합니다. URL이는 인스턴스의 퍼블릭 DNS 주소 (또는 퍼블릭 IP 주소) 이고 그 뒤에 슬래시와 설치 디렉터리 이름이 붙습니다. 예:

    http://my.public.dns.amazonaws.com/phpMyAdmin

    phpMyAdmin 로그인 페이지가 표시되어야 합니다.

    phpMyAdmin 설치 정보를 입력하면 phpMyAdmin 로그인 화면이 나타납니다. URL
  10. 이전에 생성한 root 사용자 이름과 내 SQL 루트 암호를 사용하여 phpMyAdmin 설치에 로그인합니다.

    작동하려면 먼저 설치를 구성해야 합니다. 먼저 다음과 같이 구성 파일을 수동으로 작성하는 것이 좋습니다.

    1. 최소 구성 파일로 시작하려면 자주 사용하는 텍스트 편집기를 사용하여 새 파일을 생성한 후에 config.sample.inc.php 내용을 파일에 복사합니다.

    2. 포함된 config.inc.php phpMyAdmin 디렉터리에 파일을 저장합니다index.php.

    3. 추가 설정에 대한 내용은 설치 지침의 phpMyAdmin 설치 스크립트 사용 섹션에 있는 사후 파일 작성 지침을 참조하십시오.

    사용에 대한 자세한 내용은 사용 phpMyAdmin phpMyAdmin 설명서를 참조하십시오.

문제 해결

이 섹션에서는 새 LAMP 서버를 설정하는 동안 발생할 수 있는 일반적인 문제를 해결하기 위한 제안을 제공합니다.

웹 브라우저를 사용하여 서버에 연결할 수 없음

다음을 확인하여 Apache 웹 서버가 실행 중이고 엑세스 가능한지 확인합니다.

  • 웹 서버가 실행되고 있습니까?

    다음 명령을 실행하여 httpd가 실행되고 있는지 확인할 수 있습니다.

    [ec2-user ~]$ sudo systemctl is-enabled httpd

    httpd 프로세스가 실행되지 않는 경우 LAMP서버 준비하기에 설명된 단계를 반복합니다.

  • 방화벽이 올바르게 구성되었습니까?

    인스턴스의 보안 그룹에 포트 80에서 HTTP 트래픽을 허용하는 규칙이 포함되어 있는지 확인하십시오. 자세한 내용은 보안 그룹에 규칙 추가를 참조하십시오.

를 사용하여 서버에 연결할 수 없습니다. HTTPS

다음 검사를 수행하여 Apache 웹 서버가 HTTPS 지원하도록 구성되어 있는지 확인하십시오.

  • 웹 서버가 올바르게 구성되었습니까?

    Apache를 설치하면 서버가 트래픽을 처리하도록 구성됩니다. HTTP HTTPS지원하려면 TLS 서버에서 활성화하고 SSL 인증서를 설치하십시오. 자세한 내용은 튜토리얼: AL2023 기반 SSL/TLS 구성을 참조하세요.

  • 방화벽이 올바르게 구성되었습니까?

    인스턴스의 보안 그룹에 포트 443에서 HTTPS 트래픽을 허용하는 규칙이 포함되어 있는지 확인하십시오. 자세한 내용은 Linux 인스턴스의 인바운드 트래픽 인증을 참조하십시오.

관련 주제

인스턴스로 파일을 전송하거나 웹 서버에 WordPress 블로그를 설치하는 방법에 대한 자세한 내용은 다음 문서를 참조하십시오.

이 자습서에서 사용되는 명령과 소프트웨어에 대한 자세한 내용은 다음 웹 페이지를 확인하세요.

웹 서버에 대한 도메인 이름을 등록하거나 기존 도메인 이름을 현재 호스트로 이전하는 것에 대한 자세한 내용은 Amazon Route 53 개발자 안내서Amazon Route 53에서 도메인 및 하위 도메인 생성 및 마이그레이션을 참조하세요.