웹사이트 검색

CentOS 7에 Linux, Apache, MySQL, PHP(LAMP) 스택을 설치하는 방법


소개

"LAMP” 스택은 서버가 동적 웹사이트 및 웹 앱을 호스팅할 수 있도록 일반적으로 함께 설치되는 오픈 소스 소프트웨어 그룹입니다. 이 용어는 Apache 웹 서버와 함께 Linux 운영 체제를 나타내는 약어입니다. 사이트 데이터는 일반적으로 MySQL 데이터베이스에 저장되며 동적 콘텐츠는 PHP에서 처리됩니다.

대부분의 Linux 시스템에서는 시스템의 기본 패키지 관리 저장소에서 mysql-server 패키지를 다운로드하여 MySQL을 설치할 수 있습니다. 그러나 CentOS 7에서 mysql-server 패키지는 실제로 MySQL의 대체품으로 작동하는 MySQL 관계형 데이터베이스 관리 시스템의 커뮤니티 개발 포크인 MariaDB를 설치합니다. 따라서 이 튜토리얼에서는 Linux, Apache, MariaDB 및 PHP로 구성된 LAMP 스택을 CentOS 7 서버에 설치하는 방법을 설명합니다.

전제 조건

이 가이드를 시작하기 전에 서버에 루트가 아닌 별도의 사용자 계정을 설정해야 합니다. CentOS 7 자습서의 초기 서버 설정에 따라 이를 수행하는 방법을 배울 수 있습니다.

1단계 - Apache 웹 서버 설치

Apache는 방문자에게 웹 페이지를 표시하는 데 사용되는 인기 있는 오픈 소스 웹 서버입니다. PHP 페이지를 제공하도록 구성할 수 있습니다.

CentOS의 패키지 관리자인 yum을 사용하여 Apache를 설치합니다. 패키지 관리자를 사용하면 CentOS에서 유지 관리하는 저장소에서 대부분의 소프트웨어를 설치할 수 있습니다.

터미널에 다음 명령을 입력하여 httpd Apache 패키지를 설치합니다.

  1. sudo yum install httpd

메시지가 표시되면 Y를 입력하여 Apache 설치를 확인합니다.

  1. sudo systemctl start httpd

웹 브라우저에 공인 IP 주소 또는 도메인 이름을 입력하여 서버가 실행 중인지 테스트할 수 있습니다.

참고: DigitalOcean을 DNS 호스팅 공급자로 사용하는 경우 제품 문서에서 새 도메인 이름을 설정하고 서버를 가리키는 방법에 대한 자세한 지침을 확인할 수 있습니다.

서버를 가리키는 도메인 이름이 없거나 서버의 공용 IP 주소를 모르는 경우 다음 명령을 실행하여 찾을 수 있습니다.

  1. ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

그러면 몇 가지 다른 주소가 인쇄됩니다. 웹 브라우저에서 각각을 시도할 수 있습니다.

다른 방법은 외부 당사자를 사용하여 서버를 보는 방법을 알려주는 것입니다. 다음 명령을 사용하여 특정 서버에 IP 주소를 요청하여 이를 수행할 수 있습니다.

  1. curl http://icanhazip.com

어떤 방법을 선택하든 웹 브라우저에 IP 주소를 입력하여 서버가 실행 중인지 확인하십시오.

http://your_server_IP_address

기본 CentOS 7 Apache 랜딩 페이지가 표시됩니다.

다음을 사용하여 Apache가 부팅 시 시작되도록 할 수 있습니다.

  1. sudo systemctl enable httpd.service

2단계 - MySQL(MariaDB) 설치

웹 서버가 실행 중이면 MariaDB를 설치할 수 있습니다. 사이트에서 정보를 저장할 수 있는 데이터베이스를 구성하고 액세스를 제공합니다.

MariaDB 소프트웨어 패키지를 설치하려면 다음을 실행하십시오.

  1. sudo yum install mariadb-server

설치가 완료되면 MariaDB를 시작합니다.

  1. sudo systemctl start mariadb

다음 명령을 사용하여 부팅 시 MariaDB를 시작하도록 활성화할 수 있습니다.

  1. sudo systemctl enable mariadb.service

데이터베이스 서버의 보안을 강화하려면 MariaDB와 함께 사전 설치된 보안 스크립트를 실행하는 것이 좋습니다. 이 스크립트는 안전하지 않은 일부 기본 설정을 제거하고 데이터베이스 시스템에 대한 액세스를 잠급니다.

다음을 실행하여 대화형 스크립트를 시작합니다.

  1. sudo mysql_secure_installation

이 스크립트는 MariaDB 설정을 변경할 수 있는 일련의 프롬프트를 안내합니다. 첫 번째 프롬프트는 현재 데이터베이스 루트 암호를 입력하라는 메시지를 표시합니다. 이것은 시스템 루트 사용자와 혼동하지 마십시오. 데이터베이스 루트 사용자는 데이터베이스 시스템에 대한 모든 권한을 가진 관리 사용자입니다. 방금 MariaDB를 설치했고 구성을 변경하지 않았기 때문에 이 암호는 비어 있습니다. 프롬프트에서 ENTER를 누르십시오.

다음 프롬프트는 데이터베이스 루트 비밀번호를 설정할 것인지 묻습니다. N을 입력한 다음 ENTER를 누르십시오.

여기에서 Y를 누른 다음 ENTER를 눌러 모든 후속 질문에 대한 기본값을 수락할 수 있습니다. 이렇게 하면 익명 사용자와 테스트 데이터베이스가 제거되고 원격 루트 로그인이 비활성화되며 이러한 새 규칙이 로드되어 서버가 변경 사항을 즉시 존중합니다.

완료되면 다음을 입력하여 MariaDB 콘솔에 로그인합니다.

  1. sudo mysql

이렇게 하면 관리 데이터베이스 사용자 루트로 MariaDB 서버에 연결됩니다.

Output
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 12 Server version: 5.5.68-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

보안을 강화하려면 모든 데이터베이스에 대해 덜 확장된 권한을 가진 전용 사용자 계정을 설정하는 것이 가장 좋습니다. 이는 서버에서 여러 데이터베이스를 호스팅할 계획인 경우 특히 중요합니다.

이러한 설정을 시연하려면 example_database라는 데이터베이스와 example_user라는 사용자를 만듭니다. 이러한 이름을 다른 값으로 바꿀 수 있습니다.

MariaDB 콘솔에서 다음 명령을 실행하여 새 데이터베이스를 생성합니다.

  1. CREATE DATABASE example_database;

새 사용자를 만들고 방금 만든 사용자 지정 데이터베이스에 대한 전체 권한을 부여할 수 있습니다. 다음 명령은 이 사용자의 비밀번호를 password로 정의하지만 이 값을 안전한 비밀번호로 바꿔야 합니다.

  1. GRANT ALL ON example_database.* TO 'example_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

이 명령은 example_user 사용자에게 example_database 데이터베이스에 대한 전체 권한을 부여하는 동시에 이 사용자가 서버에서 다른 데이터베이스를 생성하거나 수정하는 것을 방지합니다.

FLUSH 문을 사용하여 방금 example_user에게 부여한 권한을 다시 로드하고 저장합니다.

  1. FLUSH PRIVILEGES;

MariaDB 셸을 종료합니다.

  1. exit

MariaDB 콘솔에 다시 로그인하여 새 사용자에게 적절한 권한이 있는지 테스트할 수 있지만 위에서 생성한 example_user 자격 증명을 사용합니다.

  1. mysql -u example_user -p

이 명령의 -p 플래그에 유의하십시오. 이 플래그는 example_user 사용자를 생성할 때 선택한 암호를 묻는 메시지를 표시합니다. MariaDB 콘솔에 로그인한 후 다음 문을 사용하여 example_database 데이터베이스에 대한 액세스 권한이 있는지 확인합니다.

  1. SHOW DATABASES;

example_database가 출력에 나열되어야 합니다.

Output
+--------------------+ | Database | +--------------------+ | example_database | | information_schema | +--------------------+ 2 rows in set (0.000 sec)

MariaDB 셸을 종료하려면 다음을 입력합니다.

  1. exit

데이터베이스 시스템이 설정되었으며 PHP 설치로 이동할 수 있습니다.

3단계 - PHP 설치

콘텐츠를 제공하기 위해 Apache를 설치하고 데이터를 저장하고 관리하기 위해 MariaDB를 설치했습니다. PHP는 코드를 처리하여 사용자에게 동적 콘텐츠를 표시합니다. php 패키지 외에도 PHP가 MySQL 기반 데이터베이스와 통신할 수 있도록 하는 PHP 모듈인 php-mysql이 필요합니다. 핵심 PHP 패키지는 자동으로 종속 항목으로 설치됩니다.

이 명령을 사용하여 yum을 사용하여 phpphp-mysql 패키지를 설치합니다.

  1. sudo yum install php php-mysql

설치한 PHP 모듈을 활성화하려면 Apache 웹 서버를 다시 시작하십시오.

  1. sudo systemctl restart httpd.service

이제 서버가 LAMP 스택 애플리케이션에 필요한 모든 구성 요소로 구성되었습니다. 다음 단계는 구성을 테스트하여 모든 것이 조화롭게 작동하는지 확인하는 것입니다.

4단계 - Apache 웹 서버에서 PHP 테스트

CentOS 7의 기본 Apache 설치는 /var/www/html에 문서 루트를 생성합니다. PHP가 웹 서버 내에서 올바르게 작동하기 위해 Apache의 기본 설정을 변경할 필요가 없습니다.

그러나 Apache 문서 루트 폴더에서 기본 권한 설정을 변경하도록 조정할 수 있습니다. 이렇게 하면 각 명령에 sudo를 붙일 필요 없이 일반 시스템 사용자로 해당 디렉터리에서 파일을 만들고 수정할 수 있습니다.

다음 명령은 기본 Apache 문서 루트의 소유권을 sammy라는 사용자 및 그룹으로 변경하므로 이 명령에서 강조 표시된 사용자 이름과 그룹을 바꿔야 반영됩니다. 시스템의 사용자 이름 및 그룹:

  1. sudo chown -R sammy.sammy /var/www/html/

웹 서버가 예상대로 작동하는지 확인하기 위해 PHP 테스트 파일을 생성할 수 있습니다. 원하는 텍스트 편집기를 사용하여 이 파일을 만드십시오. 다음 예제는 CentOS 7의 기본 vi 텍스트 편집기를 사용합니다.

var/www/html 디렉토리에 info.php라는 PHP 파일을 만듭니다.

  1. vi /var/www/html/info.php

이렇게 하면 /var/www/html 디렉토리에서 빈 PHP 파일이 열립니다. vi 편집기에서 INSERT 모드로 들어가려면 I를 누르십시오. 이를 통해 텍스트 편집기 내에서 입력하고 변경할 수 있습니다. 다음 PHP 코드를 입력합니다.

<?php phpinfo(); ?>

이 PHP 코드는 서버에서 실행 중인 PHP 환경에 대한 정보를 표시합니다. 이 파일에 대한 변경을 마쳤으면 ESC 키를 눌러 viINSERT 모드를 종료합니다. :x(세미콜론 및 소문자 x)를 입력하여 파일을 저장하고 닫습니다.

서버의 공용 IP 주소로 이동한 다음 /info.php로 이동하여 웹 서버가 PHP 콘텐츠를 올바르게 표시하는지 테스트할 수 있습니다.

http://your_server_IP_address/info.php

아래와 유사한 웹 페이지가 브라우저에 표시됩니다.

이 페이지는 PHP의 관점에서 서버에 대한 정보를 제공합니다. 디버깅 및 설정이 올바르게 적용되는지 확인하는 데 유용합니다. PHP 서버에 대한 관련 정보를 확인한 후 이 파일에는 PHP 환경 및 CentOS 서버에 대한 민감한 정보가 포함되어 있으므로 제거하는 것이 가장 좋습니다.

rm을 사용하여 이 파일을 제거할 수 있습니다.

  1. rm /var/www/html/info.php

나중에 정보에 다시 액세스해야 하는 경우 언제든지 이 페이지를 다시 만들 수 있습니다. 다음으로 PHP를 사용하여 데이터베이스 연결을 테스트할 수 있습니다.

5단계 - PHP로 데이터베이스 연결 테스트(선택 사항)

일부 테스트 데이터로 테스트 테이블을 생성하여 PHP가 MariaDB에 연결하고 데이터베이스 쿼리를 실행하는지 테스트할 수 있습니다. PHP 스크립트에서 콘텐츠를 쿼리할 수 있습니다.

먼저 이 가이드의 2단계에서 생성한 데이터베이스 사용자로 MariaDB 콘솔에 연결합니다.

  1. mysql -u example_user -p

MariaDB 콘솔에서 다음 문을 실행하여 example_database 내에 todo_list라는 테이블을 생성합니다.

  1. CREATE TABLE example_database.todo_list (
  2. item_id INT AUTO_INCREMENT,
  3. content VARCHAR(255),
  4. PRIMARY KEY(item_id)
  5. );

MariaDB 콘솔은 편집할 때마다 테이블의 변경 사항을 알려줍니다.

Query OK, 0 rows affected (0.00 sec)

테스트 테이블에 콘텐츠의 몇 행을 삽입합니다. 다른 값을 사용하여 다음 명령을 몇 번 반복하여 테스트 테이블을 채울 수 있습니다.

  1. INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

데이터가 테이블에 성공적으로 저장되었는지 확인하려면 다음을 실행하십시오.

  1. SELECT * FROM example_database.todo_list;

다음은 출력의 예입니다.

Output
+---------+--------------------------+ | item_id | content | +---------+--------------------------+ | 1 | My first important item | | 2 | My second important item | | 3 | My third important item | | 4 | and this one more thing | +---------+--------------------------+ 4 rows in set (0.000 sec)

테스트 테이블에 유효한 데이터가 있는지 확인한 후 MariaDB 콘솔을 종료할 수 있습니다.

  1. exit

이제 MariaDB에 연결하고 콘텐츠를 쿼리할 PHP 스크립트를 만들 수 있습니다. 선호하는 편집기를 사용하여 사용자 지정 웹 루트 디렉터리에 새 PHP 파일을 만듭니다. 이 예에서는 vi를 사용합니다.

  1. vi /var/www/html/todo_list.php

vi 텍스트 편집기에서 I를 눌러 다음 내용을 추가하고 example_user 자신의 비밀번호:

<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";

try {
  $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
  echo "<h2>TODO</h2><ol>"; 
  foreach($db->query("SELECT content FROM $table") as $row) {
    echo "<li>" . $row['content'] . "</li>";
  }
  echo "</ol>";
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

ESC를 누른 다음 vi:x를 입력하여 편집을 완료하면 파일을 저장하고 닫습니다.

이제 웹 브라우저에서 서버의 호스트 이름 또는 공용 IP 주소를 방문한 다음 /todo_list.php를 방문하여 이 페이지에 액세스할 수 있습니다.

http://server_host_or_IP/todo_list.php

다음은 테스트 테이블에 삽입한 콘텐츠를 표시하는 웹 페이지의 예입니다.

결론

이 가이드에서는 Apache를 웹 서버로 사용하여 방문자에게 PHP 웹 사이트 및 애플리케이션을 제공하기 위한 유연한 기반을 구축했습니다. PHP 요청을 처리하도록 Apache를 설정하고 웹 사이트 데이터를 저장하기 위해 MariaDB 데이터베이스를 설정했습니다.