MariaDB (마리아디비)는 mySQL과 호환이 잘되는 데이터베이스로 요즘 인기인 데이터베이스 애플리케이션입니다. 신규로 LAMP 또는 LEMP 스택구성할 때 데이타베이스를 mySQL로 할지 MariaDB로 할지 고민이되는 사람은 얼마 없을 것입니다. 단지 기존시스템에서 전환할때 MariaDB로 전환한다면 호환성을 잘 알아봐야겠죠.
최신버전 MariaDB 설치하기위해서 apt 프로그램을 이용해서 설치할 겁니다. apt는 패키지를 설치할 때 어디에서 받아올지 리스트목록으로 관리하는데요. 우분투 16.04에있는 기본 마리아디비 설치정보는 10.0 버전입니다. 이글을 쓰고 있는 시점에서는 10.3버전이 최신 버전이네요. 그래서 10.3 에대한 apt의 설치정보 리스트를 먼저 업데이트해야합니다.
아래 명령어를 통해서 apt의 리스트 중에 MariaDB 패키지에대한 설치정보를 알 수 있습니다.
sudo apt-cache policy mariadb-server
위 그림처럼 설치(Installed)는 현재 none 이라서 시스템에 설치된 마리아디비는 없는 걸로 나오고 설치 후보자(Candidate)는 10.0.34로 나옵니다. 그리고 그 아래로 버전테이블이 나오네요. 이대로 그냥 설치하면 10.0 버전이 설치되니 이 것을 먼저 업데이트 해야 최신버전으로 설치할 수 있습니다.
위 결과에서 보면 목록중에 아래에는 이전에 있던 10.0 버전에대한 설치정보도 그대로 있습니다. 이렇게 여러버전에대한 설치정보가 있을때 Candidate가 아닌 다른 버전을 설치하려면 버전을 명시해서 설치하면 될것입니다. 하지만 저는 Candidate에 명시된 버전을 설치하면 되므로 아래명령어를 통해서 곧바로 설치를 시작할 수 있습니다.
sudo apt install mariadb-server
위처럼 Do you want to continue? 질문이 나오면 계속 진행하겠다고Y를 누르고 엔터키를 눌러 진행합니다. 그러면 아래 그림처럼 MariaDB의root사용자 비밀번호를 설정하라고 나옵니다. 특수문자, 대소문자, 숫자 조합으로 복잡한 비밀번호를 입력해줍시다.
중요: DB의 root 사용자는 리눅스컴퓨터 사용자 root와는 다릅니다.
이때 설정하는 root의 비밀번호는 가장 중요한 비번이므로 잊지않도록 자신만 아는 곳에 써놓으세요. 회사 사무실이라면 키보드 뒷면에 적으시겠죠. 아래처럼 비번 재확인이 나오면 같은 비번을 또 입력해줍니다.
재확인: 같은 비번을 입력해주세요
설치 완료!
설치가 완료되면 동시에 MariaDB 가 실행되며, 재부팅시에도 자동 시작되도록 설정됩니다. 서비스 현재상태를 확인하는 명령어를 이용해 현지설치된 MariaDB의 버전은 무엇인지, 잘 돌고있는지 확인해봅시다.
service mysql status
MariaDB running!
위 내용은 내용이 길어서 방향키로 내려볼 수 있는데Q나Control+C를 입력하여빠져나갑시다.
이렇게 설치가 완료되었는데요. 이제 PHP 와의 연동모듈을 설치하고 데이터베이스 생성시 기본언어셋을 설정하는 중요한 작업을 추가로 해줘야겠습니다.
nano 편집기로 열었을때 기존파일이 있었다면 그 내용이 나올 겁니다. 그럴땐control+k키를 눌러 한줄씩 빠르게 삭제하고 비운뒤에 따라하시면 됩니다. 아래 내용을#기호도 포함해서 복사해서 그대로 붙여넣으세요.
# MariaDB-specific config file. # Read by /etc/mysql/my.cnf [client] # Default is Latin1, if you need UTF-8 set this (also in server section) default-character-set = utf8mb4 [mysqld] # # * Character sets # # Default is Latin1, if you need UTF-8 set all this (also in client section) # character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci character_set_server = utf8mb4 collation_server = utf8mb4_unicode_ci
참고: 위 내용에서 앞에 #이 붙은건 주석이므로 작성하지 않아도 무관합니다.
그러면 아래 그림처럼 될겁니다.
utf8mb4 세팅을 위한 mariadb.cnf 파일내용
이제 저장하고 nano 편집기를 빠져나가기위해서 control+x 를 누르고 y->엔터를 누르면 내용을 저장하고 빠져나오게 됩니다.
ls 명령어로 폴더안을 다시 살펴보면 해당파일이 있을 겁니다.
이제 MariaDB를 재시작해줍니다.
sudo service mysql restart
우분투 시스템 재부팅
이제 exit 명령어로 CLI 접속을 종료하고 서버에 다시 접속해보면 시작할때 ***System restart required *** 라는 메시지가 나올텐데요. 컴퓨터를 재부팅하란 소립니다.
아래 명령어를 사용해 우분투 서버컴퓨터를 재부팅해줍시다. 재부팅이 시작되면 다시한번 CLI 서버접속 연결이 끊기게 됩니다.
php 웹 프로그래밍을 위해서는 가장 중요한 것이 웹서버가.php파일을 해석할 수 있어야합니다. 연재작의 이전 단계에서 설치했던 nginx는 아파치와는 다르게 html 같은 기본적인 마크업 언어의 파일만 해석할 수 있을 뿐 php파일은 해석하지 못하는데요. 이를위해서 nginx + php 조합에서는 php-fpm 이란 것이 대신 해석해준다고 합니다. 그래서 이번에 설치할 것은 php뿐만이 아닌 php-fpm 이라는 것을 설치해야하는데요. php-fpm 설치만으로도 php가 설치됩니다.
php는 5.6 에 비해서 7버전이 성능향샹이 크다고하는데요. 제가 이글을 쓰고 있는 시점에서 7.2버전이 정식으로 릴리즈되었습니다. 그래서 7.2버전을 설치하려고합니다. 7.2버전은 7.0을 필요로 하므로 7.0버전도 설치된다고 보시면 됩니다. ( 7.0 설치를 원한다면 아래 내용중에 7.2로 쓰여진 내용은 7.0으로 바꿔 작업하시면 됩니다.)
php-fpm 설치는 apt 프로그램을 사용해 설치할 건데요. 전에도 언급했듯 apt는 각각의 패키지를 설치할 수 있는 인터넷주소를 리스트로 가지고 있고 우분투 16.04 의 apt는 기본적으로 php 7.0 버전에 대한 설치정보를 가지고 있습니다. 그러므로 apt에 php 7.2버전에대한 설치정보를 먼저 업데이트 해줘야합니다. 그 전에 현재가진 정보를 살펴볼까요?
아래 명령어를 입력함으로써 apt의 리스트에서 php 설치정보만 살펴 볼 수 있습니다.
apt-cache policy php
위 그림처럼Candidate: 1:7.0+…처럼 정보가 나오면서 php 7.0 버전 설치정보가 나오게 됩니다.
이상태에서는 아래 명령어로 7.0버전의 fpm을 바로 설치할 수 있지만 저는 7.2버전을 원하므로 입력하지 않겠습니다.
이제 Nginx가 php파일을 해석,처리하도록 적용하기 위해는 설정파일을 수정해줘야합니다. 설정파일은 아래위치 중 하나인데요. apt를 통해 설치했으므로 두 번째 경로에 있을 것입니다.
/etc/nginx/conf.d/default.conf
/etc/nginx/sites-available/default
리눅스서버의 /etc/nginx/sites-available/위치에서 default파일을 찾아볼수 있을 것입니다.
이 파일을 수정해야하는데 소유자는 root이고 사용자그룹또한 root라서 현재로선 SFTP 를 통해 편집할 수 없습니다. sudo 명령어를 통해 nano 나 vim 등 CLI 텍스트 편집기를 이용할 수도 있겠지만 파일내용도 길고 CLI가 익숙하지 않다면 번거로울텐데요. 조금 편해지기위해 아래 명령어를 입력해서 이 파일의 사용자그룹을 ubuntu로 바꾸고 권한도 664 또는 775를 부여해줍니다.
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_read_timeout 300; }
참고: 위 내용에서 php7.2-fpm.sock 파일 이름은 php7.0을 설치했을 경우엔 php7.0-fpm.sock이 됩니다.
참고: php7.2-fpm.sock 파일은 php-fpm 설치후 위에서 php-fpm을 시작하는 명령어를 입력했을 때 만들어진 것인데요. /etc/php/7.2/fpm/pool.d/www.conf 파일의 내용 중에 listen = /run/php/php7.2-fpm.sock 라는 부분이 쓰여져있습니다. 이 줄이 실행되면서 /run/php/ 디렉토리에 만들어지는 것입니다.
그리고 아래내용도 추가합니다.
location ~ /\.ht { deny all; }
참고: 위 내용은 차후 아파치 웹서버와 document root (사이트루트 폴더)를 공유할 것을 대비하여 .htaccess파일에 접속하지 못하도록 해주는 설정이라고 합니다.
그러면 설정파일인 default 파일의 전체내용은 아래와 같습니다. 차후에 도메인과HTTPS를 추가하게 될텐데요. 그 때 여러분은 이곳에 여러 설정을 또 추가작성하게 될 겁니다.
연재작의 앞단계 글에서 우분투 서버의 시스템 시간을 서울로 설정했었는데요. php 코딩할때 시간관계된 코딩을 해야할 수도 있습니다. php 설정파일에서 별도 설정을 하지 않으면 컴퓨터시간을 따르긴하지만 안타깝게도 php 7.x 버전에서는 시스템 시간이 서울일경우 php 상에서는 평양으로 나오는 문제가 있습니다. 에러로그 파일도 평양으로 기록됩니다. 북한과의 평화협정으로 평양과 서울의 시간은 같아졌을 지라도 영 찝찝한 기분은 어쩔 수 없을 겁니다. 그래서 php 설정시간도 서울시간으로 바꿔주려합니다. 그러기위해서는 아래 두 파일을 수정해야합니다.
/etc/php/7.2/fpm/php.ini
/etc/php/7.2/cli/php.ini
그런데 이 파일들에 대한 수정권한이 또 root만 가지고 있습니다(644). 간단한 수정이니 이번엔 CLI에서 root로 수정하겠습니다. 아래 명령어를 입력해 nano 편집기로 해당파일을 엽니다.
sudo nano /etc/php/7.2/fpm/php.ini
아래처럼 그 내용이 나올겁니다.
php.ini 파일내용의 앞부분
위 파일의 전체내용은 약 2천줄이므로 찾기를 통해 수정할 부분을 빠르게 찾아봅시다. control+w키를 누르면 아래처럼 검색할 수 있습니다.
위 그림의 아래처럼 Search: 상자가 나오면 위 처럼;date.timezone =를 입력후엔터키를 눌러주면 아래 그림 처럼 해당 텍스트가 위치한 곳으로 커서가 이동합니다.
세미콜론(;) 이 앞에 붙은건 주석으로써 해당 설정이 아무 기능도 못하게되는데요. 아래 그림처럼 주석처리를 제거하고 date.timezone = Asia/Seoul으로 수정해줍니다.
이제 저장하고 나가야겠죠? 연속해서 control+x키를 누르고,Y키를 누른다음엔터키를 누르면 저장된뒤 nano 편집기를 빠져나갑니다.
다음으로 아래명령어를 이용해 두번째 파일도 수정해줍니다.
sudo nano /etc/php/7.2/cli/php.ini
파일이 열리면 위 파일과 마찬가지로 control+w 를 누르고 ;date.timezone =를 입력후엔터키를 입력해 해당 줄을 찾아 그 줄의 주석을 해제하고 date.timezone = Asia/Seoul로 바꾼뒤 연속해서 control+x키를 누르고,Y키를 누른다음엔터키를 눌러 저장하고 끝냅니다.
두 파일을 모두 수정했다면 그런 다음 아래 명령어로 PHP-FPM을 재시작 해줍니다.
sudo systemctl restart php7.2-fpm
이제 다시 웹브라우저에서 접속해서 새로고침해보면 php 정보 내용중 timezone 항목이 아래처럼 서울로 바뀌어있을 것입니다.
마무리로 현재 /var/www/html 디렉토리(웹 루트폴더)에 있는 두파일은 아래와 같을 겁니다. phpinfo() 등으로인해 서버정보가노출되므로 이 두 파일은 삭제해주세요.
index.nginx-debian.html(nginx 설치하면 기본으로 있는 것)
index.php(위에서 phpinfo() 정보를 출력하기위해 잠시 만들었던 것)
그 뒤 /var/www/html 폴더에 아무것도 없다면 웹브라우저에서 접속했을 때 403 Forbidden메시지가 나오는 건 정상입니다. 이제 이곳에index.php파일을 만들어 php 코딩을 시작할 수 있습니다.
추가 후 관리자 페이지 1:1문의 설정에서 이렇게 모바일 상단 하단 파일을 별도로 지정할 수 있습니다.
테마를 사용하지 않는 경우
상단 파일 경로 : ../shop/shop.head.php 하단 파일 경로 : ../shop/shop.tail.php 모바일 상단 파일 경로 : ../mobile/shop/shop.head.php 모바일 하단 파일 경로 : ../mobile/shop/shop.tail.php
테마를 사용하고 있는 경우 (basic 테마를 예로 들면)
상단 파일 경로 : ../theme/basic/shop/shop.head.php 하단 파일 경로 : ../theme/basic/shop/shop.tail.php 모바일 상단 파일 경로 : ../theme/basic/mobile/shop/shop.head.php 모바일 하단 파일 경로 : ../theme/basic/mobile/shop/shop.tail.php
2. bbs/qahead.php 파일 수정
if (G5_IS_MOBILE) { // 모바일의 경우 설정을 따르지 않는다. include_once('./_head.php'); echo conv_content($qaconfig['qa_mobile_content_head'], 1); } else {
여기를 이렇게 수정.
if (G5_IS_MOBILE) { if($qaconfig['qa_1'] && is_include_path_check($qaconfig['qa_1'])) @include ($qaconfig['qa_1']); else include ('./_head.php'); echo conv_content($qaconfig['qa_content_head'], 1); } else {
3. bbs/qatail.php 파일 수정
if (G5_IS_MOBILE) { echo conv_content($qaconfig['qa_mobile_content_tail'], 1); // 모바일의 경우 설정을 따르지 않는다. include_once('./_tail.php'); } else {
여기를 이렇게 수정.
if (G5_IS_MOBILE) { echo conv_content($qaconfig['qa_content_tail'], 1); if($qaconfig['qa_2'] && is_include_path_check($qaconfig['qa_2'])) @include ($qaconfig['qa_2']); else include ('./_tail.php'); } else {
4. bbs/_common.php 파일 수정
파일 하단 ?> 바로 위에 추가
if (preg_match("/.*\/bbs\/(qalist|qawrite|qaview)\.php?/", $_SERVER['REQUEST_URI'])) define('_SHOP_', true);