Debian 12, 11 또는 10에서 Nginx와 함께 phpMyAdmin을 설치하는 방법

phpMyAdmin은 PHP로 작성되어 널리 사용되는 오픈 소스 도구로, 웹을 통해 MySQL 및 MariaDB 관리를 처리하도록 설계되었습니다. 데이터베이스, 테이블, 필드 또는 행 생성, 수정, 삭제, SQL 문 실행, 사용자 권한 관리 등 다양한 데이터베이스 작업을 수행하기 위한 직관적인 그래픽 인터페이스를 제공합니다. Debian 12, 11, 10에 phpMyAdmin을 설치하려면 LEMP 스택(Linux, NGINX, MySQL/MariaDB, PHP)을 수동으로 설정한 다음 최신 phpMyAdmin 빌드를 다운로드하고 구성해야 합니다.

phpMyAdmin을 사용하면 데이터베이스 관리가 단순화되므로 데이터베이스 작업에 명령줄을 사용하는 데 익숙하지 않은 사용자도 액세스할 수 있습니다. 이 가이드는 LEMP 스택을 수동으로 설치하고, phpMyAdmin을 구성하고, 설정을 보호하는 단계를 안내합니다.

phpMyAdmin용 Debian에 LEMP 스택 설치

1단계: 데비안 시스템 새로 고침

안전하고 오류 없는 설정을 위해 최신 패키지로 Debian 시스템 업데이트를 시작하세요. 이 사전 조치는 설치 프로세스 중 충돌 가능성을 줄이는 것을 목표로 합니다.

sudo apt update && sudo apt upgrade

커널이나 많은 패키지를 업데이트하는 경우 재부팅이 필요합니다.

2단계: Nginx 설치

먼저 Nginx를 설치하여 LEMP 스택을 설정합니다. 다음 명령을 실행합니다.

sudo apt install nginx

일반적으로 시스템은 설치 후 기본적으로 Nginx 서비스를 활성화합니다. 그러나 항상 상태를 신중하게 확인하고 예상대로 작동하는지 확인하십시오.

systemctl status nginx

서버가 활성 상태가 아닌 경우 다음 명령을 사용하여 Nginx를 활성화하고 재부팅할 때마다 자동으로 시작되는지 확인하세요.

sudo systemctl enable nginx --now

이 명령은 Nginx의 기본 버전을 설치합니다.

참고: Nginx의 최신 안정 버전이나 메인라인 버전을 배포하는 데 관심이 있다면 다음 가이드를 따르세요. Debian 12, 11 또는 10 Linux에서 Nginx를 업그레이드하는 방법.

3단계: MariaDB 설치

다음으로 LEMP 스택 설정에 데이터베이스 구성 요소를 설치합니다. 많은 사람들이 뛰어난 성능과 추가 기능 때문에 MySQL 대신 MariaDB를 선택합니다.

MariaDB를 설치하려면 다음을 실행하십시오.

sudo apt install mariadb-server mariadb-client

참고: 공식 MariaDB.org 리포지토리에서 다른 버전의 MariaDB를 설치하려면 다음 가이드를 참조하세요. Debian 12, 11 또는 10 Linux에 MariaDB 11.x 또는 10.x 설치.

완료되면 Nginx 확인과 유사하게 MariaDB 서비스의 활성화 및 올바른 기능을 확인합니다.

systemctl status mariadb

MariaDB가 활성화되지 않은 경우 아래 명령을 사용하여 활성화하고 재부팅 시 시작되는지 확인하세요.

sudo systemctl enable mariadb --now

MariaDB의 보안을 강화하려면 제공된 보안 스크립트를 실행하세요. mysql_secure_installation, 설치 과정 중. 새로 설치된 MariaDB의 기본 설정에는 악의적인 행위자가 악용할 수 있는 취약점이 남아 있는 경우가 많습니다.

sudo mysql_secure_installation

보안 스크립트를 실행하면 MariaDB의 보안을 강화하기 위한 여러 단계를 안내합니다. 이러한 단계에는 루트 암호 설정, 원격 액세스 제한, 익명 사용자 계정 삭제 및 테스트 데이터베이스 제거가 포함됩니다.

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] Y <---- Type Y then press the ENTER KEY.
Enabled successfully!
Reloading privilege tables..
 ... Success!


You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] Y <---- Type Y then press the ENTER KEY.
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y <---- Type Y then press the ENTER KEY.
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y <---- Type Y then press the ENTER KEY.
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y <---- Type Y then press the ENTER KEY.
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y <---- Type Y then press the ENTER KEY.
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

4단계: PHP 설치

LEMP 스택 설정을 완료하려면 PHP 서비스를 설치하세요. PHP는 PHP-FPM 서비스와 phpMyAdmin에 필요한 추가 모듈을 통해 Nginx와 MariaDB 사이의 브리지 역할을 합니다.

참고: 특정 버전의 PHP를 설치하려면 다음 가이드를 참조하세요. Debian 12, 11 또는 10 Linux에서 사용 가능한 PHP 8.x 버전을 설치합니다.

Debian 시스템에 필요한 모듈과 함께 PHP 및 PHP-FPM을 배포하려면 다음을 실행하세요:

sudo apt install php-fpm php-mbstring php-bcmath php-xml php-mysql php-common php-gd php-cli php-curl php-zip php-gd

PHP 설치 후 MariaDB 및 Nginx에서와 마찬가지로 PHP 서비스 상태를 확인합니다.

예를 들어 Debian Bookworm의 기본값인 PHP 8.2의 경우 특정 명령은 다음과 같습니다.

systemctl status php8.2-fpm

PHP 서비스가 비활성 상태로 유지되면 다음 명령을 사용하여 활성화하고 재부팅할 때마다 자동으로 시작되는지 확인하세요.

sudo systemctl enable php-fpm --now

Nginx 및 Debian으로 phpMyAdmin 마무리

이 섹션에서는 phpMyAdmin 아카이브를 확보하고 필수 디렉터리, 권한 및 데이터베이스 항목을 설정하는 절차를 설명합니다.

1단계: phpMyAdmin용 슈퍼유저 생성

일반적으로 루트 사용자를 사용하여 phpMyAdmin에 액세스할 수 있습니다. 그러나 강력한 보안 관행을 준수하려면 루트 사용자를 사용하는 대신 별도의 수퍼유저를 생성하십시오. 이 개념은 루트로 직접 로그인하는 대신 sudo 사용자를 활용하는 Linux 관행과 일치합니다.

먼저 터미널 인터페이스에서 본인을 인증하세요.

sudo mariadb -u root

인증에 성공하면 후속 단계에서 MariaDB 터미널 내에 데이터베이스를 생성합니다.

CREATE USER PMAUSER IDENTIFIED BY 'password here change';

다음으로, 아래 그림과 같이 사용자를 생성하고 필요한 권한을 부여합니다.

GRANT ALL PRIVILEGES ON *.* TO 'PMAUSER'@'localhost' IDENTIFIED BY 'password here change' WITH GRANT OPTION;

자리 표시자 비밀번호 바꾸기 "여기서 비밀번호를 변경하세요" 명령을 실행하기 전에 안전한 비밀번호를 사용하는 것이 중요합니다.

사용자를 설정하고 권한을 설정한 후 변경 사항에 대한 권한을 새로 고쳐야 합니다.

FLUSH PRIVILEGES;

MariaDB 터미널을 종료하려면 다음 명령을 사용하십시오.

QUIT;

2단계: phpMyAdmin 소스 코드 다운로드

이 섹션에서는 phpMyAdmin용 소스 아카이브를 확보하는 방법을 설명합니다. 명령줄 터미널을 활용하면 모든 언어의 최신 버전을 다운로드할 수 있는 효율적인 방법이 제공됩니다.

phpMyAdmin 아카이브를 다운로드하려면 터미널에서 다음 명령을 실행하세요.

DATA="$(wget https://www.phpmyadmin.net/home_page/version.txt -q -O-)"
URL="$(echo $DATA | cut -d ' ' -f 3)"
VERSION="$(echo $DATA | cut -d ' ' -f 1)"
wget https://files.phpmyadmin.net/phpMyAdmin/${VERSION}/phpMyAdmin-${VERSION}-all-languages.tar.gz

phpMyAdmin의 영어 전용 버전을 원하는 경우 이전 명령의 마지막 줄을 다음으로 바꾸십시오.

wget https://files.phpmyadmin.net/phpMyAdmin/${VERSION}/phpMyAdmin-${VERSION}-english.tar.gz

다운로드 후 다음 단계는 아래 명령을 실행하여 phpMyAdmin 아카이브를 추출하는 것입니다.

tar xvf phpMyAdmin-${VERSION}-all-languages.tar.gz

3단계: phpMyAdmin 구성

다음 단계에는 mv 명령을 사용하여 추출된 모든 파일을 /var/www/ 디렉터리의 최종 대상으로 마이그레이션하는 작업이 포함됩니다.

sudo mv phpMyAdmin-*/ /var/www/phpmyadmin

소스에서 phpMyAdmin을 설치하면 기본적으로 TMP 디렉터리가 존재하지 않는다는 것을 알 수 있습니다. 따라서 이 디렉터리를 수동으로 생성하는 것이 가장 좋습니다.

sudo mkdir /var/www/phpmyadmin/tmp

phpMyAdmin 디렉토리에는 기본 구성 예제 파일이 포함되어 있으며, phpMyAdmin이 이를 인식할 수 있도록 이름을 바꿔야 합니다. CP 명령을 사용하여 /var/www/phpmyadmin/ 디렉토리에 기본 파일의 복사본을 생성하여 백업을 보장합니다.

config.sample.inc.php를 config.inc.php로 복제하려면 다음 명령을 실행합니다:

sudo cp /var/www/phpmyadmin/config.sample.inc.php /var/www/phpmyadmin/config.inc.php

파일을 복사한 후 원하는 텍스트 편집기로 엽니다. 이 예에서는 nano 텍스트 편집기를 사용하고 있습니다.

sudo nano /var/www/phpmyadmin/config.inc.php

phpMyAdmin은 Blowfish 암호를 사용합니다. 이 설정을 수정하려면 $cfg['blowfish_secret']으로 시작하는 줄로 이동하세요.

$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

작은따옴표 안에 임의의 32개 문자로 구성된 문자열을 할당합니다. 이 문자열을 생성하는 편리한 방법으로 pwgen 프로그램을 사용하십시오. pwgen을 설치하려면 다음 터미널 명령을 실행하십시오.

이렇게 하면 모든 작업을 명확하게 유지하고 사용자(또는 작업을 수행하는 사람)에게 직접 귀속됩니다.

sudo apt install pwgen 

설치 후 아래 명령을 실행합니다.

pwgen -s 32 1

이 명령은 복어 비밀 역할을 할 임의의 32자 문자열을 생성합니다.

구성 파일에 암호를 삽입하는 예 (복사하지 마십시오):

UvqAlsvTxRdYIyO8TnlkJsVQaWs2LfgL

구성 파일의 예:

대부분의 사용자에게는 나머지 기본 설정이 적합합니다. 그러나 서버가 네트워크 내의 다른 서버에 있는 경우 개인 IP 주소를 반영하도록 $cfg['Servers'][$i]['host'] 행을 찾아 수정해야 합니다. 이 수정에 대한 그림은 다음과 같습니다.

$cfg['Servers'][$i]['host'] = '192.168.55.101';

4단계: phpMyAdmin 파일 권한 구성

디렉터리 소유자에게 www-user에 대한 권한을 할당하는 것은 호환성과 보안을 보장하는 데 중요합니다.

chown 권한을 설정하려면:

sudo chown -R www-data:www-data /var/www/phpmyadmin/

chmod 권한을 설정하려면:

sudo find /var/www/phpmyadmin/ -type d -exec chmod 755 {} \;
sudo find /var/www/phpmyadmin/ -type f -exec chmod 644 {} \;

다음 섹션에서는 phpMyAdmin 서비스에 대한 Nginx 서비스 블록을 생성하고 설정하는 방법에 대해 설명합니다.

phpMyAdmin용 NGINX 서버 블록 설정

phpMyAdmin 웹 인터페이스에 액세스하려면 필수 단계로 NGINX 서버 블록을 생성하십시오. 보안 조치를 강화하고 무차별 대입 공격을 방어하려면 별도의 하위 도메인을 설정하는 것이 좋습니다. 이 하위 도메인의 이름을 적절하다고 생각하는 대로 자유롭게 지정하세요.

1단계: Debian에서 phpMyAdmin용 Nginx 서버 블록 생성

nano 텍스트 편집기를 사용하여 서버 블록을 만들고 여는 것부터 시작해 보겠습니다. 다음 명령을 실행합니다.

sudo nano /etc/nginx/sites-available/phpmyadmin.conf

2단계: Nginx 서버 블록 구성

서버 블록 파일이 성공적으로 열리면 다음 텍스트를 복사하여 파일에 붙여넣습니다. 도메인 URL을 자신의 URL로 대체하세요.

server {
  listen 80;
  listen [::]:80;
  server_name pma.example.com;
  root /var/www/phpmyadmin/;
  index index.php index.html index.htm index.nginx-debian.html;

  access_log /var/log/nginx/phpmyadmin_access.log;
  error_log /var/log/nginx/phpmyadmin_error.log;

  location / {
    try_files $uri $uri/ /index.php;
  }

  location ~ ^/(doc|sql|setup)/ {
    deny all;
  }

  location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    include snippets/fastcgi-php.conf;
  }

  location ~ /\.ht {
    deny all;
  }
}

위의 예에 대해 주의해야 할 몇 가지 중요한 사항은 다음과 같습니다.

  • /run/php/php8.2-fpm.sock; – 이 경로는 사용 중인 PHP-FPM 버전을 반영해야 합니다. 예를 들어 8.3, 8.1, 8.0, 7.4 등이 될 수 있습니다.
  • 루트 /var/www/phpmyadmin/; – 본 가이드에서 정의한 경로를 의미합니다. phpMyAdmin이 다른 곳에 있는 경우 이에 따라 이 줄을 업데이트하십시오.

고정 IP 주소에서 서버에 액세스하는 유일한 사람인 경우 첫 번째 위치 항목 위에 다음 코드를 추가하는 것이 좋습니다.

  allow <your ip address>;
  deny all; 

  location / {
    try_files $uri $uri/ /index.php;
  }

위 코드는 403 오류가 있는 페이지에 대한 무단 방문자를 효과적으로 차단하여 귀하의 IP 주소에만 액세스 권한을 부여합니다. 모든 설정에 적합하지는 않지만 무차별 대입 공격에 대한 실질적인 방어입니다.

3단계: 텍스트 편집기 저장 및 종료

변경 사항을 저장하려면 (CTRL+O)를 누르고, 편집기를 종료하려면 (CTRL+X)를 누르십시오.

4단계: 구성 파일에 대한 Symlink 만들기

그런 다음 사이트 사용 가능 디렉터리에서 구성 파일이 있는 사이트 활성화 디렉터리로의 심볼릭 링크를 만듭니다.

sudo ln -s /etc/nginx/sites-available/phpmyadmin.conf /etc/nginx/sites-enabled/

5단계: 시험 실행 테스트 수행

NGINX 서비스를 다시 시작하기 전에 연습 실행 테스트가 중요합니다. 이 조치는 구성 파일을 수정해도 NGINX 오류가 발생하지 않도록 보장하는 실제 환경에서 필수적입니다.

sudo nginx -t

구성에 오류가 없으면 다음 출력이 표시됩니다.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

6단계: NGINX 서비스 다시 시작

마지막으로 변경 사항을 적용하려면 NGINX 서비스를 다시 시작하세요.

sudo systemctl restart nginx

이것으로 phpMyAdmin용 NGINX 서버 블록 생성에 대한 이 섹션을 마무리합니다. 다음 섹션에서는 phpMyAdmin 웹 인터페이스를 열고 로그인합니다.

phpMyAdmin 웹 인터페이스 탐색

선호하는 웹 브라우저를 실행하여 phpMyAdmin 인터페이스와의 상호 작용을 시작하세요. 주소 표시줄에 pma.example.com을 입력하고 "example"을 도메인 이름이나 서버 IP 주소로 바꾸세요. 내부 환경에서도 localhost를 사용할 수 있다는 점을 기억하세요.

이 작업을 수행하면 다음 이미지와 같이 phpMyAdmin 로그인 화면이 나타납니다.

자격 증명을 입력하고 "계속" 또는 "로그인"을 선택하여 로그인 화면을 탐색하세요. 이 작업을 수행하면 다음 이미지에 표시된 phpMyAdmin 대시보드에 대한 액세스 권한이 부여됩니다.

phpMyAdmin을 처음 사용하는 사용자라면 "상태 페이지"를 숙지하고 싶을 수도 있습니다. 이는 데이터베이스 상태에 대한 포괄적인 통찰력을 제공합니다.

통계 페이지 외에도 phpMyAdmin에는 "고문 시스템"도 통합되어 있습니다. 이 편리한 기능은 성능 향상을 위한 제안을 제공합니다.

그러나 조언자는 24시간을 기다리는 것을 권장하지만 대부분은 최소 72시간이 더 최적이라고 생각한다는 점을 기억하는 것이 좋습니다. 이렇게 하면 데이터베이스 샘플링이 장기간에 걸쳐 수행되어 보다 정확한 권장 사항을 제공할 수 있습니다.

또한 조언자 시스템이 변경의 유일한 기반이 되어서는 안 됩니다. MySQL 또는 MariaDB 구성 파일을 변경하려면 신중한 고려, 철저한 테스트 및 여러 번의 반복이 필요할 수 있습니다. 목표는 최상의 결과를 위해 구성을 최적화하는 것이며, 여기에는 시간이 걸리는 경우가 많습니다.

Let's Encrypt SSL 인증서를 통해 phpMyAdmin을 보호하세요.

Certbot을 통해 SSL 인증서 생성

phpMyAdmin 인스턴스의 보안을 강화하려면 SSL 인증서를 사용하여 HTTPS를 통해 Nginx를 실행하세요. 무료, 자동화된 개방형 SSL 인증서를 제공하는 유명한 인증 기관인 Let's Encrypt를 활용하는 것이 가장 간단한 방법을 제공합니다.

먼저 다음을 실행하여 Let's Encrypt SSL 인증서 관리에 도움이 되는 certbot 패키지를 설치합니다.

sudo apt install python3-certbot-nginx -y

certbot 패키지 설치를 완료한 후 다음을 실행하여 SSL 인증서를 생성합니다.

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email you@example.com -d pma.example.com

인증서 설치 프로세스를 시작하면 다음이 수행됩니다.

  • EFF(Electronic Frontier Foundation)로부터 이메일 수신에 대해 문의하는 메시지가 표시됩니다.
  • 동의(Y) 또는 동의하지 않음(N)에 관계없이 시스템은 TLS 인증서를 자동으로 설치하고 구성합니다.
  • 구성에는 HTTPS 301 리디렉션 적용, Strict-Transport-Security 헤더 추가 및 OCSP 스테이플링 구현이 포함됩니다.
  • 명령의 이메일과 도메인 이름을 정확한 세부 정보로 대체해야 합니다.

이 설정을 완료하면 URL이 HTTP://pma.example.com에서 HTTPS://pma.example.com으로 마이그레이션되어 이전 HTTP URL에 대한 모든 액세스가 보안 HTTPS URL로 자동 리디렉션됩니다.

SSL 갱신을 위한 크론 작업 생성

프로세스를 더욱 간소화하기 위해 인증서를 자동으로 갱신하는 크론 작업을 설정하세요. Certbot은 이러한 목적으로 자동 갱신 스크립트를 제공합니다. 이 작업을 설정하기 전에 다음 명령을 사용하여 연습 실행 테스트를 신중하게 수행하여 모든 것이 올바르게 작동하는지 확인하세요.

sudo certbot renew --dry-run

자동 갱신을 예약하려면 다음을 실행하여 crontab 파일을 엽니다.

sudo crontab -e

인증서가 유효한지 확인하려면 정기적으로(최소 하루에 한 번) 인증서 갱신을 확인하세요. 갱신이 필요한 경우 스크립트가 자동으로 인증서를 업데이트합니다. cron 구문을 활용하여 원하는 시간에 갱신을 설정하세요.

00 00 */1 * * /usr/sbin/certbot-auto renew

결론

phpMyAdmin이 Debian 시스템에 성공적으로 설치 및 구성되면 사용자 친화적인 웹 인터페이스를 통해 MySQL 또는 MariaDB 데이터베이스를 효율적으로 관리할 수 있습니다. 정기적인 업데이트와 보안 구성을 통해 데이터베이스 관리 도구가 안전하고 최신 상태로 유지됩니다. Debian에서 데이터베이스 관리를 위해 phpMyAdmin이 제공하는 편리함과 강력한 기능을 즐겨보세요.

Joshua James

코멘트를 남겨주세요