본문 바로가기
HW 프로그래밍/라즈베리파이

라즈베리파이4 APM(Apache, PHP, MariaDB, phpMyAdmin) 설치하기

by N2info 2021. 2. 4.

1. 개요

앞으로 웹서버, PHP, DB(데이터베이스)을 이용하는 프로젝트를 위해 기본적인 프로그램인 APM(Apache, PHP, MariaDB)를 설치하기 위한 글입니다. (update 2022.06.29)

라즈베리파이에 라즈비안에서 raspios로 변경되었으며, 업데이트 날짜의 최신 버전은 2022-04-04 bullseye arm64 버전으로 설치함

2. 라즈비안 APM 설치

2.1 패키지 업그레이드

기존에 설치된 패키지들을 업그레이드해줍니다.

pi@raspberrypi:~ sudo apt update
...
pi@raspberrypi:~ sudo apt upgrade

2.2 Apache 웹서버

최종 확인날짜 : 2022.6.29

클라우드 서비스, 워드프레스 웹사이트 등을 운영하기 위해서는 웹서버가 필요하며 웹서버는 크롬, 파이어폭스, 익스플로러 같은 웹브라우저 클라이언트에서 요청을 받으면 그에 따라 웹페이지, 파일 전송 등의 역할을 해줍니다.

이 글에서는 Apache2를 설치합니다.

2.2.1 Apache2 설치

pi@raspberrypi:~ sudo apt install apache2

2.2.2 Apache2 설치 확인

웹브라우저 검색창에 "http://라즈베리파이 IP주소"를 입력하여 웹서버가 정상적으로 설치되었는지 확인할 수 있습니다.

2.3 PHP

최종 확인날짜 : 2022.6.29

PHP(Hypertext Preprocessor)는 서버 측에서 실행되는 스크립트 언어(Server-side scripting)이며 정적인 HTML 언어로만 구성된 초기 WEB을 동적으로 사용하기 위해 만들어졌습니다.

2.3.1 PHP 설치

PHP를 사용할 때는 보통 php 만을 사용하는 것이 아닌 php 언어로 다른 기능과 연동하는 데 사용되며 다음 리스트는 자주 사용되는 확장 모듈들로 원하는 확장 모듈을 설치해주면 됩니다.

php-curl : CURL 모듈
php-fpm : 서버사이드, HTML 기반 스크립트 언어(FPM-CGI)
php-gd : GD 모듈
php-intl : Internationalisation 모듈
php-mbstring : MBSTRING 모듈
php-mysql : MySQL 연동 모듈
php-soap : SOAP 모듈
php-xml : DOM, SimpleXML, XML, XSL 확장 모듈
php-xmlrpc : XMLRPC-EPI 모듈
php-zip : zip 모듈
libapache2-mod-php : apache 와 PHP 연결 모듈

한 번에 다 설치하기

pi@raspberrypi:~ sudo apt install php php-fpm php-curl php-gd php-intl php-mbstring php-mysql php-soap php-xml php-xmlrpc php-zip libapache2-mod-php

2.3.2 PHP 설치 확인

PHP가 정상적으로 동작하는지 확인하기 위해서는 .php 파일을 만들어야 합니다. /var/www/html (웹서버 경로)에 phpinfo.php 파일을 생성하여 설치된 php 정보를 출력시켜 확인할 수 있습니다. nano 텍스트 편집기로 /var/www/html/ 에 phpinfo.php 파일을 열어줍니다. (phpinfo.php 파일은 존재하지 않으므로 빈 파일이 생성됩니다.)

pi@raspberrypi:~ sudo nano /var/www/html/phpinfo.php

phpinfo.php 파일에 아래 코드를 입력해줍니다.
phpinfo() 함수는 설치된 PHP 정보를 보여주는 함수입니다.

<?php phpinfo(); ?>

"Ctrl + X", "Y", "Enter"를 순서대로 눌러줘서 저장해줍니다.

웹브라우저 검색창에 "http://라즈베리파이 IP주소/phpinfo.php"를 입력하면 설치된 php 정보를 볼 수 있습니다.

2.4 MariaDB

최종 확인날짜 : 2020.6.29

MariaDB는 관계형 데이터베이스 관리 시스템(RDBMS, Relational DataBase Management System)입니다. 데이터베이스란 구조화된 데이터의 집합을 의미하며 이러한 데이터 집합의 관리를 위해서 MySQL, MariaDB 같은 데이터베이스 관리 시스템을 이용해야 합니다.

2.4.1 MariaDB 설치

pi@raspberrypi:~ sudo apt install mariadb-server
...
mariadb-server (1:10.5.15-0+deb11u1) 설정하는 중입니다 ...
libcgi-fast-perl (1:2.15-1) 설정하는 중입니다 ...
Processing triggers for man-db (2.9.4-2) ...
Processing triggers for libc-bin (2.31-13+rpt2+rpi1+deb11u2) ...
gndb@raspberrypi:~ $

MariaDB 패키지를 설치하는 명령어입니다.

2.4.2 MariaDB 초기 설정

MariaDB 를 처음 설치하면 초기 암호가 없어 보안에 취약하기에 다음 명령어로 초기 보안 설정을 해줍니다.

pi@raspberrypi:~ $ sudo mysql_secure_installation
...

mariadb-server (1:10.5.15-0+deb11u1) 설정하는 중입니다 ...
libcgi-fast-perl (1:2.15-1) 설정하는 중입니다 ...
Processing triggers for man-db (2.9.4-2) ...
Processing triggers for libc-bin (2.31-13+rpt2+rpi1+deb11u2) ...
pi@raspberrypi:~ $

아래는 간단한 설명을 달아놓은 초기 설정 내용입니다.

# MariaDB 인증 방식(MariaDB 10.4 이후)

pi@raspberrypi:~ $ sudo mysql_secure_installation

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.

# 기본적으로 root는 보호하고 있다. 최초 설정이므로 엔터를 눌러 넘어갑니다
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'.

# unix_socket 인증 :간단히 설명하자면 유닉스 계열 운영체제의 사용자 계정과 MariaDB의 사용자 계정을 일치시키는 인증 방식
Switch to unix_socket authentication [Y/n] y
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
New password:  # 새로운 비번 입력
Re-enter new password: # 새로운 비번 한번 더 입력
Password updated successfully!
Reloading privilege tables..
 ... Success!

# anonymous users 삭제여부(삭제하는것이 좋다고 함)
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
 ... Success!

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

# root를 원격으로 접속할수 있는지 여부(안하는게 좋음)
Disallow root login remotely? [Y/n] n
 ... skipping.

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.

# test database and access 여부 (삭제가 좋음)
Remove test database and access to it? [Y/n] y
 - 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.

// privilege tables 를 불러와서 위 설정사항을 즉시 적용시킬 것인가?
Reload privilege tables now? [Y/n] y
 ... 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!
pi@raspberrypi:~ $

 

2.4.3 MariaDB 접속

아래 명령어를 친 후 위에서 설정한 암호를 치고 접속합니다.

아래와 같은 창이 뜨면 접속이 정상적으로 된 상태입니다.

pi@raspberrypi:~ $ sudo mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 39
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)]>

 

2.4.4 새로운 데이터 베이스 생성하기

위 방법으로 MariaDB 에 접속한 뒤 다음 명령어를 쳐줍니다.

CREATE DATABASE testDB DEFAULT CHARACTER SET utf8;

utf8 인코딩, testDB라는 이름으로 새로운 데이터 베이스를 생성하는 의미이며 testDB 이름은 원하는 이름으로 변경하면 됩니다.

2.4.5 새로운 유저 추가 및 권한 부여(옵션)

MySQL에서는 관리자 계정인 root는 모든 권한을 가지고 있어 중요한 자료를 삭제하는 등의 작업을 쉽게 할 수 있기 때문에 root 계정으로 작업하는 것을 권하지 않습니다.

다음 명령어로 새로운 유저를 추가할 수 있습니다.

CREATE USER '새로운 유저 ID'@'localhost' IDENTIFIED BY '비밀번호';

다음 명령어는 '새로운 유저 ID' 에게 testDB 데이터베이스 권한을 부여하는 명령어입니다. 위에서 testDB 대신 다른 이름으로 생성하였다면 그 데이터베이스 이름으로 입력해야 합니다.

GRANT ALL PRIVILEGES ON testDB.* TO '새로운 유저 ID'@'localhost'

2.4.6 종료

MariaDB 에서 빠져나오는 명령어입니다.

quit

2.5 phpMyAdmin(옵션)

phpMyAdmin 은 데이터베이스 관리를 시각적으로 편리하게 관리할 수 있는 웹 인터페이스이다.

2.5.1 phpMyAdmin설치

phpmyadmin 패키지를 설치하는 명령어입니다.

pi@raspberrypi:~ $ sudo apt install phpmyadmin
패키지 목록을 읽는 중입니다... 완료
...

phpMyAdmin를 자동적으로 구성하기 위한 웹 서버를 선택해줍니다. 이 글 기준 apache2를 선택하면 됩니다.

데이터베이스를 사전에 자동적으로 구성되게 할 것인지 선택해줍니다. 직접 설정할 것이라면 <No>를 선택해주면 되지만 웬만해서 직접 설정하는 일은 없습니다. 이 글 기준 <Yes>를 선택하면 됩니다.


phpMyAdmin 관리자 계정의 비밀번호를 입력해줍니다. 바로 "Enter"를 누르면 자동적으로 생성되지만 추후 변경 가능하니 걱정하지 않아도 됩니다. 굳이 나중에 변경할 필요 없이 여기서 입력하는 것을 추천합니다.


비밀번호를 재입력해줍니다.

2.5.2 phpMyAdmin설치 확인

윈도우나 우분투 계열에서는 보통 "http://서버 IP주소/phpmyadmin" 주소를 치면 바로 접속이 되지만 라즈비안 apache2 웹서버의 경로는 "/var/www/html"이며 phpMyAdmin의 설치 경로는 "/usr/share/phpmyadmin"으로 경로가 달라 바로 접속할 수 없습니다.

phpmyadmin 파일을 웹서버가 구동되는 디렉터리로 이동해야 하는데, 이 글에서는 파일을 이동하지 않고 심볼릭 링크 명령어를 사용하여 링크를 걸어줍니다. /var/www/html 경로에 /usr/share/phpmyadmin 경로의 링크를 추가해줍니다. 

pi@raspberrypi:~ $ sudo ln -s /usr/share/phpmyadmin /var/www/html

이후 웹브라우저에 "http://라즈베리파이 IP주소/phpmyadmin"로 접속해주고 문제가 없다면 다음과 같은 화면이 출력됩니다.

초기 ID는 "phpmyadmin"이며 비밀번호는 phpmyadmin를 설치할 때 입력한 비밀번호입니다.

2.5.3 phpmyadmin 데이터베이스 권한 부여

phpmyadmin 를 처음 설치하면 아무런 권한이 없이 데이터베이스 조회, 생성 등 아무런 작업을 할 수 없습니다.
MySQL에서 phpmyadmin 유저 권한을 부여해줘야 합니다.

라즈베리파이에서 다음 명령어로 mysql에 접속합니다.

pi@raspberrypi:~ $ sudo mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 65
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)]> GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost';
Query OK, 0 rows affected (0.004 sec)

MariaDB [(none)]>

위 명령어는 phpmyadmin 유저에게 모든 데이터베이스의 권한을 부여해주는 명령어로 원하는 데이터베이스만 관리하게 하고 싶다면 * 부분을 원하는 데이터베이스 이름으로 변경해주면 됩니다.

이것으로 라즈비안 APM 설치를 마무리합니다.