2017-07-10

Synology NAS에서 Docker로 워드프레스를 운영하지 말아야 하는 이유

※ 본 포스트에서 잘못된 내용이 있어 조만간 정정포스팅을 올리고자 합니다. 자세한 것은 하단 내용 참고.

현재 상황

워드프레스는 워드프레스 닷컴을 사용하는게 아니라면 일반적으로 리눅스 서버에서 많이 호스팅된다. 그러나 집에서 리눅스 서버를 구동하기는 어렵기 때문에, 보통은 다들 웹 호스팅 업체에 맡기는 편이다. 본인도 예전에는 웹호스팅 업체를 이용하는 편이었다. 그러나 웹호스팅의 경우 트래픽이나 용량 제한에 걸리는 경우가 많았고, VPS를 사용하자니 성능제약이 너무나 큰 편이었다. 결국 성능이 꽤 높은 NAS를 사용하는 수밖에 없었다.

현재 본인의 경우는 보유하고 있는 Synology NAS로 블로그 본진을 옮긴 상태이다. 현재 사용중인 NAS는 Synology사의 DS216+II로, Intel Celeron N3060 듀얼코어가 들어간 제품이다. 제품을 분해해서 램은 8GB로 업그레이드 하였다.

현재 가지고 있는 Syhnology DS216+II 사양

Synology NAS에서 워드프레스를 호스팅하려면?

Synology NAS에서 워드프레스를 호스팅하는 방법으로는, 일반적으로 웹 스테이션을 사용하는 한 가지 방법 밖에 알려져 있지 않다. 물론 패키지 센터에서 워드프레스를 깔아 쓰느냐 아니면 워드프레스 소스를 직접 다운받아 웹 스테이션에 올려 쓰느냐 하는 방법으로 세분화되기는 한다. 그러나 실제로는 둘다 웹 스테이션을 사용하는 것에 기반을 두고 있으므로, 사실상 같은 방법이라고 하겠다.

그 외에, DS216+II와 같이 일정 성능 이상의 인텔 CPU를 가진 라인업이라면 방법이 한가지 더 있다. 컨테이너 기반 가상화 기술인 Docker를 사용하는 방법이다. 본인은 Docker의 편의성에 반해, 돌리던 웹서비스를 전부 Docker위에 올려 약 두달간 운영해 왔다. 온갖 리눅스 서비스들을 컨테이너에 넣고 하나로 묶을 수 있는 도커의 장점은 너무나 마음에 들었다. 마치 어플리케이션을 구동하는 듯한 느낌이었으니까. 하지만 최근 어쩔 수 없는 일로 인해 워드프레스를 비롯한 PHP 기반 웹 서비스는 다시 웹 스테이션을 이용하는 쪽으로 방향을 바꾸었다.

2017년 06월 11일 현재, Synology Docker 사용 현황

Docker에서 워드프레스 구동을 포기한 이유

본인이 워드프레스를 웹 스테이션으로 옮긴 이유는 사실 다른 이들에게는 사소할 수도 있는 요소이다. 그건 댓글 작성자 IP 및 유입 IP가 제대로 감지되지 않기 때문이었다. 처음에는 완전히 모르고 있었다. 어느날 댓글 관리를 하다가 우연히 모든 IP가 172.17.0.1로 찍히는 것을 발견하였다. 172.17.0.1은 Docker에서 host가 기본 Bridge 네트워크로부터 할당받는 IP이다.

IP가 모두 172.17.0.1로 인식된 댓글목록. 왼쪽 칼럼의 이메일 정보 밑에 IP가 모두 이와 같이 되어있다.

DSM은 웹 스테이션을 위해서 이미 80번 포트를 선점해놓고 있다. 이는 웹 스테이션을 삭제해도 풀리지 않는다. 때문에 제어판에서 역방향 프록시를 설정하여 사용해 주어야 하는데, 문제는 이 역방향 프록시가 헤더정보를 제대로 포워딩하지 않는건지 아니면 변형을 시키는건지, 컨테이너 의 PHP가 클라이언트 IP가 아니라 프록시 IP를 받아와 버리는 것 같다.

이를 해결하려면 보나마나 SSH로 DSM을 직접 건드려야 하는게 뻔하다. 하지만 본인은 주어진 기능 안에서만 사용하는 걸 좋아하는 소위 “순정주의자"다. 이걸 건드릴 생각은 애초부터 하지 않고 그냥 웹 스테이션으로 옮겨버렸다. (온갖 것 다 수정해보고 개조해보고 하다가 결국 순정이 최고더라는 걸 깨달은지 벌써 5년이 넘었는지라…)

역방향 프록시 관련으로 추후 DSM 패치가 있지 않는 한, 한동안은 Synology NAS에서 Docker로 웹 서비스를 올려 사용하지는 않을 것 같다. 이 글을 쓰고나서도 그동안 업데이트가 몇번 되긴 했지만 아직 이러한 점이 반영될 기미는 보이지 않는다.


2017년 7월 28일 정정

최근 이 포스팅에 대해 지인으로부터 의문을 제기받았다. 그래서 실제로 DSM의 역방향 프록시 기능을 담당하는 부분의 설정파일을 열어보았는데 웬걸, 리버스 프록시는 제대로 헤더 정보를 포워딩하고 있었다. 설정파일의 위치는 /etc/nginx/app.d/server.ReverseProxy.conf에 있으며 다음과 같이 제대로 헤더 포워딩 설정이 되어있다. 아마도 워드프레스 공식 이미지쪽 아파치 설정이 잘못되어 있던게 아닌가 생각된다. 해결방법을 찾아서 조만간 이에 대해서 다시 포스팅 하려 한다.

proxy_set_header        Host                $http_host;
proxy_set_header        X-Real-IP           $remote_addr;
proxy_set_header        X-Forwarded-For     $proxy_add_x_forwarded_for;
proxy_set_header        X-Forwarded-Proto   $scheme;
proxy_intercept_errors  on;
proxy_http_version      1.1;

2017년 7월 31일 정정

이 문제의 해결방법에 대하여 글을 작성하였다. 또한, 이 문제를 해결해주는 워드프레스 플러그인을 간단하게 작성하여 배포하기로 하였다. 다음의 페이지들을 참고하기 바란다.

댓글 2

님께 답글 취소
댓글 등록 요청
스팸 댓글을 줄이기 위해 Akismet을 사용하고 있습니다.