System Administration & mariadb setup
이번 실습에서는 라즈베리파이에 DB Engine을 설치해서 이를 운용하는 실습을 진행해보도록 하겠다.
1. 라즈베리파이의 IP 주소 찾기
ping juyoungit.local |
2. 라즈베리파이 서버에 접속
ssh pi@192.168.0.14 |
3. mariadb engine 설치
순서대로 제시하는 명령어들을 입력하면서 설치과정을 따라가 보도록 하자
sudo su - |
apt-get -y install mariadb-server
여기에서 사용되는 -y 옵션은 패키지 설치를 진행할 때 사용자에게 물어보는 모든 과정에 대해서 yes 입력을 부여하는 옵션이다. 해당 옵션을 사용하면 사용자에게 별도 확인을 받지 않고 설치과정이 바로 진행되기 때문에 편리하다.
그리고 추가적으로 php와 mysql을 연동해주는 패키지를 설치해야한다. 해당 과정을 수행해주지 않으면 DB가 제대로 동작하지 않게되니 꼭 잊지말고 수행해주도록 하자. 다음과 같이 명령어를 입력해서 설치해주면 된다.
apt install php-mysql |
그리고 마지막으로 nginx를 재시작해주면 된다.
3. mariadb 기본 설정파일 수정
이 단계에서는 mariadb의 기본 설정파일을 수정하는 단계이다. mariadb는 전세계에서 사용되는 공용오픈소스 소프트웨어 이기 때문에 한글 입력이 가능하도록 설정을 변경해줘야 DB 상에서 정상적으로 한글입력을 처리할 수 있다. 이를 위해서는 다음 경로의 2개의 파일을 수정해야 한다.
/etc/mysql/mariadb.conf.d/50-server.cnf |
||
/etc/mysql/mariadb.conf.d/50-client.cnf |
각 파일들에 대한 수정 내용은 다음과 같다.
위에 제시한 캡쳐처럼 기존의 설정값인 104, 105번 라인을 주석문 처리하고 그 아래에 다음 5줄 라인을 추가해주면 된다.
init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8
character-set-server=utf8
collation-server=utf8_general_ci
lower_case_table_names = 1
다음으로 50-client.cnf 파일은 다음과 같이 수정한다.
기존의 8번 라인의 내용을 주석문 처리해주고 그 아래의 다음의 내용을 추가시켜주면 된다.
default-character-set = utf8
이렇게 기본 설정파일 수정이 완료되었다. 현재 mariadb는 기본설정파일을 수정해줬기 때문에 mariadb를 재시작해야할 필요성이 있다. mariadb 재시작은 다음의 명령어을 사용한다. 지금까지 실습을 해오면서 지속적으로 해왔던 것이지만 설정값을 변경한 후에는 항상 서비스를 재시작 해주어야 한다는 사실을 잊지 않도록 하자.
service mysql restart |
그런데 여기서 한 가지 궁금증이 들 수도 있다. '분명 재시작하는 것은 mariadb인데 왜 mysql을 restart 하는 것인가?' 이에 대한 설명은 다른 글에서 다루는 것으로 하고 본 글에서는 현재의 실습에 대하여 더 집중하도록 하겠다.
3. mariadb root 비밀번호 생성
System에 대한 Super User가 존재하듯이 DB만의 Super User가 존재한다. 해당 root는 System의 User와 별개이며, DB를 관리할 때 사용하는 계정이다. 초기에 mariadb를 설치한 상태라면 현재 root계정에 대한 비밀번호가 설정되어 있지 않을 것이다. root의 비밀번호를 생성하기 위해서는 다음의 명령을 입력해서 우선 DB로 접속해야 한다.
mysql -u root -p
-p는 비밀번호를 입력하고 들어가겠음을 의미하는 옵션이다.
해당명령을 입력하면 비밀번호를 입력하라는 요청이 나오는데 이 때는 root에 대한 비밀번호가 설정되어 있지 않기 때문에 그냥 엔터키만 입력해도 들어가진다. 정상적으로 DB에 접속했다면 다음과 같은 창이 나타날 것이다.
새롭게 나타난 mariadb 프롬프트에서 다음의 명령어를 입력해서 root의 비밀번호를 생성해주도록 하자.
update mysql.user set authentication_string=password('12345678') where user='root';
password 뒤에오는 괄호안에 설정하고자 하는 비밀번호를 입력해주면 된다.
정상적으로 명령어를 입력했다면 다음과 같이 나타날 것이다.
추가로 참고하기
위에서처럼 update mysql.user set authentication_string=password('12345678') where user='root'; 명령어를 입력했을 때 비밀번호가 제대로 설정되지 않는 경우가 있다. 해당명령을 입력해서 root 계정에 대한 비밀번호를 12345678로 설정했음에도 불구하고 다음에 다시 mariadb의 root 로 접속할 때 비밀번호가 설정되어 있지 않아서 그냥 엔터키만 눌러도 접속이 되는 증상이 있다. 사실 아직 이것에 대한 명확한 원인은 찾지 못하였다. 단, 이것에 대한 해결책만을 우선 제시하는 것으로 하겠다.
위의 상황처럼 동일하게 mysql -u root -p를 입력해서 우선 root로 접속한 뒤에 update가 아닌 다음의 명령어를 입력해 주도록 하자.
alter user 'root'@'localhost' identified by '12345678';
commit;
위와 같이 입력하면 이제 접속 시 비밀번호를 기반으로 정확하게 사용자의 접속을 통제하는 것을 확인할 수 있다.
혹시 본 작성자처럼 위의 상황에 대해서 오류를 겪는 분들이 있다면 해당 명령을 사용해서 root에 대한 비밀번호 설정을 수행하도록 하자.
4. 사용자 DB 생성 및 관련설정
이제 사용자에게 할당해줄 DB 공간을 생성하고 이와 관련된 설정을 수행해보도록 하자. 특정 사용자를 위한 DB를 생성하기 위해서는 다음 3가지 정보가 필요하다.
1. 사용자용 DB
2. DB 접급 사용자 명
3. 비밀번호
다음 3가지 정보를 한 그룹으로 해서 사용자에게 DB를 할당해줄 수 있다. 만약 10명의 서로 다른 사용자들에게 DB를 할당해줘야 한다면 다음 3가지의 정보를 하나의 그룹으로 해서 10개의 그룹정보를 생성하면 된다는 뜻이다. 다음 3가지 정보는 다음과 같이 설정한다.
사용자용 DB |
create database (원하는 DB명) |
|
DB접근 사용자 명, 비밀번호 |
grant all privileges on (사용자DB명).* to '원하는 사용자명'@'localhost' identified by '사용하고자 하는 비밀번호' |
|
입력한 사항 저장 |
flush privileges |
위에서와 같이 입력했다면 이전에 언급한 사용자용 DB생성을 위해 필요한 3가지 정보는 각각 다음에 대응한다
사용자용 DB |
userdb |
|
DB접근 사용자 명 |
db_juyoungit |
|
비밀번호 |
12345678 |
다음과 같이 3가지 정보를 입력하여 사용자용 DB를 생성해주고 나면 시스템 관리자의 역할은 끝났다. 이제 DB를 사용하는 User의 입장에서 진행된다.
5. 사용자 계정에서 사용자용 DB에 접속
이제 사용자 입장이다. 우선 사용자의 계정으로 접속해주도록 하자.
이제 서버관리자가 생성한 사용자용 DB에 접속해보도록 하자. 이전에 DB에 대한 root 계정으로 접속할 때 사용했던 명령어를 떠올리면 어떠한 형식으로 입력해야할 지 감이 올 것이다.
mysql -u (DB접근 사용자명) -p
-p는 비밀번호를 입력하고 들어가겠음을 의미하는 옵션이다.
이후 비밀번호를 입력하고나면 다음과 같이 정상적으로 사용자용 DB에 접속하게 된다.
여기서 간단한 확인을 해보면 다음의 명령어를 이용해서 사용자가 위치한 DB를 변경할 수 있다.
use (DB 명); |
[ ] 안의 내용은 현재 사용 중인 DB를 의미한다. 현재 사용중인 userdb의 경우 사용자에게 할당하는 사용자용 DB로 생성되었기 때문에 해당 DB를 사용할 수 있어서 다음과 같이 use 명령어를 사용하여 사용하는 DB로 변경할 수 있지만
다음과 같이 서버에 대한 전반적인 중요한 세팅값들을 저장하고 있는 mysql DB는 root가 아닌 DB접근 사용자 명을 사용하니 권한이 부족하여 변경되지 않는 모습을 확인해볼 수 있다.
6. 서버관리자에게 웹서비스 세팅요청
해당 계정에서 웹서비스를 하기 위해서 우선 서버관리자에게 웹서비스 관련 세팅을 요청해야한다. 해당 과정은 이전 실습에서 수행했던 과정들과 동일하므로 간략하게 설명하면서 넘어가도록 하겠다.
해당하는 경로에 다음 파일을 생성한다.
/etc/nginx/sites-available/dbex_hjy.com |
입력할 파일의 내용은 다음과 같다. db를 사용하기 때문에 이전 실습과는 작성내용이 다소 다르다.
server{
listen 80;
listen [::]:80;
server_name dbex_hjy.com;
root /home/dbex_hjy/html;
index index.html index.php;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
그리고 다음으로 해당 경로에 링크 파일을 생성해주도록 하자.
/etc/nginx/sites-enabled/dbex_hjy.com |
||
ln -s /etc/nginx/sites-available/dbex_hjy.com dbex_hjy.com |
마지막으로 변경한 사항의 적용을 위해 nginx를 재시작 해주도록 하자.
service nginx restart |
7. PHP + mysql 사용하는 웹사이트 소스 제작(clone)
이번에는 웹 서비스를 php, mysql을 사용하는 채팅방 형식의 페이지를 서비스 할 것이다. 이미 만들어져 있는 소스를 clone하여 사용할 것이다.
이제 해당계정의 root 디렉터리에 해당 파일을 clone 하도록 하자.
다음과 같이 정상적으로 소스를 fork 해온 것을 확인할 수 있다.
8. 서버 관리자에게 받은 DB 정보반영
해당 페이지는 DB를 사용하기 때문에 사용하는 DB 관련 정보를 입력해줘야 정상적으로 사용하는 것이 가능하다. 해당소스의 파일 중에서 connection.php라는 파일을 수정해 줘야 한다.
해당 파일의 내용을 다음과 같이 수정해줘야 한다.
위와 같이 서버관리자에게 전달받은 사용자용 db에 대한 관련 정보들을 입력해주면 된다. 해당 파일에 입력한 정보를 기반으로 웹사이트가 동작할 때 DB를 활용할 수 있게된다.
9. 사용자 DB에 테이블 생성
여기서 테이블(Table) 이라는 개념이 등장하는 데 테이블이라는 개념은 데이터베이스에 데이터를 저장하는 형식, 구조라고 생각하면 된다.건물의 입구에서 표를 하나주고 출입하는 사람의 인적사항, 주소, 연락처, 체온 등의 사항을 기록하라고 하는 개념이라고 생각하면 될 것이다. 이와 관련된 추가적인 내용은 다음의 링크를 참고하기 바란다.
https://coding-factory.tistory.com/77
그래서 여기서 말하는 DB 테이블 생성이라는 것은 DB가 웹사이트에서 전송 & 로드하는 데이터를 해당 웹사이트에서 요구하는 형식에 맞게수행할 수 있도록 생성해주는 것이라고 보면 된다. 우리가 이전단계에서 생성한 userdb에는 아무것도 저장되어 있지 않다. 그래서 여기에서 해당 웹페이지가 돌아갈 수 있도록 해주는 기본적인 테이블을 만들어줘야 한다. 여기서 테이블의 데이터를 만들어내는 문장을 포함하는 파일을 전달해줘야 한다.
사용자 DB에 테이블을 생성은 이 명령어를 이용해서 수행한다.
mysql -u db_juyoungit -p userdb < Chat-Room/database/chat.sql |
여기서 sql(Structured Query Language)은 DB를 제어, 조작하는 데 사용하는 언어라고 이해하면 된다. 해당 파일을 열어서 일부 내용을 확인해보면
다음과 같이 table에 대한 정보를 포함하고 있는 것을 확인할 수 있다.
다음과 같이 위의 명령어를 입력한 후 해당 DB에 대한 비밀번호를 입력해주면 해당 과정은 완료된다. 이렇게 웹사이트를 위한 모든 과정이 마무리 되었다.
10. 웹사이트 접속 및 테스트
이제 해당페이지에 접속해서 정상적으로 페이지가 동작하는 지 확인해보도록 하자. 다음과 같이 브라우져에 주소를 입력해서 해당 페이지에 접속해보도록 하자
dbex_hjy.com/Chat-Room |
그냥 Chat-Room 페이지를 dbex.com의 페이지로 만들고 싶다면 root 디렉터리를 해당경로로 수정해주면 된다.
다음과 같이 채팅방 형식의 페이지가 나타나게 된다. 페이지에서 안내하는 대로 이름, 메시지를 순서대로 입력하고 send를 누르면 메시지를 보내는 스타일의 페이지 이다.
해당 페이지는 DB를 기반으로 동작하기 때문에 해당 페이지를 빠져나온다고 해도 이전의 내용이 날아가지 않고 그대로 유지된다. 그리고 DB에 저장되는 내용을 읽어와서 화면에 표시해주기 때문에 다음과 같이 해당 Chat-Room 페이지를 동시에 2개를 띄워두고 각각의 창에 대해서 메시지를 입력해보면 다음과 같이 각 페이지에서 입력하는 내용이 실시간으로 반영되서 다른 페이지에서도 동일하게 나타나는 것을 확인할 수 있다.
이렇게 DB를 기반으로 동작하는 웹사이트를 만들어보는 실습을 진행하였다. 이것으로 이번 실습에 대한 글을 마친다.
'Web Basic > Raspberry PI' 카테고리의 다른 글
라즈베리파이 - Wordpress 설치 및 세팅 (0) | 2021.02.03 |
---|---|
Server Backup (0) | 2021.02.03 |
라즈베리파이 - Batflat의 관리자 페이지 사용법 (0) | 2021.02.01 |
라즈베리파이 - CMS를 이용한 블로그 페이지 세팅 (0) | 2021.01.31 |
라즈베리파이 - 가상 호스트 추가로 세팅 (0) | 2021.01.30 |
댓글
이 글 공유하기
다른 글
-
라즈베리파이 - Wordpress 설치 및 세팅
라즈베리파이 - Wordpress 설치 및 세팅
2021.02.03 -
Server Backup
Server Backup
2021.02.03 -
라즈베리파이 - Batflat의 관리자 페이지 사용법
라즈베리파이 - Batflat의 관리자 페이지 사용법
2021.02.01 -
라즈베리파이 - CMS를 이용한 블로그 페이지 세팅
라즈베리파이 - CMS를 이용한 블로그 페이지 세팅
2021.01.31