Synology NAS에 워드프레스 설치하기

Nginx + PHP-FPM7 + MariaDB

본 워드프레스는 현재 Synology DS216+II에서 구동되고 있다. 최근에 Synology의 DSM 백엔드를 굳이 건드리지 않고도 Nginx의 설정값을 수정 및 유지하는 방법을 알아내었다. 이걸 알기 전에는 이게 설정이 제대로 안되서 SSL이 일부만 적용되거나 WP Super Cache 설정도 제대로 되지 않는 등 문제가 많았었다. 알아낸 김에 이번에 완전히 제대로 설치 및 설정하였다. 내용을 공유하고자 글을 작성한다. 본 워드프레스 설치기는 DSM 6.1.3-15152 Update 1을 기준으로 작성되었다.

설치할 환경, 워드프레스 및 플러그인

본 글에서 설치할 워드프레스 환경은 다음과 같다.

  • Synology DSM 6.1
    • Web Station
      → Apache는 설치하지 않는다
    • PHP 5.6 및 PHP 7.0
      PHP 5.6 : phpMyAdmin용. PHP 7.0 환경에서 제대로 작동하지 않는다.
      PHP 7.0 : 워드프레스용
    • MariaDB 10 (다만 MariaDB 5.5도 상관없다.)
    • phpMyAdmin (패키지로 설치시 PHP 5.6에 의존성 있음)
    • 로그센터 (syslog 서버)
  • WordPress 4.8
    • WP Super Cache
  • WordPress를 위한 개인 도메인
  • SSL 적용 (HTTPS)

Synology NAS에 필요한 패키지 설치

Web Station, MariaDB 10, PHP 5.6 및 7.0, phpMyAdmin 그리고 로그센터를 설치한다. 아파치는 설치하지 않는다. 안그래도 다른 서비스도 돌려야 하니 NAS 자원을 최대한 아껴써야하는데 램 많이 잡아먹는 아파치는 그렇게 도움이 되지 않는다. 본인의 경우 램을 8GB짜리로 교체하긴 했지만 Docker쪽에 돌리는게 있어서 좀 아껴쓰는 중이다.

로그센터는 Nginx 로그를 저장하기 위해 필요하다. 서버로부터 받는 로그를 /var/log/ 등의 폴더에 저장해서 쓰면, 에러가 발생할 때 매번 SSH를 통해 접속해서 tail 명령어를 써서 일일히 찾아봐야 한다. 로그센터는 syslog 서버로 사용할 수 있고, Nginx의 로그를 이쪽으로 전송하면 DSM에서 쉽게 로그를 검색해 볼 수 있어 편리하다. 로그센터에서 오류가 발생하면 이메일로 알람을 보내도록 설정할 수도 있어 더더욱 편리하다.

MariaDB 설정하기

MariaDB 10 패키지를 설치했으면 DSM에서 MariaDB 10 아이콘을 눌러 관리자 비밀번호를 설정해준다. 초기에 비밀번호가 설정되어 있지 않기 때문에 반드시 설정해줘야 한다. 위쪽에 MariaDB 패스워드 변경을 눌러 비밀번호 변경을 진행할 수 있도록 한다.

Synology에서의 MariaDB 설정창

설정한 MariaDB 비밀번호를 기억해 두었다가 phpMyAdmin으로 접속하여 이를 이용해 루트 사용자로 로그인한다. phpMyAdmin은 별 다른 설정을 하지 않았다면 http://NAS 주소/phpMyAdmin으로 접속할 수 있다.

phpMyAdmin의 상단 메뉴에서 바로 SQL을 누른다. 다음의 SQL문을 실행하여 wordpress 데이터베이스를 생성한다.

클립보드에 복사

wordpress 데이터베이스가 왼쪽의 목록에 나타났다면, 이번에는 mysql 데이터베이스를 클릭하고 상단 메뉴의 SQL을 선택한다. 다음의 SQL문을 복사해서 수정하고 실행한다. wordpress 데이터베이스를 사용할 유저의 이름과 접속 위치, 비밀번호를 설정해주기 위함이다. root를 그대로 사용해도 되지만 보안을 위해서 이렇게 해주는 것이다.

클립보드에 복사

WordPress 파일 다운로드

WordPress.org에 접속하여 최신 WordPress 압축파일을 다운로드 받는다. 파일 스테이션으로 이를 업로드하고 압축을 푼다. Web Station을 설치하면 web이라는 이름의 공유폴더가 생기는데, 본인은 여기에 wordpress라는 하위 폴더를 만들고 여기에 wordpress php 파일들을 넣었다.

WordPress.org에서 압축파일을 다운로드 받는다.

web/wordpress에 압축을 풀었다.

가상호스트 설정

Web Station에서 가상호스트를 설정해준다. 호스트 이름에 워드프레스에 사용할 도메인을 입력해주고, 문서루트는 web/wordpress로 설정한다. HTTP 백엔드 서버는 Nginx로, PHP는 7.0으로 선택해 준다. HTTPS를 설정하여 사용할 것인데, 보안을 위해 HSTS를, 전송 최적화를 위해 HTTP/2를 체크해준다.

Synology Webstation 가상 호스트 설정

SSL 인증서 적용

제어판 > 보안 > 인증서로 이동하여 인증서를 발급받고, 구성을 클릭하여 해당 가상호스트에 SSL 인증서를 적용한다. SSL 인증서를 적용하지 않아도 사실 블로그 운영에는 아무 제한이 없지만, 인증서를 적용하면 구글 등의 사이트에서는 검색순위 상위에 노출되는 효과가 있기에 반드시 해주는 것이 좋다. (참조 구글, 웹 사이트 순위 산정에 암호화 반영 “https 적용 권고”)

Synology에서는 Let’s Encrypt를 이용해 3개월마다 자동으로 갱신되는 무료 인증서를 발급받아 사용할 수 있는데, 이에 대한 자세한 방법은 아래의 글들을 참고하자. 본인의 경우 이미 본 블로그를 운영중이라 발급받는 절차를 보여줄 수가 없다.

Nginx 추가 설정

Nginx 사용자 설정값 유지하기 포스트를 참고하여 Nginx 설정을 해주도록 한다. 여기까지만 설정하여 워드프레스에 접속해도 구동은 되는 것처럼 보이지만, Permalink를 포함해 몇가지 기능이 제대로 작동하지 않기 때문에 반드시 Nginx 세부 설정이 필요하다.

WP Super Cache 및 Permalink를 위한 Nginx 설정

추후 설치할 WP Super Cache 플러그인이 제대로 작동할 수 있도록 하기 위해, 그리고 Permalink가 제대로 작동할 수 있도록 하기 위함이다. SSH로 DSM에 접속하여 위에서 설정한 가상호스트용 유저설정 폴더에 user.conf.supercache파일을 만들어주고, 다음의 내용을 붙여넣는다.

클립보드에 복사

HTTPS로 강제 리다이렉트

사용자 설정폴더에 user.conf.force-https 파일을 만들고, 다음의 내용을 붙여넣는다. 사용자_도메인 부분에는 본인의 도메인을 입력할 수 있도록 한다.

클립보드에 복사

Gzip 전송

클라이언트에 컨텐츠를 전송할 때 Gzip으로 압축하여 보낼 수 있도록 한다. 사용자 설정폴더에 user.conf.gzip 파일을 만들고, 다음의 내용을 붙여넣는다. 아래에 따로 수정할 내용은 없다. WP Super Cache에서 캐시파일을 미리 gz 파일로 압축해주는 설정을 켰을 경우에 gzip_static을 on으로 설정하면, gz파일을 자동으로 검색하여 이를 대신 전송해준다. 반드시 켜도록 하자. CPU 사용량을 줄이고 전송량도 줄일 수 있다.

클립보드에 복사

정적 파일 캐시 만료일 설정

스타일, 자바스크립트, 이미지 파일 등 변할일이 별로 없는 정적 파일들의 경우에 대해서 캐시 만료일을 설정해주면, 해당 페이지에 접속했을때 정적파일들을 다시 다운로드 받지 않아 속도가 빨라진다. 전송량을 줄이고 빠른 페이지로딩을 위해 반드시 필요하다. user.conf.cache_expire 파일을 만들고 아래의 내용을 붙여넣자.

클립보드에 복사

로깅 설정

로그센터에 Nginx의 로그를 기록할 수 있도록 설정하자. 접속 로그는 안켤수도 있으나 에러 로그는 반드시 켜도록 하자. 에러 로그는 반드시 모니터링하여 수정해야 한다. access_log 혹은 error_log 뒤에 보통은 /var/log/nginx/access.log 처럼 파일 이름을 넣는게 일반적이지만, 다음의 코드에서는 syslog에 대응하는 코드로 작성되어있다. user.conf.logging 파일을 만들고 아래의 내용을 붙여넣자.

클립보드에 복사

문제없이 설정이 되어 있다면 다음과 같이 로그센터에서 Nginx의 에러로그가 잡히는 것을 볼 수 있다. 아래의 로그는 본인이 의도적으로 발생시킨 오류이며 현재 본 워드프레스에는 오류가 없다.

로그센터에 기록되는 Nginx 에러 로그

자세한 Nginx의 syslog 로깅 방법은 Nginx 사이트에서 매뉴얼이 제공되고 있으니 확인하여 세부설정할 수 있도록 하자.

마지막 보안 설정

접근권한 설정을 위한 마지막 설정이다. favicon.ico, robots.txt 파일 등에 대한 접근권한 설정, uploads 폴더 등에 존재할 수 있는 php 파일에 대해 서버차원에서의 직접 접근 금지, 특정 IP를 제외한 로그인 시도 방어 등을 설정한다. user.conf.restriction 파일을 만들고 다음의 내용을 붙여넣는다.

클립보드에 복사

DB연동을 위한 wp-config.php 파일 수정

wp-config.php파일을 수정하여 DB연동을 위한 부분을 다음과 같이 수정한다. 앞에서 데이터베이스 이름이나 유저 이름을 wordpress가 아닌 다른것으로 수정했다면 그것을 참고한다.

클립보드에 복사

보안을 위한 유니크 키값은 WordPress.org에서 직접 자동생성을 제공해주는 사이트가 있다. 해당 사이트에 들어가면 다음과 같은 내용을 송출해 줄것이다. 복사하여 wp-config.php파일 내의 해당 부분에 붙여넣도록 하자.

클립보드에 복사

설정 완료!

위의 과정들을 전부 따라했다면 워드프레스 설정은 모두 끝난것이다. 이제 도메인을 통해 사이트에 접속하고 워드프레스를 운영할 수 있도록 하자!

2018-09-01T21:40:26+00:002017-08-04|Blogware|댓글 30개

포스트 작성자:

프로그래밍을 좋아하는 건축공학도입니다. 블로그는 프로그래밍과 IT쪽으로 현재 운영중이지만 앞으로 건축관련 내용도 다뤄보려고 합니다. 원래 Android 및 Java를 주력으로 다뤘지만 최근에는 개인 프로젝트로 인하여 C#을 주력으로 다루고 있습니다.

댓글 30개

  1. 궁그미 2017/08/11 at 오후 6:26 - Reply

    집에 80 포트가 열려있는 건가요?
    그리고 커스텀 도메인은 어찌 설정하셨나요…?

    • AlphaFactory 2017/08/11 at 오후 6:50

      네, 80번 포트가 열려 있습니다. 다만 저 같은 경우는 HTTPS를 사용하기 때문에 주로 사용하는 포트는 443번 포트가 되겠네요. 80번 포트로 연결되는 도메인은 443번 쪽으로 모두 301 리다이렉트를 적용시키고 있습니다.

      도메인은 따로 구입하여 DNSzi 이용하여 DDNS 설정해 사용하고 있습니다.

  2. Jihoon Kim 2017/08/13 at 오전 3:34 - Reply

    좋은 포스팅 감사합니다. 혹 Mariadb10 설정은 위에 말씀하신 거외에 추가설정은 없으신건가요? wordpress install setup-2 페이지에서 db를 잡지 못해서 설치가 안되고 있습니다 혹시 가능하시다면 확인해봐야할 사항들알려주시면 감사하겠습니다.

    • AlphaFactory 2017/08/13 at 오전 3:37

      MariaDB에서 데이터베이스를 생성하셨는지, 유저에게 제대로 권한이 부여되어있는지 여부를 확인해보셔야 할 것 같습니다. 혹시 워드프레스 설치과정 중에 어떤 오류메시지가 떴는지 알려주실수 있으시다면, 답변드리기가 좀더 수월할 것 같습니다.

    • Jihoon Kim 2017/08/13 at 오전 9:37

      답변감사드립니다, DB와 권한은 755(허가된 사용자)로 부여하였습니다. 설치페이지에서 DBHOST를입력하고 submit을 누르면 HTTP ERROR 500화면이 뜨는데 mariadb10과 연결이 되고 있지않거나 wp-config파일 작성에 문제가 있는 것 같습니다.

    • Jihoon Kim 2017/08/13 at 오전 9:43

      해결되었습니다! WebStation에서 php7의 extension을 활성화 시켰더니 접근이 되네요. 포스팅으로부터 많은 도움을 받았습니다 감사합니다.

    • AlphaFactory 2017/08/13 at 오전 10:51

      아, PHP DB연결 관련 확장모듈 문제였군요. 해결되셨다니 다행입니다.

  3. 이기훈 2017/08/30 at 오전 7:19 - Reply

    알파팩토리님 안녕하세요. 매번 좋은 정보 많이 얻어가서 감사드립니다.

    다름이 아니라 본문에 있는 내용중에… 가상호스트용 유저폴더에 user.conf.xxx 파일들은 어떻게 만드나요?
    ssh 를 다뤄본적이 없기도 하고 서버에 대한 지식이 얕아 부끄러운 질문 드립니다…. 🙂

    • AlphaFactory 2017/08/30 at 오전 10:57

      VIM이나 nano를 사용하시면 되는데, Synology NAS 특성상 아마 VIM이 내장되어 있었던것으로 기억합니다. cd 명령어를 통해 해당 폴더로 이동한 후, 아래의 명령어를 사용하여 실행하시면 됩니다.

      sudo vim user.conf.xxx
  4. apeiron 2017/09/21 at 오후 6:33 - Reply

    멋진 글 잘 읽었습니다. 열심히 따라하고 있습니다. 그런데 제 경우에는 phpmyadmin이 작동하지 않게 됩니다. 혹시 이 문제에 대한 해결책을 알 수 있을까요?

    • AlphaFactory 2017/09/21 at 오후 7:28

      phpmyadmin은 시놀로지 환경에서는 왠지모르게 PHP 5.6 환경에서만 구동됩니다. 백엔드가 혹시 PHP 7.0으로 설정되어 있지는 않은지 확인 바랍니다.

    • AlphaFactory 2017/09/23 at 오후 2:29

      내용 덧붙입니다. PHP 7.0이라도 백엔드를 Apache로 설정하면 작동하는군요. 본문에선 Apache를 안쓰기 위해 위의 사항들을 설정해야 했지만 아이러니하게도 phpMyAdmin을 쓰려고 하면 또 Apache를 써야하고…. 조만간 해결방법을 좀 찾아보겠습니다.

  5. meslva 2017/10/23 at 오전 10:37 - Reply

    좋은 포스트 감사합니다.

    내용 중간에 “가상호스트용 유저설정 폴더”에 user.conf.supercache 파일을 생성하라고 적어 놓으셨는데,
    “가상호스트용 유저설정 폴더”가 어디를 말씀하시는 것인지 모르겠습니다.

    /web/wordpress 를 말하는건가요? 아니면 /etc/nginx/sites-enabled 를 말하는 건가요?

    답변 부탁드리겠습니다.

  6. azrael 2018/02/19 at 오후 4:08 - Reply

    포스트 감사합니다.
    그런데 알려주신 user.conf.supercache 를 적용하고 나면 woff, woff2 등의 fontawesome-webfont.woff 파일이 로드되지 않는 문제가 있는데 어떻게 수정해야 할까요?

  7. 준찡 2018/08/17 at 오후 2:00 - Reply

    안녕하세요 코드가 뜨질않아서 문의 드립니다. 즐거운 하루 되세요

    • AlphaFactory 2018/08/17 at 오후 2:07

      테마 변경 시험해보는 게 있는데 Shortcode가 작동하지 않은 것 같습니다. 수정 완료했습니다.

  8. estine 2018/08/29 at 오후 4:47 - Reply

    처음부터 끝까지 따라한다음에 들어가려고 했더니 HTTP ERROR 500 이 뜨네요…ㅠㅠ
    중간에 워드프레스 설정을 한담에 마저 따라해야 하는건가요…ㅠㅠ
    어디서 막힌건지…
    또한 user.conf 파일들 만드는거 vi 명령써서 만들었는데
    해당 명령어를 쓰는게 맞나요…?

    • AlphaFactory 2018/08/29 at 오후 4:49

      nginx -s reload 명령어로 웹서버를 재시작해보세요. 재시작 전에는 설정값이 반영이 안될 수 있습니다. 또 MariaDB의 권한 상태도 확인해보세요.

  9. estine 2018/08/29 at 오후 5:19 - Reply

    서버자체를 재시작을 하였는데 뭐가 문제인건지
    ‘문제가있어 DSM을 정상적으로 시작할수 없습니다.시놀로지 지원팀에 연락하여 도움을 요청하십시오’ 라고 뜨네요…ㅠㅠ
    뭐가 문제인건지…ㅠㅠ

    • AlphaFactory 2018/08/29 at 오후 5:25

      ssh는 살아있을 겁니다. 설정하셨던 user.conf파일을 삭제한 후 재부팅해보세요. 그리고 nginx -t 명령어로 설정이 정상인지 테스트해가면서 다시한번 포스팅 내용대로 진행해 보시면 될것 같습니다.

  10. estine 2018/08/29 at 오후 5:35 - Reply

    설정했던 user.conf 파일의 경로가 사라졌어요,….ㅠㅠ

    • estine 2018/08/29 at 오후 8:12

      해결했습니다.
      제가 user conf파일을 상위 계층에다 만든게 문제였네요…ㅠㅠ
      설명을 잘못읽어서 엉뚱한 파일만 해당계층에 만들고 정작 중요한것들을 다른곳에다 만들었네요…
      정상적으로 작동을 하네요^^

    • AlphaFactory 2018/08/30 at 오전 5:38

      해결되셨다니 다행입니다!

  11. estine 2018/08/30 at 오후 4:55 - Reply

    죄송합니다만 하나 더 wp super cache 가 정상적으로 작동을 안하여 질문하나만 여쭙겠습니다.
    해당행을 추가하고 nginx -t 를 치면

    nginx: [emerg] unknown directive "uper" in /usr/local/etc/nginx/conf.d/c0efda1e-f180-4497-964b-2b8a693e73ac/user.conf.supercache:2
    nginx: configuration file /etc/nginx/nginx.conf test failed

    이렇게 나오는데 이러면 nginx.conf 파일에서 수정을 봐야하는건가요 아니면 supercache의 파일을 수정해야하나요

    • AlphaFactory 2018/08/30 at 오후 5:14

      user.conf.supercache 파일을 수정해봐야할것 같습니다. 오류 메시지를 보아하니 오타가 있는 모양인데요?

    • estine 2018/08/30 at 오후 5:30

      해당부분 수정을 봐서 ok라고 뜨긴 하는데….서버를 재시작해도 막상 홈페이지상에선 캐시설정이 안되네요…ㅠㅠ

    • estine 2018/08/30 at 오후 5:45

      또 자체해결했네요 ㅋㅋㅋㅋ
      고유주소에 관한 구문을 가상호스트 파일에 넣어주니까 되었습니다

  12. 바른1ㅎ 2018/09/26 at 오전 10:51 - Reply

    혼자 볼려고 저장해 놓은 것인데, 죄송하게 되었습니다. 글은 삭제했습니다. 한가지 궁금한 점은 이렇게 설정하면 시놀로지 다운로드 속도가 저하되는데, 왜 그런지는 못찾았습니다. 업로드 속도는 정상적으로 나오고요.

    • AlphaFactory 2018/09/29 at 오후 12:35

      시놀로지 다운로드 속도가 저하될만한 설정값은 따로 없는데…. 네트워크 구성 환경의 차이일 수도 있겠습니다. 정확한 판단은 하기 어렵겠군요.

댓글을 남겨주세요

스팸을 줄이기 위해 Akismet을 사용중입니다. 댓글을 어떻게 처리하는지 알아보세요!