웹사이트 검색

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


소개

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

이 가이드에서는 Ubuntu 20.04 서버에 LAMP 스택을 설정합니다.

전제 조건

이 자습서를 완료하려면 루트가 아닌 sudo 사용 사용자 계정과 기본 방화벽이 있는 Ubuntu 20.04 서버가 있어야 합니다. 이는 Ubuntu 20.04용 초기 서버 설정 가이드를 사용하여 구성할 수 있습니다.

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

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

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

  1. sudo apt update

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

  1. sudo apt install apache2

또한 Y를 누른 다음 ENTER를 눌러 Apache 설치를 확인하라는 메시지가 표시됩니다.

설치가 완료되면 HTTP 트래픽을 허용하도록 방화벽 설정을 조정해야 합니다. UFW에는 이를 달성하기 위해 활용할 수 있는 다양한 애플리케이션 프로필이 있습니다. 현재 사용 가능한 모든 UFW 애플리케이션 프로필을 나열하려면 다음을 실행할 수 있습니다.

  1. sudo ufw app list

다음과 같은 출력이 표시됩니다.

Output
Available applications: Apache Apache Full Apache Secure OpenSSH

각 프로필의 의미는 다음과 같습니다.

  • Apache: 이 프로필은 포트 80만 엽니다(일반, 암호화되지 않은 웹 트래픽).
  • Apache 전체: 이 프로필은 포트 80(일반, 암호화되지 않은 웹 트래픽)과 포트 443(TLS/SSL 암호화된 트래픽)을 모두 엽니다.
  • Apache Secure: 이 프로필은 포트 443(TLS/SSL 암호화 트래픽)만 엽니다.

지금은 포트 80에서만 연결을 허용하는 것이 가장 좋습니다. 이는 Apache를 새로 설치하고 서버에서 HTTPS 트래픽을 허용하도록 구성된 TLS/SSL 인증서가 아직 없기 때문입니다.

포트 80의 트래픽만 허용하려면 Apache 프로필을 사용하세요.

  1. sudo ufw allow in "Apache"

다음을 사용하여 변경 사항을 확인할 수 있습니다.

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)

포트 80의 트래픽은 이제 방화벽을 통해 허용됩니다.

웹 브라우저에서 서버의 공용 IP 주소를 방문하여 모든 것이 계획대로 진행되었는지 확인하기 위해 바로 무작위 검사를 수행할 수 있습니다(이 정보가 없는 경우 공용 IP 주소가 무엇인지 알아보려면 다음 제목 아래의 참고 사항 참조) 이미):

http://your_server_ip

정보 제공 및 테스트 목적으로 제공되는 기본 Ubuntu 20.04 Apache 웹 페이지가 표시됩니다. 다음과 같아야 합니다.

이 페이지가 표시되면 이제 웹 서버가 올바르게 설치되었으며 방화벽을 통해 액세스할 수 있습니다.

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

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

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

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

이것은 당신에게 두세 줄을 돌려 줄 것입니다. 그것들은 모두 올바른 주소이지만 컴퓨터는 그 중 하나만 사용할 수 있으므로 자유롭게 각각 시도하십시오.

다른 방법은 curl 유틸리티를 사용하여 그것이 당신의 서버를 어떻게 보는지 알려주기 위해 외부인에게 연락하는 것입니다. 이는 특정 서버에 귀하의 IP 주소가 무엇인지 물어봄으로써 수행됩니다.

  1. curl http://icanhazip.com

IP 주소를 얻기 위해 사용하는 방법에 관계없이 기본 Apache 페이지를 보려면 웹 브라우저의 주소 표시줄에 주소를 입력하십시오.

2단계 - MySQL 설치

이제 웹 서버를 가동하고 실행 중이므로 사이트의 데이터를 저장하고 관리할 수 있도록 데이터베이스 시스템을 설치해야 합니다. MySQL은 PHP 환경에서 널리 사용되는 데이터베이스 관리 시스템입니다.

다시 apt를 사용하여 이 소프트웨어를 획득하고 설치합니다.

  1. sudo apt install mysql-server

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

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

  1. sudo mysql_secure_installation

VALIDATE PASSWORD PLUGIN을 구성할 것인지 묻습니다.

참고: 이 기능을 활성화하는 것은 판단을 내리는 것과 같습니다. 활성화되면 지정된 기준과 일치하지 않는 암호는 오류와 함께 MySQL에서 거부됩니다. 유효성 검사를 비활성화한 상태로 두는 것이 안전하지만 데이터베이스 자격 증명에 대해 항상 강력하고 고유한 암호를 사용해야 합니다.

Y(예)로 대답하거나 활성화하지 않고 계속하려면 다른 것을 대답하십시오.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

"예\라고 대답하면 암호 유효성 검사 수준을 선택하라는 메시지가 표시됩니다. 가장 강력한 수준으로 2를 입력하면 어떤 설정을 시도할 때 오류가 발생한다는 점에 유의하십시오. 비밀번호는 숫자, 대소문자, 특수문자를 포함하지 않거나 사전에 자주 사용되는 단어를 기반으로 합니다.

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary              file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

VALIDATE PASSWORD PLUGIN 설정 여부에 관계없이 서버는 다음으로 MySQL 루트 사용자의 비밀번호를 선택하고 확인하도록 요청합니다. 이것은 시스템 루트와 혼동하지 마십시오. 데이터베이스 루트 사용자는 데이터베이스 시스템에 대한 모든 권한을 가진 관리 사용자입니다. MySQL 루트 사용자에 대한 기본 인증 방법은 암호를 사용하지 않아도 되지만 암호가 설정된 경우에도 추가 안전 조치로 여기에서 강력한 암호를 정의해야 합니다. 잠시 후에 이에 대해 이야기하겠습니다.

암호 유효성 검사를 활성화한 경우 방금 입력한 루트 암호의 암호 강도가 표시되고 서버에서 해당 암호를 계속 사용할 것인지 묻습니다. 현재 비밀번호가 마음에 들면 프롬프트에서 "yes\를 의미하는 Y를 입력하십시오.

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

나머지 질문은 각 프롬프트에서 Y를 누르고 ENTER 키를 누르십시오. 이렇게 하면 일부 익명 사용자와 테스트 데이터베이스가 제거되고 원격 루트 로그인이 비활성화되며 이러한 새 규칙이 로드되어 MySQL이 변경 사항을 즉시 적용합니다.

완료되면 다음을 입력하여 MySQL 콘솔에 로그인할 수 있는지 테스트합니다.

  1. sudo mysql

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

Output
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 22 Server version: 8.0.19-0ubuntu5 (Ubuntu) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>

MySQL 콘솔을 종료하려면 다음을 입력하십시오.

  1. exit

mysql_secure_installation 스크립트를 실행할 때 암호를 정의했더라도 루트 사용자로 연결하기 위해 암호를 제공할 필요가 없다는 점에 유의하십시오. 관리 MySQL 사용자의 기본 인증 방법이 password가 아닌 unix_socket이기 때문입니다. 이것은 처음에는 보안 문제처럼 보일 수 있지만 루트 MySQL 사용자로 로그인할 수 있는 유일한 사용자는 콘솔에서 또는 다음과 함께 실행되는 애플리케이션을 통해 연결하는 sudo 권한을 가진 시스템 사용자이기 때문에 데이터베이스 서버를 더 안전하게 만듭니다. 동일한 권한. 실질적으로 이는 관리 데이터베이스 루트 사용자를 사용하여 PHP 애플리케이션에서 연결할 수 없음을 의미합니다. 루트 MySQL 계정에 대한 비밀번호 설정은 기본 인증 방법이 unix_socket에서 password로 변경되는 경우 보호 장치로 작동합니다.

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

참고: 이 글을 작성할 당시 기본 MySQL PHP 라이브러리 mysqlnd 6단계.

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

3단계 - PHP 설치

콘텐츠를 제공하기 위해 Apache를 설치하고 데이터를 저장하고 관리하기 위해 MySQL을 설치했습니다. PHP는 최종 사용자에게 동적 콘텐츠를 표시하는 코드를 처리하는 설정 구성 요소입니다. php 패키지 외에도 PHP가 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.3 (cli) (built: Jul 5 2021 15:13:35) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

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

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

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

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

Ubuntu 20.04의 Apache에는 기본적으로 /var/www/html 디렉토리의 문서를 제공하도록 구성된 하나의 서버 블록이 활성화되어 있습니다. 이 방법은 단일 사이트에서 잘 작동하지만 여러 사이트를 호스팅하는 경우 다루기 어려울 수 있습니다. /var/www/html을 수정하는 대신 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를 테스트하려면 # 문자를 추가하여 ServerNameServerAlias 옵션을 제거하거나 주석 처리할 수 있습니다. 각 옵션 줄의 시작 부분에.

이제 a2ensite를 사용하여 새 가상 호스트를 활성화할 수 있습니다.

  1. sudo a2ensite your_domain

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

  1. sudo a2dissite 000-default

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

  1. sudo apache2ctl configtest

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

  1. sudo systemctl reload apache2

이제 새 웹사이트가 활성화되었지만 웹 루트 /var/www/your_domain은 여전히 비어 있습니다. 가상 호스트가 예상대로 작동하는지 테스트할 수 있도록 해당 위치에 index.html 파일을 만듭니다.

  1. nano /var/www/your_domain/index.html

이 파일에 다음 콘텐츠를 포함합니다.

<html>
  <head>
    <title>your_domain website</title>
  </head>
  <body>
    <h1>Hello World!</h1>

    <p>This is the landing page of <strong>your_domain</strong>.</p>
  </body>
</html>

이제 브라우저로 이동하여 서버의 도메인 이름 또는 IP 주소에 다시 한 번 액세스하십시오.

http://server_domain_or_IP

다음과 같은 페이지가 표시됩니다.

이 페이지가 표시되면 Apache 가상 호스트가 예상대로 작동하고 있음을 의미합니다.

이 파일을 대체할 index.php 파일을 설정할 때까지 애플리케이션의 임시 랜딩 페이지로 이 파일을 그대로 둘 수 있습니다. 이렇게 하면 기본적으로 index.php 파일보다 우선하므로 문서 루트에서 index.html 파일을 제거하거나 이름을 변경해야 합니다.

Apache의 DirectoryIndex에 대한 참고 사항

Apache의 기본 DirectoryIndex 설정을 사용하면 index.html 파일이 항상 index.php 파일보다 우선합니다. 이는 방문자에게 정보를 제공하는 메시지가 포함된 임시 index.html 파일을 생성하여 PHP 애플리케이션에서 유지 관리 페이지를 설정하는 데 유용합니다. 이 페이지는 index.php 페이지보다 우선하므로 애플리케이션의 랜딩 페이지가 됩니다. 유지 관리가 끝나면 index.html의 이름이 변경되거나 문서 루트에서 제거되어 일반 응용 프로그램 페이지로 돌아갑니다.

이 동작을 변경하려면 /etc/apache2/mods-enabled/dir.conf 파일을 편집하고 index.php 파일은 DirectoryIndex 지시문 내에 나열됩니다.

  1. sudo nano /etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c>
        DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

파일을 저장하고 닫은 후 Apache를 다시 로드해야 변경 사항이 적용됩니다.

  1. sudo systemctl reload apache2

다음 단계에서는 PHP가 서버에 올바르게 설치 및 구성되었는지 테스트하기 위해 PHP 스크립트를 생성합니다.

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

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

사용자 지정 웹 루트 폴더 안에 info.php라는 새 파일을 만듭니다.

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

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

<?php
phpinfo();

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

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

http://server_domain_or_IP/info.php

다음과 유사한 페이지가 표시됩니다.

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

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

해당 페이지를 통해 PHP 서버에 대한 관련 정보를 확인한 후, PHP 환경 및 Ubuntu 서버에 대한 민감한 정보가 포함되어 있으므로 생성한 파일을 제거하는 것이 가장 좋습니다. rm을 사용하여 그렇게 할 수 있습니다:

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

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

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

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

이 글을 쓰는 시점에 기본 MySQL PHP 라이브러리 mysqlndMySQL 8의 기본 인증 방법인 caching_sha2_authentication을 지원하지 않습니다. 새 사용자를 생성해야 합니다. PHP에서 MySQL 데이터베이스에 연결할 수 있도록 mysql_native_password 인증 방법을 사용합니다.

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

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

  1. sudo mysql

새 데이터베이스를 만들려면 MySQL 콘솔에서 다음 명령을 실행합니다.

  1. CREATE DATABASE example_database;

이제 새 사용자를 만들고 방금 만든 사용자 지정 데이터베이스에 대한 전체 권한을 부여할 수 있습니다.

다음 명령은 mysql_native_password를 기본 인증 방법으로 사용하여 example_user라는 새 사용자를 생성합니다. 이 사용자의 비밀번호를 password로 정의하고 있지만 이 값을 자신이 선택한 보안 비밀번호로 바꿔야 합니다.

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

이제 이 사용자에게 example_database 데이터베이스에 대한 권한을 부여해야 합니다.

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

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

이제 다음을 사용하여 MySQL 셸을 종료합니다.

  1. exit

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

  1. mysql -u example_user -p

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

  1. SHOW DATABASES;

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

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

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

  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)

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

  1. exit

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

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

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

<?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_or_IP/todo_list.php

테스트 테이블에 삽입한 콘텐츠를 보여주는 다음과 같은 페이지가 표시되어야 합니다.

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

결론

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

즉각적인 다음 단계로 HTTPS를 통해 웹 서버에 대한 연결을 제공하여 보안 연결을 보장해야 합니다. 이를 달성하기 위해 Let’s Encrypt를 사용하여 무료 TLS/SSL 인증서로 사이트를 보호할 수 있습니다.