우분투 18.04 LTS 데스크톱에서 LEMP(Linux / Nginx / MariaDB(MySQL 대신) / PHP 설치하는 과정을 모두 정리했습니다.

칼을 뽑았으면 무라도 썰어야죠.^^ 그래서 설치형 블로그인 워드프레스를 설치하는 과정을 정리해보겠습니다.


워드프레스 설치 요구사항은 아래의 공식문서 페이지에 나와 있습니다.

https://wordpress.org/about/requirements/


▲ 최소 요구사항/권장 요구사항을 구분해놓지 않은 바람에 난잡합니다. 정리를 해보면...

Nginx/Apache는 버전 제한 없음. Nginx 권장.

PHP는 5.2.4 이상. 7.3 권장.

MySQL은 5.0 이상. 5.6 이상 권장.(대체재 MariaDB는 10.0 이상.)


▲ 참고로, 현재 우분투 18.04 apt 저장소에서 제공하는 php 버전은 7.2 입니다.

(웹에서 apt 패키지 정보 확인하는 사이트 : https://packages.ubuntu.com/ )


디테일한 설치 과정이 워드프레스.org 공식 문서에 나오긴 하는데,

https://codex.wordpress.org/Installing_WordPress

https://codex.wordpress.org/ko:Installing_WordPress

한글보다는 영문 버전을 보시는 게 좀 더 나을 거예요. 그림도 좀 더 들어가 있고...


저는 제가 LEMP 설치한 것을 베이스로, 공식 문서보다 편하게 따라할 수 있게끔 본문을 구성하는 게 목표입니다.



0. 워드프레스 '고유주소' 기능 사용을 위한 Nginx 설정 수정


아파치에서 Mod Write 룰 세팅을 해야만 워드프레스 고유주소(Permalink) 기능을 문제 없이 쓸 수 있었던 것처럼, Nginx도 고유주소 기능을 문제 없이 쓰기 위한 세팅을 해줘야 한다고 하네요. 워드프레스 설치 요구사항 페이지에는 나와 있지 않지만 Wordpress Codex 페이지Nginx WordPress Recipe 페이지에는 공식적으로 소개되고 있기 때문에 따라서 조치하는 것이 좋다고 생각합니다.


/etc/nginx/sites-enabled/ 디렉토리에 심볼릭링크 되어 있는 서버블록 파일을 에디터로 엽니다.

그리고 server { } 블록 안에서 location / { } 블록을 찾습니다.


▲ 아마 저의 Nginx 설치 설명 글을 따라오셨다면 try_files $uri $uri/ =404; 라는 설정이 있을 겁니다. 지우거나 위 스샷처럼 주석처리(#) 하고, try_files $uri $uri/ index.php$is_args$args; 라고 입력 후 저장+빠져나옵니다. 스샷을 보고 띄어쓰기까지 정확하게 맞춰서 적어주세요.


▲ 그리고 Nginx 서비스 재시작. (sudo systemctl restart nginx.service)



1. 워드프레스 압축 파일 다운 받기


워드프레스 설치 요구사항을 충족시켰다면 아래 주소에서 워드프레스를 다운받습니다.

https://ko.wordpress.org/download/

https://ko.wordpress.org/download/releases/

(팁을 하나 드리자면, 최신 버전보다 한 두 단계 아래 버전을 받으면 설치 직후 업데이트 테스트를 바로 할 수 있어서 좋습니다.)


GUI 쓰면 웹브라우저로 받아도 되고, 다운로드 경로는 웹문서 루트로 지정해주세요.

(웹브라우저 주소 창에 도메인주소 입력했을 때 바로 연결되는 곳이 웹문서 루트 경로입니다.)


▲ 저는 터미널 창에서 wget 을 이용해서 받아봤습니다.

wget https://ko.wordpress.org/wordpress-4.9.8-ko_KR.tar.gz -P 웹문서 루트 경로

압축파일 경로는 위에 적은 다운로드 주소에서 마우스 우클릭으로 확보했습니다.

경로 옵션(-P 블라블라)은 파일 웹주소 앞/뒤 아무데나 넣어도 상관 없고요,


▼ tzr.gz 파일 주소 확보는 워드프레스 배포처의 tar.gz 파일 링크에서 마우스 우클릭 → 링크 주소 복사를 선택해서 하면 됩니다.


※ 만약 터미널 창에서 받는 것보다 FTP 클라이언트로 밀어넣는 게 편하면 그렇게 하셔도 됩니다.

(팁을 드리자면, 압축파일 째로 서버에 밀어넣고 서버에서 압축을 푸는 게 좀 더 빠르더군요. 압축을 풀어서 FTP로 전송해봤더니 자잘한 파일들을 옮기느라 시간이 오래 걸렸습니다.)


FTP(FTPES)나 SFTP로 넣고 싶은데 FTP/SFTP 구축을 못했다면 아래 링크를 참고해서 구축해보세요.

[우분투 16.04] SSH서버 구축하기(SSH 접속 설정)

[우분투 16.04] vsftpd로 패시브모드 FTPS(FTPES) 서버 구축 - 1

[우분투 16.04] vsftpd로 패시브모드 FTPS(FTPES) 서버 구축 - 2

[우분투 16.04] vsftpd로 패시브모드 FTPS(FTPES) 서버 구축 - 3

FTP/SFTP 구축 중 막히는 부분이 있으면 아래 팁들을 참고하세요.

[우분투 16.04] root 계정의 암호를 변경하는 법(옵션)

[우분투 16.04] FileZilla FTP 클라이언트 프로그램으로 SFTP 사용하기

[우분투 16.04] 계정의 SSH 연결을 막고, SFTP 최상위 디렉토리를 임의로 지정하기

[우분투 16.04] 깡통계정 생성(로그인 불가능+홈디렉토리 없음)(vsftpd 연결용)

[우분투 16.04] VSFTPD 설정파일 매뉴얼 한글번역(with 구글)

[우분투 16.04] vsftpd에서 root 접속시 530 Login incorrect 에러(접속불가) 해결방법



2. 웹문서 루트 경로에 압축 풀기


GUI 쓰시면 파일관리자 프로그램(nautilus, caja, thunar 등)으로 웹문서 루트 경로에 접근하여 압축을 풀어주세요.

저는 터미널 창에서 웹문서 루트 경로에 접근하여 압축을 풀어보겠습니다.


▲ 먼저, tar -tf /웹문서 루트 경로/wordpress-4.9.8-ko_KR.tar.gz | head 라고 입력해서 워드프레스 압축 파일의 구조를 파악해봅니다. /wordpress/ 라는 디렉토리가 맨 앞에 붙네요. 10줄만 보이는 것이 미심쩍어서 | head -n 40 옵션으로 40줄을 출력해봤는데 /wordpress/ 디렉토리가 계속 붙더군요. 전체 경로 앞에 wordpress/ 디렉토리가 붙는 것 같습니다.



이 경우, 옵션 없이 압축을 풀었을 때 wordpress 디렉토리가 생기고 그 안에 나머지 파일들이 풀리겠지요? 그러면 http://도메인주소/wordpress/ 라고 쳐야만 워드프레스 화면을 볼 수 있을 겁니다. 접근성이 떨어지죠? 도메인주소만 쳤을 때 바로 보이는 게 일반적인데.


▲ tar -xzvf /웹문서 루트 경로(원본 경로)/wordpress-4.9.8-ko_KR.tar.gz --strip 1 -C /웹문서 루트 경로(대상 경로)/

형태로 입력하면 대상 경로에 /wordpress/ 디렉토리가 빠진 상태로 압축이 풀립니다.


만약 경로를 입력하는 것이 길게 느껴진다면...


▲ cd /웹문서 루트 경로

tar -xzvf wordpress-4.9.8-ko_KR.tar.gz --strip 1

처럼 cd 명령어로 경로를 바꾼 다음 압축을 풀면 됩니다.


▲ rm 명령어로 필요 없는 워드프레스 압축파일과 잉여 파일들을 제거해서 웹문서 루트를 정리하면 깔끔하고 좋겠죠?


▲ ll 명령어로 확인해보니 웹루트 경로에 워드프레스 구성요소들만 남았네요(+phpinfo.php 파일).

깔끔하죠?


압축 풀기 작업은 이것으로 끝.



3. DB(+DB User) 만들기(워드프레스 용)


워드프레스는 DB를 이용합니다. 그래서 DB를 만들고 워드프레스 설정 파일에 관련 사항을 적어주는 작업이 필요합니다.

https://codex.wordpress.org/Installing_WordPress#Step_2:_Create_the_Database_and_a_User

워드프레스 Codex 문서에 phpMyAdmin, MySQL 명령어, C패널 등 다양한 툴로 DB를 생성하는 방법이 설명되어 있으니 참고용으로 활용하세요.


[우분투 18.04 데스크톱] LAMP : 워드프레스 설치 과정 정리

[윈도우10 64bit] 홈서버에 워드프레스 설치과정 정리

우분투/윈도우용 아파치 위에 워드프레스를 설치하는 방법을 정리할 당시에 phpMyAdmin으로 DB 생성하는 것을 정리했었으니 phpMyAdmin을 이용하실 분들은 위의 글을 보고 따라하시고, 이번에는 터미널 창에서 MySQL 명령어로 DB를 생성해 보겠습니다.


PuTTY 포터블 버전으로 SSH 원격 접속을 했고요,


▲ mysql -u DB계정명 -p

라고 입력 후 DB계정 패스워드를 입력하면 DB로 들어갈 겁니다.

저처럼 MariaDB를 설치하신 분께서는

use mysql;

이라고 입력해서 mysql 모드로 전환해주세요. MySQL 사용자는 이 절차가 없습니다.


▼ (설명을 위해 Ctrl+L 단축키로 MySQL 콘솔창 화면 지움)

▲ create database DB명;

형태로 입력하면 워드프레스에 연결될 DB가 생성됩니다. show databases; 명령어로 확인이 되죠?


-------------------------------------------------------------

여기서 생각을 해봅시다. 만약 소켓인증만 가능한 MySQL root 계정으로 DB를 생성했다면 php로 root 계정에 로그인하는 게 불가능하니까 워드프레스에서 쓸 수 없겠죠? 만약 MariaDB 설치 과정 중에 (php언어로도 로그인이 되는) root급 계정을 생성했다면 그 계정으로 로그인하면 되니까 상관없는데, 루트급 계정을 생성하지 않았거나 루트급 계정을 노출하는 게 싫은 상황이라면 php언어로 로그인 되는 MariaDB 계정을 하나 만들고 워드프레스용 DB를 제어할 수 있는 권한만 부여하면 좋겠죠?


▲ CREATE USER '계정명'@'%' IDENTIFIED BY '비밀번호';

형식으로 입력하면 php언어로 로그인 되는 MariaDB 계정이 생성되고,

GRANT ALL PRIVILEGES ON `생성했던 DB명`.* TO '위에서 생성한 계정명'@'%';

형식으로 입력하면 계정에 DB 제어 권한이 부여됩니다.


생각 끝.

-------------------------------------------------------------


DB 생성 작업은 끝났습니다. exit 명령어로 mysql 콘솔창을 빠져나오면 되는데...

워드프레스 설치 도중에 '호스트'를 입력하는 부분이 있어서 콘솔창 빠져나오기 전에 확인해 둘 필요가 있습니다.


▲ SELECT User, Host FROM mysql.user;


이제 워드프레스를 설치하러 갑시다.



4. 워드프레스 설치(환경설정 파일 생성)


▲ 홈서버에 연결된 도메인 주소를 웹브라우저 주소창에 입력하세요.

그러면 워드프레스 설치 시작 화면이 뜰 겁니다. 환경설정 파일을 자체 생성하는 거죠.

(웹브라우저 주소창에 입력하는 주소가 앞으로 사용할 워드프레스 고정 주소가 됩니다! 도메인을 구입하지 않아서 http://localhost 처럼 입력하더라도 워드프레스 설치가 되긴 하는데, 나중에 주소 바꾸는 과정이 매우 번거롭더군요. 그래서 만약 개발 환경을 구축하는 거라면 주소를 localhost로 해도 상관없지만, 구축한 사이트를 외부에 오픈할 예정이라면 워드프레스 설치 전까지 도메인 구입+연결+SSL 인증서 적용을 완료하는 것을 추천합니다. 개발 중에는 /etc/hosts 파일을 수정해서 외부망 연결을 차단하는 식으로 처리하면 되니까, 완성 전에 노출될 염려는 크게 안 하셔도 됩니다.)


※ [윈도우10 64bit] hosts 파일 수정으로 가상의 도메인 주소를 부여해 보자


각설하고, Let's go! 버튼을 눌러서 진행합니다.



데이터베이스 이름 : 기본값이 wordpress 일텐데 mysql 콘솔창에서 만들었던 데이터베이스 이름으로 적어줍니다.

사용자명 : 데이터베이스에 연결된 DB 계정을 적어줍니다. php로 로그인할 수 있는 계정이어야 합니다. phpMyAdmin로 테스트 가능합니다.

비밀번호 : DB 계정의 비밀번호를 적어줍니다.

데이터베이스 호스트 : mysql 콘솔창 종료하기 직전에 확인하셨었죠?(Host 항목) 그대로 적어주세요.

테이블 접두어 : 기본값이 wp_ 일텐데, 적당히 바꿔줍니다. 안 바꾸면 나중에 보안 플러그인에서 바꾸도록 유도하기 때문에 귀찮아집니다. 완전히 비우는 것은 추천하지 않습니다. 나중에 혹시라도 워드프레스 멀티사이트를 구축하게 되면 테이블 접두어로 각 사이트들을 구별하는데, 이것을 비워두면 멀티사이트 구축하는 도중에 귀찮은 과정이 추가될 테니까요.


빈 칸을 다 채웠으면 저장하기 버튼을 누릅니다.


▲ 만약 입력했던 정보가 정확한데도 "데이터베이스 연결 중 오류"가 뜬다면 "다시 시도" 버튼을 눌러 되돌아간 다음, "데이터베이스 호스트" 란을 대체 항목(localhost)으로 바꾸고 "저장하기" 버튼을 눌러봅니다.


▲ 문제 없이 진행되면 좋겠지만,

wp-config.php 파일을 생성할 수 없다며 위와 같은 에러 창이 뜨면

위의 내용을 복사해서 워드프레스 경로(웹 루트)에 wp-config.php 파일을 생성 후 넣어줘야 합니다.


▲ 저는 터미널 창에서 nano 로 파일을 생성했습니다.



define('DB_NAME', 'mywordpress');

define('DB_USER', 'test');

define('DB_PASSWORD', 'DB 패스워드');

define('DB_HOST', 'localhost');

define('DB_CHARSET', 'utf8mb4');

$table_prefix  = 'wp_';



위의 내용들을 본인의 환경에 맞게(Let's go! 버튼을 누른 다음 넣었던 대로)입력하고, 저장+빠져나옵니다(nano는 단축키 Ctrl+X).

localhost, utf8mb4는 고치지 않는 게 에러가 안 나는 것 같고, table_prefix는 아래에 혼자 떨어져 있으니까 잘 찾아보셔야 합니다.


그리고 웹브라우저로 돌아와서 "설치 실행하기" 버튼을 누릅니다.


▲ 이런 화면으로 넘어가면 항목들을 채워주고 "워드프레스 설치하기" 버튼을 누릅니다.


▲ 설치 완료! 로그인도 해봅니다.


▲ 도메인으로 접근해봤더니 정상 출력.


링크들에 마우스 포인터를 올려봤더니 고유주소도 잘 빠뀌어서 출력되는 것을 확인할 수 있었습니다. Nginx rewrite 규칙이 정상적으로 작동하는 듯하네요.

만약 도메인 뒤에 index.php가 붙어서 "https://jimnongtest1.top/index.php/2019/02/18/블라블라" 처럼 나오고 index.php를 안 보이게 하고 싶다면 "관리자페이지 → 설정 → 고유주소" 에서 변경하면 됩니다.


▲ phpMyAdmin에서 DB를 살펴봤는데, utf8mb4_unicode_ci 로 잘 생성되고 있네요(wp-config.php에서 DB_CHARSET을 utf8mb4로 놔뒀는데도.).



5. 업데이트 테스트


최신 버전보다 한 두 단계쯤 낮은 버전을 받을 것을 권했었죠?

업데이트 테스트를 해봅시다.

워드프레스 업데이트는 FTP(FTPES)로 진행됩니다.

그 동안 제 글을 따라하셨었다면 FTP(FTPES) 설치는 되어 있을테니 따로 준비할 것은 없습니다.


▲ 관리자 페이지에서 "업데이트" 카테고리로 들어가서 "지금 업데이트" 버튼을 눌러봅니다.


▲ FTP 연결 정보 입력 화면이 뜹니다. 입력 후 "처리하기" 버튼을 누릅니다.


호스트이름 : 공유기에서 포트포워딩 세팅할 때 외부 포트를 21 이외의 것으로 바꿨다면 "도메인:포트번호" 형태로 포트 번호까지 함께 적어줘야 합니다.

FTP 사용자명, FTP 비밀번호 : 알고 있는 것으로 적습니다.

연결 타입 : 되도록이면 FTPS로 세팅하고 FTPS를 선택하세요. FTP는 연결할 때 계정 정보가 평문(암호화 안 된 상태)으로 전송됩니다. 패킷 가로채기 당하면 FTP 계정 정보 쉽게 유출됩니다. FTPS가 무조건 보안에 유리해요. 부득이하게 FTPS 못 쓰는 상황이면 "SSH SFTP Updater Support" 플러그인 깔고 SFTP를 쓰는 게 보안에 유리합니다(일부 플러그인들이 이 플러그인에 제대로 대응하지 못하는 경우가 있긴 함.).


▲ 이런 식으로 쭉쭉~ 진행되면 성공입니다.


▼ 업데이트가 끝나면 아래 스샷처럼 환영 메세지가 뜰 겁니다.


업데이트 테스트 끝.



6. 글 작성 테스트


우선 텍스트만으로 된 글을 작성해봤습니다.


▲ 본문은 잘 출력됩니다. 한글 퍼머링크(고유주소)도 이상없이 처리되는데, 영문 permalink는 대문자가 강제로 소문자로 전환되네요. 대/소문자 유지될 수 있는 방법을 찾으면 본문에 반영하겠습니다.


이번에는 본문을 수정해서 이미지를 첨부해보겠습니다.


디렉토리 wp-content/uploads/2019/02를 만들 수 없습니다. 서버에서 부모 디렉토리에 쓰기가 가능합니까? Unable to create directory wp-content/uploads/2019/02. Is its parent directory writable by the server?

▲ 디렉토리 wp-content/uploads/2019/02를 만들 수 없습니다. 서버에서 부모 디렉토리에 쓰기가 가능합니까?

라는 오류를 뿜으면서 업로드 실패!

Unable to create directory wp-content/uploads/2019/02. Is its parent directory writable by the server?


▲ SSH 원격 터미널로 /웹 루트/wp-content/ 디렉토리에 접근해보니, uploads 디렉토리부터 없네요.

uploads 디렉토리만 만들어주고 다시 시도해봤는데, 오류는 똑같이 났습니다.


워드프레스에 쓰기권한이 할당되지 않은 것 같은데요,

구글링해보니 uploads 디렉토리 권한을 777로 바꾸라기도 하고, 업로드하는 순간에만 777로 바꾸고 다시 755로 돌려놓아서 보안 수준을 유지하라기도 하는데...

개인적으로 불특정 다수에게 (잠시라도) 쓰기 권한을 주는 것은 보안상 적절치 않다고 생각합니다.

그래서 이 방법들보다는 차라리 워드프레스 파일 업로드 기능을 포기하고 이미지 서버를 외부 서비스로 돌리는 게 나을 것 같습니다. 트래픽 분산도 되니까 일석 이조겠죠(구글/드롭박스/플리커 등 무료로 쓸 수 있는 방법은 많습니다!). => 개인적으로 이 방법을 추천합니다.ㅋ


제 추천을 무시하고 이미지 업로드를 반드시 성공시켜야겠다고 마음을 먹으셨다면 본문을 계속 읽어주세요.



생각을 좀 더 해보면 워드프레스를 떠받치고 있는 웹서버 프로그램(Nginx)이 /wp-content/uploads/ 디렉토리에 쓰기작업을 할 수 없어서 생기는 현상이라고 볼 수 있지 않겠습니까? 리눅스 특성상 수많은 계정들이 OS에 접근해서 읽기/쓰기를 처리하는데, uploads 디렉토리는 특정 로컬 계정 소유로 되어 있으니 Nginx를 서비스하는 계정은 uploads 디렉토리에 접근만 할 수 있어도 감지덕지한 거죠!


https://zetawiki.com/wiki/아파치_폴더_쓰기_권한_주기

▲ 위 링크에 나온 팁을 참고하여 "어떤 계정/그룹이" Nginx 서비스를 제어하고 있는지 알아봅시다.


▲ ps -ef | egrep 'httpd|nginx'  라고 입력!

우분투 18.04는 www-data 군요.

Nginx 설정 파일에 www-data 라는 항목이 있는지 확인해보려고 grep "www-data" /etc/nginx/nginx.conf 라고 입력해봤습니다.

user www-data; 라고 나오네요. 확실해졌습니다.


한편, 워드프레스 wp-content 디렉토리 내의 uploads 디렉토리의 권한과 소유는 어떻게 되어있을까요?


▲ 권한은 소유자 7, 그룹 5, 공개(다른 사용자) 5 | 소유자는 aaa(로컬계정), 소유 그룹은 aaa(로컬계정) 입니다.

(기본 개념이 궁금하면 https://jimnong.tistory.com/715 에서 Ctrl+F 누른 다음 "디렉토리 권한 755는 또 뭔가?" 부분을 찾아서 보세요.)


▼ 아래 스샷 하나면 권한 개념 설명이 끝나기는 합니다.


그렇다면 우리에겐 두가지 선택지가 있을 수 있겠죠.

① uploads 디렉토리의 "소유자"를 Nginx 제어 계정(www-data)으로 바꾸고, 디렉토리의 권한을 그대로 유지(755)하거나 소유그룹(aaa : 로컬계정)의 권한을 7로 올림(775). 755 권한일 경우 로컬계정은 쓰기작업이 안 될 것이므로 775 권한을 추천.

② uploads 디렉토리의 "소유 그룹"을 Nginx 제어 그룹(www-data)으로 바꾸고, 디렉토리의 소유그룹(www-data) 권한을 7로 올림(775).

=> 어떤 방법을 택하든 소유자/소유 그룹 중 하나를 www-data로 바꾸고, 권한을 7로 올린다는 개념은 같은 겁니다.^^


저는 ②번 방법으로 처치해 보겠습니다.


▲ 터미널 창에서 sudo chown 명령어로 uploads 디렉토리의 소유자/소유그룹을 바꾸고

sudo chmod 명령어로 디렉토리 권한을 변경합니다.

적용이 됐는지 ll 명령어로 확인해보니... 잘 됐네요!


처치를 했으니 이미지 삽입 테스트를 해봅시다.


▲ 에러 안 뜨고 업로드 되는군요.


▲ 이미지 삽입 후 본문을 업데이트 했더니 그림이 잘 나옵니다!


끝!

이것으로 워드프레스 기본 설치는 되었습니다.

파일 업로드 허용 용량 변경, 테마 변경 후 Child 테마 생성 등 추가 조치들은 직접 찾아가며 적용하시면 되겠습니다.

긴 글 읽어주셔서 감사합니다.



▲ Andy McKee - Drifting : 기타는 타악기입니다! ^^

반응형