웹사이트 검색

Debian 11에 Linux, Apache, MariaDB, PHP(LAMP) 스택을 설치하는 방법


소개

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

이 소프트웨어 스택에는 일반적으로 MySQL이 데이터베이스 관리 시스템으로 포함되어 있지만 Debian을 포함한 일부 Linux 배포판은 MariaDB를 MySQL의 대체품으로 사용합니다.

이 가이드에서는 MariaDB를 데이터베이스 관리 시스템으로 사용하여 Debian 11 서버에 LAMP 스택을 설치합니다.

전제 조건

이 자습서를 따르려면 루트가 아닌 sudo가 활성화된 사용자 계정과 기본 방화벽이 있는 Debian 11 서버가 필요합니다. 이는 Debian 11용 초기 서버 설정 가이드를 사용하여 구성할 수 있습니다.

1단계 - Apache 설치 및 방화벽 업데이트

Apache 웹 서버는 세계에서 가장 널리 사용되는 웹 서버 중 하나입니다. 잘 문서화되어 있고 활발한 사용자 커뮤니티가 있으며 웹 역사의 많은 부분에서 널리 사용되어 웹 사이트를 호스팅하는 데 탁월한 선택입니다.

패키지 관리자 캐시를 업데이트하여 시작하십시오. 이 세션 내에서 sudo를 처음 사용하는 경우 apt:

  1. sudo apt update

그런 다음 다음을 사용하여 Apache를 설치합니다.

  1. sudo apt install apache2

이 명령은 Apache 설치를 확인하라는 메시지를 표시합니다. Y를 쓴 다음 ENTER를 써서 확인합니다.

Debian 11에서 UFW에는 방화벽 설정을 조정하는 데 사용할 수 있는 앱 프로필이 로드되어 있습니다. 다음을 실행하여 애플리케이션 프로필의 전체 목록을 봅니다.

  1. sudo ufw app list

나열된 WWW 프로필은 웹 서버에서 사용하는 포트를 관리하는 데 사용됩니다.

Output
Available applications: . . . WWW WWW Cache WWW Full WWW Secure . . .

ufw app infoWWW Full 프로필을 검사하면 포트 80443<에 대한 트래픽을 활성화한다고 출력에 표시됩니다. /코드>:

  1. sudo ufw app info "WWW Full"
Output
Profile: WWW Full Title: Web Server (HTTP,HTTPS) Description: Web Server (HTTP,HTTPS) Ports: 80,443/tcp

그런 다음 이 프로필에 대한 수신 HTTP 및 HTTPS 트래픽을 허용합니다.

  1. sudo ufw allow in "WWW Full"

웹 브라우저에서 서버의 공용 IP 주소를 방문하여 모든 것이 계획대로 진행되었는지 확인할 수 있습니다.

http://your_server_ip

이렇게 하면 정보 제공 및 테스트 목적으로 있는 기본 Debian 11 Apache 웹 페이지가 반환됩니다.

브라우저가 이 페이지를 반환하면 이제 웹 서버가 올바르게 설치되고 방화벽을 통해 액세스할 수 있습니다.

서버의 공용 IP 주소를 찾는 방법

서버의 공용 IP 주소를 모르는 경우 여러 가지 방법으로 찾을 수 있습니다. 일반적으로 이것은 SSH를 통해 서버에 연결하는 데 사용하는 주소입니다.

명령줄에서 이 작업을 수행하는 몇 가지 방법이 있습니다. 먼저 다음을 실행하여 iproute2 도구를 사용하여 IP 주소를 가져올 수 있습니다.

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

이렇게 하면 2~3줄 뒤로 반환됩니다. 그것들은 모두 올바른 주소이지만 컴퓨터는 그 중 하나만 사용할 수 있으므로 자유롭게 각각 시도하십시오.

다른 방법은 curl 유틸리티를 사용하여 외부인에게 연락하여 서버가 어떻게 보이는지 알려주는 것입니다. 다음 명령을 실행하고 특정 서버에 IP 주소가 무엇인지 물어볼 수 있습니다.

  1. curl http://icanhazip.com

어떤 방법을 선호하든 웹 브라우저에 IP 주소를 작성하여 서버가 기본 Apache 페이지를 실행 중인지 확인하십시오.

2단계 - MariaDB 설치

이제 웹 서버를 가동하고 실행 중이므로 사이트의 데이터를 저장하고 관리할 수 있도록 데이터베이스 시스템을 설치해야 합니다.

Debian 11에서는 전통적으로 MySQL 서버를 설치하는 데 사용되었던 메타패키지 mysql-serverdefault-mysql-server로 대체되었습니다. 이 메타패키지는 Oracle의 원래 MySQL 서버 커뮤니티 포크인 MariaDB를 참조하며 현재 Debian 기반 패키지 관리자 리포지토리에서 사용할 수 있는 기본 MySQL 호환 데이터베이스 서버입니다.

그러나 장기적인 호환성을 위해 메타 패키지를 사용하는 대신 프로그램의 실제 패키지인 mariadb-server를 사용하여 MariaDB를 설치하는 것이 좋습니다.

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

  1. sudo apt install mariadb-server

설치가 완료되면 MariaDB와 함께 사전 설치된 보안 스크립트를 실행하는 것이 좋습니다. 이 스크립트는 안전하지 않은 일부 기본 설정을 제거하고 데이터베이스 시스템에 대한 액세스를 잠급니다. 다음을 실행하여 대화형 스크립트를 시작합니다.

  1. sudo mysql_secure_installation

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

다음 프롬프트는 데이터베이스 루트 비밀번호를 설정할 것인지 묻습니다. MariaDB는 일반적으로 암호를 사용하는 것보다 더 안전한 루트 사용자에 대해 특별한 인증 방법을 사용하므로 지금 설정할 필요가 없습니다. N을 누른 다음 ENTER를 누르십시오.

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

완료되면 MariaDB 콘솔에 로그인합니다.

  1. sudo mariadb

이렇게 하면 이 명령을 실행할 때 sudo를 사용하여 유추되는 관리 데이터베이스 사용자 루트로 MariaDB 서버에 연결됩니다. 다음과 같은 출력을 받아야 합니다.

Output
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 41 Server version: 10.5.15-MariaDB-0+deb11u1 Debian 11 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>

루트 사용자로 연결하기 위해 암호를 제공할 필요가 없다는 점에 유의하십시오. 관리 MariaDB 사용자의 기본 인증 방법이 password가 아닌 unix_socket이기 때문입니다. 이것은 처음에는 보안 문제처럼 보일 수 있지만 루트 MariaDB 사용자로 로그인할 수 있는 유일한 사용자는 콘솔에서 연결하는 sudo 권한을 가진 시스템 사용자이기 때문에 데이터베이스 서버를 더 안전하게 만듭니다. , 또는 동일한 권한으로 실행되는 응용 프로그램을 통해. 실질적으로 이는 관리 데이터베이스 루트 사용자를 사용하여 PHP 애플리케이션에서 연결할 수 없음을 의미합니다.

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

다음을 사용하여 MariaDB 콘솔을 종료할 수 있습니다.

  1. exit

이제 MariaDB 서버가 설치되고 보호됩니다. 다음으로 LAMP 스택의 마지막 구성 요소인 PHP를 설치합니다.

3단계 - PHP 설치

콘텐츠를 제공하기 위해 Apache를 설치하고 데이터를 저장하고 관리하기 위해 MariaDB를 설치했습니다. PHP는 최종 사용자에게 동적 콘텐츠를 표시하기 위해 코드를 처리하는 설정 구성 요소입니다. 스크립트를 실행하고, MariaDB 데이터베이스에 연결하여 정보를 얻고, 처리된 콘텐츠를 웹 서버에 전달하여 표시할 수 있습니다.

php 패키지 외에도 PHP가 MariaDB와 같은 MySQL 기반 데이터베이스와 통신할 수 있도록 하는 PHP 모듈인 php-mysql이 필요합니다. Apache가 PHP 파일을 처리하도록 하려면 libapache2-mod-php도 필요합니다. 핵심 PHP 패키지는 자동으로 종속 항목으로 설치됩니다.

이러한 패키지를 설치하려면 다음 명령을 실행하십시오.

  1. sudo apt install php libapache2-mod-php php-mysql

설치가 완료되면 다음 명령을 사용하여 PHP 버전을 확인할 수 있습니다.

  1. php -v
Output
PHP 7.4.30 (cli) (built: Jul 7 2022 15:51:43) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.30, Copyright (c), by Zend Technologies

이 시점에서 LAMP 스택은 완전히 작동하지만 PHP 스크립트로 설정을 테스트하기 전에 웹 사이트의 파일과 폴더를 보관할 적절한 Apache 가상 호스트를 설정하는 것이 가장 좋습니다.

4단계 - 웹사이트를 위한 가상 호스트 만들기

Apache 웹 서버를 사용할 때 가상 호스트(Nginx의 서버 블록과 유사)를 생성하여 구성 세부 정보를 캡슐화하고 단일 서버에서 둘 이상의 도메인을 호스트할 수 있습니다. 이 가이드에서는 your_domain이라는 도메인을 설정하지만 이를 자신의 도메인 이름으로 바꿔야 합니다.

참고: DNS 호스팅 공급자로 DigitalOcean을 사용하는 경우 새 도메인 이름을 설정하고 서버를 가리키는 방법에 대한 자세한 지침은 제품 설명서를 확인하십시오.

기본적으로 Apache는 /etc/apache2/sites-available/000-default.conf/var/www/html에 있는 디렉토리에서 콘텐츠를 제공합니다. 코드>. 기본 웹 사이트 구성 파일 /var/www/html을 수정하는 대신 PHP 환경을 테스트하기 위한 새 가상 호스트를 생성합니다. 가상 호스트를 사용하면 단일 Apache 서버에서 여러 웹사이트를 호스팅할 수 있습니다. 또한 your_domain 사이트에 대한 /var/www 내에 디렉토리 구조를 만들고 /var/www/html을 클라이언트가 제공되는 기본 디렉토리로 남겨둡니다. 요청이 다른 사이트와 일치하지 않습니다.

다음과 같이 your_domain의 루트 웹 디렉토리를 생성하여 시작합니다.

  1. sudo mkdir /var/www/your_domain

다음으로 현재 시스템 사용자를 참조하는 $USER 환경 변수를 사용하여 디렉토리 소유권을 할당합니다.

  1. sudo chown -R $USER:$USER /var/www/your_domain

그런 다음 원하는 명령줄 편집기를 사용하여 Apache의 sites-available 디렉토리에서 새 구성 파일을 엽니다. 여기서는 nano를 사용합니다.

  1. sudo nano /etc/apache2/sites-available/your_domain.conf

새 빈 파일이 생성됩니다. 자신의 도메인 이름으로 다음 베어본 구성을 추가합니다.

<VirtualHost *:80>
    ServerName your_domain
    ServerAlias www.your_domain 
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/your_domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

완료되면 파일을 저장하고 닫습니다. nano를 사용하는 경우 CTRL + X를 누른 다음 YENTER를 눌러 이 작업을 수행할 수 있습니다.

VirtualHost 구성을 사용하면 /var/www/your_domainyour_domain을 제공하도록 Apache에 지시할 수 있습니다. >를 웹 루트 디렉토리로 지정합니다. 도메인 이름 없이 Apache를 테스트하려면 파운드 기호(#)를 각 옵션 줄의 시작 부분에 추가합니다.

이제 a2ensite를 사용하여 이 가상 호스트를 활성화합니다.

  1. sudo a2ensite your_domain

Apache와 함께 설치되는 기본 웹 사이트를 비활성화할 수 있습니다. 이 경우 Apache의 기본 구성이 가상 호스트를 무시하기 때문에 사용자 정의 도메인 이름을 사용하지 않는 경우 필요합니다. Apache의 기본 웹 사이트를 비활성화하려면 다음을 실행하십시오.

  1. sudo a2dissite 000-default

구성 파일에 구문 오류가 없는지 확인하려면 다음 명령을 실행하십시오.

  1. sudo apache2ctl configtest

마지막으로 이러한 변경 사항이 적용되도록 Apache를 다시 로드합니다.

  1. sudo systemctl reload apache2

다음으로 PHP 스크립트를 만들어 서버에 PHP가 올바르게 설치 및 구성되었는지 테스트합니다.

5단계 - 웹 서버에서 PHP 처리 테스트

이제 웹 사이트의 파일과 폴더를 호스팅할 사용자 지정 위치가 있으므로 PHP 테스트 스크립트를 만들어 Apache가 PHP 파일에 대한 요청을 처리하고 처리할 수 있는지 확인합니다.

사용자 지정 웹 루트 폴더 내에 info.php라는 새 파일을 생성하여 시작합니다.

  1. nano /var/www/your_domain/info.php

그러면 빈 파일이 열립니다. 파일 내부에 유효한 PHP 코드인 다음 텍스트를 추가합니다.

<?php
phpinfo();

완료되면 파일을 저장하고 닫습니다.

스크립트를 테스트하려면 웹 브라우저로 이동하여 서버의 도메인 이름 또는 IP 주소에 액세스한 다음 스크립트 이름(이 경우 info.php)에 액세스합니다.

http://your_domain/info.php

다음은 기본 PHP 웹 페이지의 예입니다.

이 페이지는 PHP의 관점에서 서버에 대한 정보를 제공합니다. 디버깅 및 설정이 올바르게 적용되는지 확인하는 데 유용합니다.

브라우저에서 이 페이지를 볼 수 있으면 PHP 설치가 예상대로 작동하는 것입니다.

해당 페이지를 통해 자신의 PHP 서버 관련 정보를 확인한 후 자신의 PHP 환경 및 데비안 서버에 대한 민감한 정보가 포함되어 있으므로 생성한 파일을 제거하는 것이 가장 좋습니다. 이렇게 하려면 rm을 사용하십시오.

  1. sudo rm /var/www/your_domain/info.php

나중에 정보에 다시 액세스해야 하는 경우 언제든지 이 페이지를 다시 만들 수 있습니다.

6단계 - PHP에서 데이터베이스 연결 테스트(선택 사항)

PHP가 MariaDB에 연결하고 데이터베이스 쿼리를 실행할 수 있는지 여부를 테스트하려면 테스트 데이터가 포함된 테스트 테이블을 생성하고 PHP 스크립트에서 해당 콘텐츠를 쿼리할 수 있습니다. 그 전에 테스트 데이터베이스와 액세스할 수 있도록 적절하게 구성된 새 MariaDB 사용자를 생성해야 합니다.

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

먼저 루트 계정을 사용하여 MariaDB 콘솔에 연결합니다.

  1. sudo mariadb

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

  1. CREATE DATABASE example_database;

이제 새 사용자를 생성하고 생성한 사용자 지정 데이터베이스에 대한 전체 권한을 부여합니다.

다음 명령은 암호로 인증하는 example_user라는 새 사용자를 만듭니다. 이 사용자의 비밀번호를 password로 정의하고 있지만 이 값을 자신이 선택한 보안 비밀번호로 바꿔야 합니다.

  1. CREATE USER 'example_user'@'%' IDENTIFIED BY 'password';

다음으로 이 사용자에게 example_database 데이터베이스에 대한 권한을 부여합니다.

  1. GRANT ALL ON example_database.* TO 'example_user'@'%';

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

다음으로 권한을 플러시하여 현재 세션에서 저장되고 사용 가능한지 확인합니다.

  1. FLUSH PRIVILEGES;

그런 다음 MariaDB 셸을 종료합니다.

  1. exit

이번에는 사용자 지정 사용자 자격 증명을 사용하여 MariaDB 콘솔에 다시 로그인하여 새 사용자에게 적절한 권한이 있는지 테스트할 수 있습니다.

  1. mariadb -u example_user -p

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

  1. SHOW DATABASES;

그러면 다음과 같은 결과가 표시됩니다.

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

다음으로 todo_list라는 테스트 테이블을 만듭니다. MariaDB 콘솔에서 다음 문을 실행합니다.

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

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

  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 파일을 만듭니다.

  1. nano /var/www/your_domain/todo_list.php

다음 PHP 스크립트는 MariaDB 데이터베이스에 연결하고 todo_list 테이블의 내용을 쿼리하여 결과를 목록으로 표시합니다. 데이터베이스 연결에 문제가 있으면 예외가 발생합니다.

example_user암호todo_list.php 스크립트에 추가합니다. 자신의 코드> 값:

<?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();
}

편집이 완료되면 파일을 저장하고 닫습니다.

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

http://your_domain/todo_list.php

이 웹 페이지는 테스트 테이블에 삽입한 내용을 방문자에게 보여줍니다.

이는 PHP 환경이 MariaDB 서버에 연결하고 상호 작용할 준비가 되었음을 의미합니다.

결론

이 가이드에서는 Apache를 웹 서버로 사용하고 MariaDB를 데이터베이스 시스템으로 사용하여 방문자에게 PHP 웹 사이트 및 애플리케이션을 제공하기 위한 유연한 기반을 구축했습니다.

즉각적인 다음 단계로 HTTPS를 통해 웹 서버에 대한 연결을 제공하여 보안 연결을 보장해야 합니다. 이를 달성하기 위해 PHP에서 종속성 및 패키지 관리를 위해 Composer 설치 및 사용 방법을 사용할 수 있습니다.