워드프레스 + AWS + route53 + mailgun 으로 댓글알림 받기

워드프레스에 댓글이 달리면 이메일로 알려주는 기능이 있는데 동작하지 않았다. AWS에 메일 서버 설정을 하지 않았으니 당연한것 같고. 최근 들어 akismet 스팸방지 솔루션을 뚫고 들어오는 댓글이 종종 보이길래 겸사겸사 설정하기로 하였다. 설정 조건은 AWS 프리티어에서 워드프레스를 돌리고 있고 DNS는 AWS의 route53, 메일 서버는 mailgun의 무료 서버를 이용한다. 한달에 1만건까지 무료발송이 가능하다.

  1. Mailgun에 가입한다. 가입했으면 신용카드 번호를 등록해야 한다. 월간 한계인 1만건을 초과했을 때 과금하기 위한 목적으로 보인다. 카드번호를 넣지 않으면 도메인을 등록할 수 없다.
  2. 도메인을 추가한다. mailgun에서는 mg.hof.pe.kr 같은 식으로 등록을 추천한다. US와 EU를 고르는 것이 있는데 정확한 차이는 모르겠다. US로 하였다. DKIM 생성을 위해 1024와 2048 바이트 중에 선택하게 되어있는데 기본값은 1024다. 그러나 2048로 변경하여 생성하였다.
  3. 입력한 값에 따라 MX, SPF, DKIM 레코드를 생성하여 보여준다.
  4. 위 생성된 레코드를 route53에서 입력한다. 레코드 세트 생성을 누르고 차례차례 입력한다.
  5. MX레코드의 우선순위는 따로 입력칸이 없고 10 mxa.mailgun.org 처럼 입력하면 된다. 윗줄에 10 mxa.mailgun.org 아랫줄에 10 mxb.mailgun.org를 차례대로 써준다.
  6. DKIM 레코드를 입력할 때는 너무 길다면서 입력이 되지 않는다. (1024바이트로 생성하면 괜찮았을까?) 이때는 긴 문자열을 적당하게 끊어서 넣어주면 된다. (참조 Route 53 doesn’t allow adding DKIM keys because length is too long) 원래 따옴표로 둘러싸여 있는 값인데 이걸 중간중간 따옴표와 빈칸 하나 다시 따옴표로 분리시켜서 써주면 된다. 즉 “ewklfwelkfjwelkfj” 같은 값이면 “ewklfwel” “kfjwelkfj” 처럼 나눠주면 된다. 엔터는 치지 않는다.
  7. 워드프레스에서 mailgun 플러그인을 설치한다.
  8. mailgun 도메인네임에 아까 지정한 mg+내도메인을 적어준다.
  9. API키는 mailgun의 Settings → API Security에서 HTTP webhook signing key를 사용한다. 복사해서 플러그인 설정 항목에 붙여넣는다.
  10. 기타 잡다구리한 항목 지정하고 맨 아래 Test Configuration 버튼을 눌러본다. “Mailgun HTTP API Test Success; status “Success”” 가 나오고 자신의 메일주소로 테스트 메일이 잘 날아오면 성공

워드프레스의 Settings → Discussion에서 댓글이 달릴 때 메일 통보받는다고 설정해두었다면 이제부터 메일로 날아온다.

퍼머링크 구조 바꾼 후 리다이렉트

워드프레스를 웹호스팅에서 AWS 프리티어로 옮겨온지 석달쯤 됐다. b2때부터 잔잔하게 쌓여온 역사가 있다보니 틈날때마다 수정해도 계속 고칠게 나온다. 가장 큰 문제는 퍼머링크 구조를 hof.pe.kr/wp/*에서 hof.pe.kr/*로 바꾼면서 생긴 문제. 시간이 지나면 해결되긴 하겠지만 검색엔진의 검색결과페이지에서 넘어올 때 404 에러가 나는 경우가 많을 것 같다. 같은 카테고리의 글인데 어떤 글은 /wp/로 수집되고 어떤 글은 /wp/archives/로 수집되기도 하고.

리다이렉트를 위해 두어가지 플러그인을 사용해보았는데 설정에 정규식을 이용해야 했다. 정규식을 제대로 모르다보니 한참 애를 먹고도 제대로 설정할 수가 없었다.

그러다가 Safe Redirect Manager 플러그인을 찾았다.
정규식을 사용하지 않는 것은 좋은데 설정 방식이 특이하게도 새 게시물을 작성하는 것처럼 보인다. 예전에 비슷한 플러그인을 본것 같긴 하다만.

정규식에 비해 세밀한 설정은 불가능하겠지만 그정도까지 기능이 필요한게 아니므로 일단은 이 플러그인으로 설정을 더 해보는 중이다.

Let’s encrypt 인증서 자동갱신은 실패, 수동 갱신은 성공

AWS 프리티어로 옮기면서 같이 생성한 Let’s Encrypt SSL인증서가 벌써 만료일이 다가왔다. 무료인 대신 90일이면 만료되고, 만료 30일전부터 갱신을 해야한다.

초기에 매월1일에 갱신 스크립트를 실행하도록 어디서 본 자동갱신 cron 작업을 설정해두었다.

우리나라 시간대가 GMT+9기 때문에 1일인 오늘 아침 9시 넘어서 확인해보았는데 인증서 만료일이 여전히 8월16일로 표시되었다. bitnami 패키지로 설치해서 그런지, /var/log/cron에 있다는 로그파일도 찾을 수 없었다. 할수없이 수동으로 갱신을 시도해보았는데, 어랍쇼. 실패네?

2019/08/01 07:42:16 acme: Error -> One or more domains had a problem:
[hof.pe.kr] [hof.pe.kr] acme: error presenting token: could not start HTTPS server for challenge -> listen tcp :443: bind: address already in use
[www.hof.pe.kr] [www.hof.pe.kr] acme: error presenting token: could not start HTTPS server for challenge -> listen tcp :443: bind: address already in use

정확히 오류메시지를 이해할 수는 없었는데 “could not start HTTPS server for challenge” 부분이 눈에 띄었다. 혹시 이미 실행하고 있기 때문에 실행할 수 없는 것인가, 그렇다면 갱신 순서는 인증서 갱신 후 서버 재시작이 아니라 서버 중지하고 인증서 갱신하고 서버를 시작하는건가? 하는 생각이 들었다.

검색해서 찾은 참고 페이지 Unable to renew certificate 중 jota의 답변을 보니 비슷한 내용이 있다.

#!/bin/bash

sudo /opt/bitnami/ctlscript.sh stop apache
sudo /opt/bitnami/letsencrypt/lego --path="/opt/bitnami/letsencrypt" --email="이메일주소" --domains=도메인 --domains=www.도메인 renew
sudo /opt/bitnami/ctlscript.sh start apache

참고하여 차례대로 해보니 다행이 오류났던 경우와 다른 메세지가 나왔다.
2019/08/01 07:46:34 [INFO] [hof.pe.kr] acme: Trying to solve TLS-ALPN-01
2019/08/01 07:46:40 [INFO] [hof.pe.kr] The server validated our request
2019/08/01 07:46:40 [INFO] [www.hof.pe.kr] acme: Trying to solve TLS-ALPN-01
2019/08/01 07:46:47 [INFO] [www.hof.pe.kr] The server validated our request
2019/08/01 07:46:47 [INFO] [hof.pe.kr, www.hof.pe.kr] acme: Validations succeeded; requesting certificates
2019/08/01 07:46:48 [INFO] [hof.pe.kr] Server responded with a certificate.

브라우저 주소창에서 사이트 정보를 보니 제대로 갱신되었다.

8월16일 만료인데 8월 1일에 갱신했더니 다음 만료일은 이전 만료일인 8월16일+90일이 아니라 갱신일(8월1일) + 90일인 점은 주의해야겠다.

새로 설정한 크론탭 내용이다. 주위에 잘 아는 분께 한번 검사 받아봐야겠다.ㅎ;;

0 0 1,15 * * sudo /opt/bitnami/ctlscript.sh stop apache && sudo /opt/bitnami/letsencrypt/lego --path="/opt/bitnami/letsencrypt" --tls --email="이메일주소" --domains=hof.pe.kr --domains=www.hof.pe.kr renew && sudo /opt/bitnami/ctlscript.sh start apache

AWS프리티어+비트나미에서 우분투 기본페이지가 나올 때

그저께 홈페이지 접속이 상당히 느리길래 무슨일인가 하고 AWS콘솔에 접속해보았으나 아무 문제를 발견할 수 없었다. 모르지, 설령 문제가 있었다 한들 찾아낼 수 있는 공력이 모자랐을 수도 있고. 할수없이 인스턴스를 재시작했는데 어랍쇼? 블로그 접속해보니 초기화면에 우분투 기본 화면으로 바뀌어 있었다.

AWS 셋팅할 때 비트나미 이미지로 편리하게 설치를 하긴 했는데 파일 경로나 데몬 파일들이 apache + php + mysql 수동설치하는 것과는 달랐다. 옛 기억을 더듬어 살펴봤지만 문제점과 해결책을 찾기 어려웠다. 다시 웹 호스팅으로 돌아가야하나, 주변에서 AWS 잘 아는 사람에게 물어봐야할려나 하다가 검색으로 찾게 된 페이지.

Ubuntu + Apache + Bitnami WordPress 조합에서 Ubuntu 버젼을 업그레이드 했을 때 Apache 기존 설정셋이 날라가서 Apache2 Ubuntu Default page가 뜰 때 해결방법 -bsc0227님-

글 제목을 보니 우분투 업데이트 때 생긴 문제같은데 내 경우는 업데이트없이 인스턴스 재시작에서 생긴 문제.

아무튼 해결 방법은 아파치 중지, 비트나미의 스크립트로 웹서버 재시작이다.

sudo /etc/init.d/apache2 stop

sudo /opt/bitnami/ctlscript.sh start

ps// bsc0227님의 글에서는 ctlscript.sh start를 실행하면 된다고 써 있지만 내 경우는 sudo로 실행했어야 했다.

워드프레스 업데이트 시 forbidden 에러 날 때

얼마전에는 테마 커스터마이징에서 에러가 나더니만 오늘은 플러그인 업데이트하는데에도 403 에러가 난다.

관리자메뉴의 업데이트 메뉴에서 일괄 업데이트를 하니 You don’t permission to access /wp/wp-admin/update.php 란다. plugin 메뉴로 이동해서 설치된 개별 플러그인의 업데이트를 하나씩 진행해주니 문제가 없다.