본문 바로가기
라즈베리파이/라즈비안

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

by Bugwhale 2020. 1. 27.

최종 확인날짜 : 2020.3.4

1. 개요

앞으로 웹서버, PHP, DB(데이터베이스)을 이용하는 프로젝트를 위해 기본적인 프로그램인 APM(Apache, PHP, MariaDB)를 설치하기 위한 글입니다. 라즈베리파이에 라즈비안을 설치 후 초기 설정이 완료된 상태에서 진행하며 라즈비안을 설치하지 않았거나 초기 설정(Wi-Fi 연결 등)이 안된 상태라면 다음 링크에서 확인할 수 있습니다. 

2. 라즈비안 APM 설치

2.1 패키지 업그레이드

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

sudo apt update
sudo apt upgrade

2.2 Apache 웹서버

최종 확인날짜 : 2020.3.4

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

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

2.2.1 Apache2 설치

sudo apt install apache2

2.2.2 Apache2 설치 확인

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

2.3 PHP

최종 확인날짜 : 2020.3.4

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 연결 모듈

한 번에 다 설치하기

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 파일은 존재하지 않으므로 빈 파일이 생성됩니다.)

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.3.4

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

2.4.1 MariaDB 설치
sudo apt install mariadb-server

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

2.4.2 MariaDB 초기 설정

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

sudo mysql_secure_installation

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

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
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):

최초 설정임으로 엔터를 눌러 넘어갑니다.

OK, successfully used password, moving on...

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

// root 유저의 비밀번호를 설정할 것인가?
Set root password? [Y/n] // "y" 입력
New password: // 새로운 비밀번호 입력
Re-enter new password: // 새로운 비밀번호 재입력

y 를 입력 후 새로운 비밀번호를 2번 입력해줍니다.


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.

// 테스트 용도로 만들어진 anonymous 유저를 삭제할 것인가?
Remove anonymous users? [Y/n] // "y" 입력

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] // "y" 입력

y 를 입력합니다.


 ... 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" 입력

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" 입력

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!

위와 같은 창이 뜨며 마무리됩니다.

2.4.3 MariaDB 접속

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

sudo mysql -u root -p

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

pi@raspberrypi:/var/www/html $ sudo mysql -u root -p

Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 56
Server version: 10.3.22-MariaDB-0+deb10u1 Raspbian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
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 패키지를 설치하는 명령어입니다.

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 경로의 링크를 추가해줍니다. 

sudo ln -s /usr/share/phpmyadmin /var/www/html

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

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

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

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

sudo mysql

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

GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost'

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

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

3. 참고

댓글5

  • 123 2020.03.04 07:12

    안녕하세요. apm 설치를 보고 진행중인데. mysql-server 부분에서 E: Package 'mysql-server' has no installation candidate 라고 뜨면서 패키지가 없다고 뜨는데.. 이 오류 사항은 어떻게 해결할수있을까요?
    답글

    • 123 2020.03.04 07:17

      sudo mysql 이라고 입력하면, 마리아db로 들어가집니다;; 이게 무슨 현상인지;;

    • Bugwhale 2020.03.04 20:15 신고

      안녕하세요. 최종적으로 확인한 날짜가 1년이 경과되어서 그 사이에 변화가 있었을거라 짐작됩니다. 확인해본 후 알려드리겠습니다.

    • Bugwhale 2020.03.04 21:53 신고

      라즈비안이 공식적으로 MariaDB 를 사용하면서 처음 몇년간은 mysql-server 패키지명을 그대로 사용하기에 본문에서 MariaDB 를 설치하지만 MySQL 명칭을 그대로 사용하였었습니다.

      라즈비안이 Stretch 에서 Buster 로 바뀌면서 maria-server 로 패키지명이 교체되었습니다.

      그에 따라 본문의 내용도 전부 교체하였습니다.

  • 지나가는 곰탱이 2020.08.07 12:03

    잘 정리주신 자료 감사합니다

    따라 진행하는중 마지막
    GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' 에 ; 가 빠졌네요
    GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' ;

    db관련 지식이 없어서 복사 붙여 넣기만 했더니 어디가 잘못된줄 몰라 조금 해멨네요 ^^
    답글