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

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


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

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



오토매틱(워드프레스 제작 기업) 측에서 엔진엑스를 아파치보다 앞에 적은 것을 보면, Nginx를 좀 더 좋다고 생각하는 것 같습니다. 저도 다음에는 엔진액스로 바꿔야 할 것 같네요.


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

https://codex.wordpress.org/Installing_WordPress

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

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


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



0. 워드프레스용 아파치 Mod Write 룰 세팅


아파치 mod_rewrite 모듈은 워드프레스로 생성한 글의 고유주소를 원하는 단어의 조합으로 바꿀 수 있게끔 도와주는 모듈입니다.

https://www.sobi.tips/?p=622 처럼 표시되는 기본 주소 체계를

https://www.sobi.tips/nuc5ppyh-사용기-part2/  이렇게 바꿀 수 있는거예요.

제가 정리한 LAMP 설치 글들을 따라하셨다면 mod_rewrite 모듈 적용이 되어 있을텐데, 멀티도메인(서브도메인) 연결 방법 설명 글 아래에 팁으로 적용 방법을 언급했던 것으로 기억합니다. 반드시 적용해 주시고요,

(터미널 창에서 sudo a2enmod rewrite && sudo service apache2 restart )


mod_rewrite 모듈을 적용했다면 본인의 워드프레스 <Directory> 설정이 있는 conf 파일을 에디터로 열어서 워드프레스용 Mod Write 룰을 추가해줘야 합니다.

(저는 /etc/apache2/sites-enabled/ 디렉토리에 있는 conf 파일을 에디터로 열었습니다.)


▲ 워드프레스 설치 경로가 적힌 <Direcroty> 안쪽에 붉게 표시한 곳을 추가하세요.

(사실, 위 스샷대로 적어주면 제일 좋습니다. 제가 쓰는 최적값이에요.)

특히 워드프레스 퍼머링크 IfModule 안쪽 내용은 띄어쓰기까지 정확하게 일치해야 합니다.

(정확하게 쓰지 않으면 워드프레스 설치 이후 404에러, 500에러 등 다양한 문제 상황에 부딛히게 됩니다.)

저장+빠져나온 다음 터미널 창에서 sudo systemctl restart apache2.service 입력하여 아파치 서비스 재시작.



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


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

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

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

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


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

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


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

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

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

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


터미널 창보다 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 -xzvf wordpress-4.9.7-ko_KR.tar.gz

위 명령어를 입력하면 압축이 풀립니다(압축 풀기 전에 미리 cd 명령어로 웹문서 루트 경로에 진입.).


▲ ll 명령어로 확인해보니, wordpress 디렉토리가 생기면서 압축이 풀렸네요? 이렇게 되면 http://도메인주소/wordpress 로 접근해야 워드프레스가 열리는데, http://도메인주소/ 로 접근했을 때 열리도록 하려면 wordpress 디렉토리의 모든 내용을 웹루트로 이동시켜야 하겠죠?

일단 rm 명령어로 남아 있는(+필요 없는) 압축파일과 잉여 파일들을 제거해서 웹문서 루트를 정리하고...


▲ mv /웹문서 루트경로/wordpress/* /웹문서 루트경로/

형식으로 입력해서 /wordpress 디렉토리의 모든 내용을 웹루트로 옮깁니다.

마지막으로 rm -rf wordpress 라고 입력하여 빈 wordpress 디렉토리를 삭제합니다.


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




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


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

터미널에서 mysql 명령어를 이용해서 DB를 만들어도 되는데,

mysql 편하게 제어하려고 phpMyAdmin 설치했으니까 phpMyAdmin으로 DB를 생성하겠습니다. 만약 phpMyAdmin 말고 다른 방법들을 쓰고 싶다면

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

를 참고하시면 됩니다.


phpMyAdmin은 버전이 바뀌면서 인터페이스도 조금씩 바뀌는 경향이 있으니 무조건 따라하기보다는 이런 식으로 진행하는구나~ 하고 감을 잡는 정도로만 보시고요,


①DB 계정을 추가로 만들고 해당 계정에 DB를 생성하여 연결하는 방식이 있고 ②DB를 생성하여 루트(급) DB 계정에 연결하는 방식이 있는데, ①번 방식은 서버를 여럿이 함께 쓰거나 보안을 중요하게 생각하는 분들께 적합할 것 같고, ②번 방식은 서버를 혼자 쓰는 경우 (계정 단도리 잘 하고) 쓰면 편해서 좋을 듯합니다. 개인적으로는 ①번 방식 추천합니다.


①번 방식은 [우분투 18.04 데스크톱] LAMP : phpMyAdmin 설치과정 정리(MariaDB 기반) 글에서 정리를 했으니, 해당 글에서 Ctrl+F하여 아래 내용들을 키워드로 검색하면 될 것 같고,

※ phpMyAdmin으로 DB 생성 + 사용자(계정) 추가 + DB에 사용자 연결하기

   - 방법 1. DB 먼저 만들고, 해당 DB의 "권한" 탭에서 사용자를 추가하면서 연결하기

   - 방법 3. 사용자를 먼저, DB를 나중에 만든 다음 둘을 연결하기

이번 글에서는 ②번 방식을 설명해볼까 합니다.


▲ 웹브라우저 주소창에 '도메인/phpmyadmin' 형식으로 입력해서 phpmyadmin 첫 페이지로 접속한 다음, 루트(급) DB계정으로 로그인합니다. root급 세컨드 DB계정 만드는 방법은 MariaDB 설치과정 정리하면서 설명했었습니다. 'root 계정 쉘인증 우회' 부분 참고하세요.


▲ "사용자 계정" 탭에서 로그인한 계정의 사용자명과 호스트명을 파악해두세요.

워드프레스 설치 페이지에 적어야 됩니다.

(화면 상단을 보면 localhost:3306 같은 구문이 보이죠? 워드프레스 설치 페이지에서 DB 연결 에러 뜨면 호스트명 란에 이것을 대신 적어야 할 수도 있습니다. 그러니까 함께 파악해두세요.)


▲ "데이터베이스" 탭에서 원하는 이름의 DB를 만들어줍니다. DB명은 wordpress 처럼 쉬운 이름으로 정하지는 말고, 데이터정렬방식은 utf8mb4_unicode_ci 로 선택합니다.

DB 생성이 끝났으면 로그아웃 합니다(좌측 상단 로고 아래 왼쪽에서 두번째 아이콘 클릭)



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


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

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

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


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


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



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

사용자명 : 데이터베이스에 연결된 DB 계정을 적어줍니다. phpMyAdmin에서 확인하셨었죠?

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

데이터베이스 호스트 : phpMyAdmin의 "사용자 계정" 탭에서 확인하셨었죠? 그대로 적어주세요.

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


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


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


▼ 이 부분을 보고 적으라는 거예요.


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

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

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


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



define('DB_NAME', 'test2');

define('DB_USER', 'aaa');

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

define('DB_HOST', 'localhost:3306');

$table_prefix  = 'jt2_';


위의 내용들을 본인의 환경에 맞게(Let's go! 버튼을 누른 다음 넣었던 대로)입력하고, 아래의 내용도 확인합니다.


define('DB_CHARSET', 'utf8mb4');


그리고 저장+빠져나옵니다(nano는 단축키 Ctrl+X).

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


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


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


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


링크들에 마우스 포인터를 올려봤더니 고유주소도 잘 빠뀌어서 출력되는 것을 확인할 수 있었습니다. Apache 2.4 mod_rewrite 모듈이 정상적으로 돌아가는 듯하네요.

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


▲ phpMyAdmin에서 DB를 살펴봤는데, utf8mb4_unicode_ci 로 잘 생성되고 있네요.




5. 업데이트 테스트


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

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

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

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


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


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


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

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

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


▲ 이런 식으로 쭉쭉~ 진행되면 성공. 테스트 끝.



6. 글 작성 테스트


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


▲ 한글 퍼머링크(고유주소)도 이상없이 처리되고, 본문도 잘 출력되네요.


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


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

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

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


▲ FTP 클라이언트 프로그램으로 /wp-content/ 디렉토리에 접근해보니, uploads 디렉토리부터 없네요.

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


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

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

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

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


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


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


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

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


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

우분투 18.04는 www-data 군요.


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


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

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


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


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

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

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

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


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


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

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

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


▼ 사실, GUI로 처리하는 게 훨씬 쉽고 빠르긴 합니다.

노틸러스(nautilus)를 루트 권한으로 실행시킨 다음

wp-content 디렉토리로 들어가서 uploads 디렉토리를 만들고

uploads 디렉토리 속성에서(단축키 : Alt+Enter) 권한을 아래 스샷처럼 바꿔주면 되거든요.


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


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


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


끝!

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

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

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

반응형