이번에 오라클 무료 인스턴스 개설 후 블로그 서버를 옮기려다가 몇 가지 삽질을 하면서 결국 다시 아마존 라이트세일 옛집으로 귀환했네요.

기왕 연장을 꺼내든 김에 아예 처음부터 밀고 다시 세팅해보기로 마음먹었는데요. 저처럼 정말 처음 해보시는 분에게 도움 되었으면 해서 그 과정을 남겨보겠습니다.

목표

목차

  1. 아마존 라이트세일 인스턴스 개설
  2. Putty 접속 환경 세팅
  3. 도메인을 인스턴스에 연결
  4. 워드프레스 운용에 필요한 LEMP 환경 갖추기
  5. 자동 설치 도움 없이 손수 워드프레스 블로그를 세팅
  6. 블로그를 멀티사이트 시스템으로 변환
  7. 사이트 도메인에 Let’s Encrypt SSL 인증서 적용
  8. SSL 인증서 자동 갱신 스크립트

5달러 플랜 정도면 개인이나 작은 모임용 사이트라면 웬만한 트래픽은 문제 없이 돌아가는 허브를 만들 수 있습니다. 라이트세일 플랜에 따른 제공 서비스는 라이트세일 워드프레스 개설 최초 세팅 후기를 참고하시기 바랍니다.

1. 라이트세일 인스턴스 생성

1-1. RSA 암호란?

서버에 접속할 때 아이디, 패스워드만 넣고 입장하는 것보다 좀 더 어렵게 입장하는데요. RSA 암호로 알려진 공개키 시스템을 사용합니다. 쉽게 말하면,

A라는 사람에게 B라는 사람이 메시지를 전하고자 할 때 B는 A의 열린 자물쇠를 들고 와 그의 메시지를 봉인(공개키 암호화 과정에 해당)하고, 그런 다음 A에게 전해 주면, 자물쇠의 열쇠(개인키에 해당)를 가지고 있는 A가 그 메시지를 열어보는(개인키 복호화 과정에 해당) 식 ….

– “RSA 암호”, 위키피디아

친구랑 소식을 나누고 싶은데 중간에 우체부 아저씨도 못 믿는다면? 각자 자물쇠-열쇠 세트를 하나씩 산 다음에 서로 만나서 자물쇠만 교환한 뒤, 친구에게 편지나 선물 보낼 때 친구 자물쇠로 잠궈서 보내면 됩니다. 자물쇠를 잠글 때는 열쇠가 필요 없으니 우리집에서 잠글 수 있고, 풀 때는 친구 집에 도착해서 친구 열쇠가 있는 사람만 열 수 있으니 중간에 자물쇠만 보게 되는 우체부 아저씨는 못 보니까요. 열쇠를 직접 보낼 일이 없으니 안전하고요.

따라서 서버를 개설할 때 서버에게 내 자물쇠(공개키)를 주는 작업이 필요합니다. 그럴려면 자물쇠 -열쇠 한 쌍의 키를 만들어 둬야 합니다.

1-2. Puttygen을 이용한 RSA 암호키 생성

우선 이 단계는 라이트세일 사용자의 경우 기본 키를 내려받아 쓸 수 있기 때문에 귀찮으면 패스해도 됩니다. 하지만 한 번 해보는 것도 나쁘지 않아요.

Putty 다운로드 페이지에 접속해서 puttygen.exe 최신 버전을 내려받습니다. 잘 모르겠으면 puttygen.exe (32-bit) 최신파일을 그냥 받으십시오.

puttygen - 공개/개인키 쌍 생성하기
△ 공개/개인키 쌍 생성하기

Generate 버튼을 클릭해서 키 생성을 시작합니다.

puttygen - 마우스 커서 무작위로 움직여 키 생성
△ 마우스 커서 무작위로 움직여 키 생성

마우스 커서를 빈 공간에 무작위로 움직여서 키를 생성합니다.

puttygen - 공개키, 개인키 저장
△ 공개키, 개인키 저장

한 단계 암호를 추가하고 싶으면 key passphrase 에 입력하고, 이제 공개키(public key)는 mypublickey.pub 으로 저장, 개인키(private key)는 myprivatekey.ppk로 저장해 봅시다.

이 한 쌍의 묶음을 분실하지 않도록 잘 저장해두고, 혹시 모르니 클라우드에 백업도 해두시는 걸 추천합니다.

1-3. 라이트세일 계정 생성

라이트세일Lightsail 홈페이지에 접속해서 AWS 계정을 생성하거나, 이미 계정이 있는 경우 로그인합니다. 저는 가존 아마존 미국 계정으로 로그인해서 사용하고 있습니다. 처음 계정을 만드시는 경우 결제 정보 입력을 요구할 수 있습니다. 자세한 내용은 AWS 회원가입에 관한 공식 도움말을 참고하세요.

가입을 마치면 lightsail.aws.amazon.com (라이트세일 인스턴스 홈페이지)를 즐겨찾기에 추가하고 바로 접속해 봅니다.

라이트세일 인스턴스 생성
△ Create instance

이제 위와 같이 Create instance 버튼을 클릭해 인스턴스를 생성합시다. 설치 단계에서부터 워드프레스를 사전 설치해서 제공하는 옵션이 있고 이를 사용하면 더욱 간단하게 세팅이 완료됩니다.

Bitnami라는 소프트웨어 패키지/설치 라이브러리를 이용해서 많이들 사용하는 프로그램을 깔아주는 것인데, 아마존 라이트세일 – 처음 워드프레스 세팅한 제 예전 글을 보시면 간단한 세팅 과정이 설명되어 있으니 참고하세요.

그러나 이번에는 그냥 맨바닥에 직접 설치를 해보도록 하겠습니다. 사실 Bitnami 사용하기 전에 먼저 경험하고 공부했어야 하는 과정이었습니다.

라이트세일 우분투 18.04 인스턴스 생성
△ 라이트세일 우분투 18.04 인스턴스 생성

지역은 가장 가까운 서울 리전을 선택. 리눅스 플래폼을 선택. 그리고 과감하게 워드프레스 사전 설치를 거부하고 OS only 옵션을 통해 우분투 18.04 LTS 운영체제만 설치하고 바닥부터 시작해 봅니다.

기존의 ppk 파일 업로드
△ 기존의 ppk 파일 업로드

이제 키 쌍(pair)를 올려줘야 하는데요. Default 메뉴 옆에 “Download” 버튼을 통해 나만 쓸 수 있게 라이트세일 측에서 만들어준 개인키를 내려받아서 그걸 써도 됩니다.

하지만 내가 직접 만들어 둔 공개키-개인키 묶음을 사용하고 싶다면, Upload New 버튼을 누르고 라이트세일 쪽으로 “공개키” .pub 파일을 올려주면 됩니다. 디폴트로 받을 때는 열쇠를 내가 가지고 있어야 하니까 개인키를 받는 것이고, 그게 싫다면 라이트세일 쪽으로 내 ‘자물쇠’에 해당하는 공개키를 주는 것이겠죠?

Snapshot은 언제든지 서버를 해당 상태로 복원할 수 있도록 특정 시점을 이미지로 떠 놓는 것인데, 자동으로 스냅샷을 생성하면 이 또한 과금되기 때문에 저는 체크를 하지 않았습니다. 대신 워드프레스 백업 플러그인을 사용해서 직접 자료를 정기적으로 백업합니다.

라이트세일 플랜
△ 라이트세일 플랜

이제 인스턴스 플랜을 고르세요. 월 3.5달러 플랜은 첫 달이 무료입니다. 저는 5달러 플랜을 사용하고 있는데 램이 1GB 정도는 돼야 될 거 같아서 …. 그러나 가벼운 홈페이지 굴리시면 별로 상관 없을 겁니다. 다만 중간에 상하위 플랜으로 업그레이드하고자 할 때 스냅샷 뜨고 새로 개설한 인스턴스에 도메인 연결 다시 하고, 스냅샷으로 복원하는 과정이 좀 번거롭다는 사실을 알고 계셔야 합니다.

라이트세일 인스턴스 생성
△ 라이트세일 인스턴스 생성

이제 인스턴스 이름을 정해주고, “Create instance” 버튼을 눌러 나의 인스턴스를 생성합시다.

1-4. 정적 IP 생성해 라이트세일 인스턴스에 붙여주기

인터넷에 접속하는 모든 기기는 자신만의 IP 주소를 갖습니다. 여러분이 맛집 사장인데 손님이 100명 있으면 각 손님마다 구별을 해야 합니다. “김상택”처럼 이름을 붙이거나, “1번 손님”처럼 번호표를 주던가 해야지 주문이 안 헷갈리죠. 손님들은 계속 바뀌는데 손님이 올 때마다 평생 사용할 번호표를 주는 건 좀 비효율적이므로 잠깐 주문할 때만 1번 손님으로 불렀다가 내일 가게 문 열면서 다시 1번부터 번호표 나눠주는 게 효율적입니다.

그러나 가게에 매일 나오는 알바생은 출근할 때마다 1번 알바, 2번 알바 자꾸 이름이 바뀌는 것보다는 고정된 이름을 붙여주는 게 좋겠죠. 서버도 그렇습니다. 웬만해서는 퇴장(인터넷 끄고 잠수)할 가능성이 적고 24시간 대기할 서버는 내 아이패드와 달리 고정된 이름을 주도록 합시다.

라이트세일 정적 아이피 생성
△ 정적 아이피 할당 받기

고정된 정적 IP는 Networking 탭에서 “Create static IP” 버튼을 눌러 생성합니다.

라이트세일 인스턴스에 정적 아이피 연결
△ 정적 아이피 인스턴스와 연결

1) 고정된 아이피를 생성해서, 이 변하지 않는 명함을 매일 출근할 예정인 알바=인스턴스에 붙여(Attach) 줍니다. 2) 고정아이피 이름을 확인하고, 3) Create 버튼을 누릅니다.

라이트세일 고정 아이피 연결
△ 고정 아이피가 연결된 모습

위와 같이 이제 내 서버의 고정 아이피 주소를 얻게 되었습니다. 이제 언제나 저 주소로 접속하면 내 서버(인스턴스 myhomepage)로 연결됩니다. 주소를 메모해두도록 합니다.

2. Putty 다운로드와 SSH 접속 환경 세팅

2-1. putty 다운로드

Putty는 윈도우 PC에서 사용할 수 있는 오픈소스 SSH 클라이언트 프로그램입니다. Putty 다운로드 페이지에서 설치 버전이나 무설치 프로그램을 받으면 되는데, 저는 64비트 무설치 버전을 선호합니다.

2-2. 라이트세일 접속 환경 세팅

putty 세션 설정

putty.exe 를 더블클릭해 실행 후, 1) Host Name에 아까 연결한 정적 아이피 주소를 넣어줍니다. 2) 포트는 22번으로 두시고, 3) 접속 방식은 SSH 4) 어디에 접속하는지 쉽게 알 수 있도록 세션 이름을 눌러주고 5) 일단 저장합니다.

putty 접속 사용자명 설정
△ 접속 유저명 설정

다음으로, 좌측 Connection > Data 메뉴로 들어가서 접속할 때 username을 ‘ubuntu’로 해주시고요.

putty에 개인키 위치 지정
△ putty에 개인키 위치 지정

SSH > Auth 메뉴로 들어가서 개인키 파일을 찾아 골라줍니다. 공개키가 아니라 .ppk 형식의 개인키 위치를 알려주세요.

putty 세션 저장
△ putty 세션 저장

다시 한 번 Session 메뉴로 올라가서 Save 버튼을 눌러줍니다. 그리고 하단의 Open 버튼으로 접속합시다.

putty 보안경고

연결하려고 하는 서버를 신뢰할 수 있는지, putty의 캐시에 키를 저장할 건지 물어보는데 매일 내가 사용하는 컴퓨터이고 인터넷망을 이상한 곳을 경유하고 있지 않으면 예(Y)를 눌러 진행합니다.

이제 다음에 접속할 때는 간단하게 Session 메뉴에서 항목을 Load해서 Open 버튼으로 서버에 접속할 수 있습니다.

2-3. 루트 패스워드 설정

최초 접속 시에 만약 개인키에 한 번 더 암호 입력 단계를 거치도록 ‘passphrase’를 설정했다면 타이핑해주세요.

putty - 패스프레이즈 입력
△ putty – 패스프레이즈 입력

이제 전체 서버의 모든 설정을 만질 수 있는 최고 권한 사용자 ‘root’의 암호를 설정합니다.

sudo passwd root

그리고 “enter new UNIX password”와 같이 입력하라고 나오면 패스워드를 넣어줍니다. 따로 이런 비번들을 암기할 자신이 없다면 핸드폰 메모장에라도 잘 적어두도록 합니다.

root 패스워드 설정
△ root 패스워드 설정 완료

대소문자와 특수기호 등을 포함해 패스워드를 두 번 일치하게 입력해서 설정을 완료하였습니다.

2-4. (옵션) 폰트 바꾸기

처음 사용할 때 putty의 폰트 크기가 작아서 눈이 아프신 분들은 Session에서 내 라이트세일 인스턴스 세션을 Load 한 뒤에, Window – Appearance 메뉴에서 Font settings 항목을 통해 폰트를 바꿀 수 있어요.

puttty 폰트 설정
△ Putty 폰트 설정

저는 보기 좋은 네이버 D2Coding 폰트를 컴퓨터에 설치하고, 14포인트로 키워주니 눈이 편안하더군요.

puttty 폰트 설정
△ puttty 폰트 설정

적용 전과 후 모습입니다.

2-5. (옵션) Midnight Commander 설치

초보라서 여기저기 탐색할 때 너무 불편하더군요. 탐색기 비슷한 화면을 제공해주는 앱 하나를 설치합니다. 아래 명령을 한 행씩 차례로 입력해서 진행합니다. 설치 과정에서 설치할 거냐고 물으면 y 로 답하면 되고요.

업데이트

sudo apt update

커맨더 설치

sudo apt install mc

이제 mc 라고 타이핑하면 탐색기가 나옵니다.

미드나잇 커맨더  mc 실행
△ 미드나잇 커맨더

좌우측 패널이 있고, 마우스로 편하게 경로를 찾아 탐색할 수 있습니다. 파일을 마우스 우클릭으로 선택하면 노란색으로 활성화됩니다. 맨 아래는 F키와 연동된 명령이 나열되어 있는데, 가령 F4 키는 파일 내용을 편집(Edit)하고, F5키는 파일을 복사 전송합니다. F6키는 파일 이름 변경과 이동을 겸합니다. F7키로 디렉토리를 생성하고 F8키로 파일을 삭제합니다. F10키는 mc를 종료(Quit)합니다.

사실 오히려 명령어 타이핑이 빠를 수 있는데 리눅스 명령어에 익숙하지 않거나, 전체 파일 구조를 보면서 작업하고 싶을 초보자에게 무척 편리한 사용 화면이라서 저는 자주 mc를 호출해서 사용하고 있습니다.

3. 도메인 – 라이트세일 인스턴스 연결

3-1. 도메인과 네임서버

보통 아이피를 그대로 두고 홈페이지를 운영하는 사람은 없기 때문에 example.com 과 같은 도메인을 인스턴스에 연결해주게 됩니다.

내가 가진 도메인을 누가 인터넷 주소창에 입력했을 때, 라이트세일 서버 주소를 바라보도록 설정해야 하는데요. 즉시 되는 것은 아니고 네임서버를 변경하는 경우 최대 3일 정도 기다리고, A record 를 변경하는 경우 최소 10~30분 여유를 두고 이후 작업을 진행하세요.

초보이신 분들을 위해 … 좀 설명을 덧붙이면…. 인스턴스의 정적 IP 주소는 숫자로 되어 있습니다. 172.26.6.111 같은 숫자는 지도로 치면 상세주소와 같습니다. 거기에 뭐가 있는지 몰라도 일단 거기로 갈 수 있지요.

도메인은 주소의 별명입니다. “서울시청”, “서울시장의 집” 이렇게 단 장소를 가리키는 이름표를 만들고, 이 이름을 얘기하면 주소로 찾아가는 거죠. 택시 기사님에게 “아저씨 서울시청으로 가주세요”라고 할 때, 기사님이 서울시청을 모른다면 내비게이션에 검색하게 될 겁니다. 그럼 내비게이션이 서울시청의 위치를 172.26.6.111 쪽으로 안내합니다.

이 때 ‘서울시청 = 172.26.6.111’ 정보를 저장하고 안내하는 내비게이션이 바로 네임서버의 역할입니다. 서울시청의 위치 좌표는 xxx.xxx.xxx.xxx 이라는 정보를 저장하고, 누가 물어오면 대답해주는 중간 교환수 역할입니다.

3-2. 네임서버 위치

저는 hosting.kr 에서 도메인을 구입했습니다. 처음 도메인을 구입하면 도메인의 네임서버도 호스팅케이알 쪽 서버로 세팅되어 있습니다. 무슨 말이냐면 “서울시청”이라는 이름표를 호스팅케이알 상점에 가서 샀고, 서울시청은 어디로 가면 되는지를 저장하는 내비게이션 정보도 호스팅케이알에게 맡겼습니다.

도메인을 구입한 곳에서 꼭 내비게이션 설정 권한을 주지 않아도 됩니다. 무슨 말이냐면 도메인 이름표는 호스팅케이알에서 샀지만 네임서버는 라이트세일에게 맡길 수도 있습니다. 서울시청 — 내비게이션 — 실제 위치 좌표xxx로 이어지는 연결에서 내비게이션 검색 정보는 시청 가까운 곳에 두거나, 실제 위치 좌표 가까운 곳에 두거나, 또는 관리 잘 하는 제3자에게 위임해도 됩니다.

그러나 문제는 처음 서울시청 도메인을 구입한 후, 도메인-아이피 연결을 담당하는 네임서버는 다른 곳에게 맡기겠다며 ‘네임서버 변경’을 하게 되면 이 정보가 퍼지는 데 시간이 걸리게 되는데요. 서울시청은 어디 가서 물어보고 검색하면 되는지 전 세계에 알리는 데 시간이 필요하기 때문이죠.

대신 마음에 드는 곳으로 한 번 옮겨 놓으면 관리가 편하다는 장점이 있긴 합니다.

3-3. 네임서버 변경(추천)

도메인을 구입한 업체에서 제공하는 도메인 관리 서비스가 엉망인 경우에는 네임서버를 바꾸는 게 좋습니다. 누구에게 맡길까요? 라이트세일에 인스턴스를 개설했는데 도메인 연결까지 맡길 수 있습니다. 단점은 최대2-3일 안정적으로 연결되기까지 시간이 필요하다는 것. 장점은 라이트세일 안에서 새로 인스턴스를 만들고, 기존 도메인과 기존 인스턴스 연결을 끊고 다른 곳에 연결하고 등등 설정을 변경할 때 아주 편리하게 라이트세일 안에서 세팅할 수 있다는 점입니다. 참고로 저는 이 방식을 선호하지 않습니다. 기다리는 게 싫어서인데요… 이 단계를 패스하시려면 바로 3-5. A record 설정 항목으로 진행하세요.

https://lightsail.aws.amazon.com/ 에 접속한 후, Networking 탭으로 들어갑니다.

라이트세일 DNS 존 생성
△ DNS 존 생성

Create DNS zone 버튼을 누릅니다.

라이트세일 DNS zone 생성
△ 도메인 입력 후 존 생성

이어서 내가 이미 구입한 도메인을 적어주고, Create DNS zone 버튼을 누릅니다.

라이트세일 네임서버 확인
△ 라이트세일 네임서버 확인

그럼 위와 같이 네임서버 주소를 제공해주게 됩니다. 이제 도메인을 구입한 곳으로 가서 이 도메인의 이름 연결을 관리할 네임서버를 저 주소로 변경해주면 라이트세일이 도메인 연결을 관리할 수 있게 됩니다. 네임서버는 제 캡처화면에 있는 걸 사용하지 마시고 본인의 화면에 제안된 것을 사용하세요.

업체마다 다르지만, 보통 네임서버 변경 메뉴는 쉽게 찾을 수 있습니다. 호스팅케이알의 경우 로그인 후 우측 상단 나의 서비스 > 도메인 관리 > 도메인 체크하고, 아래 테이블에서 네임서버 주소 변경 메뉴를 선택하고 신청하면 됩니다.

호스팅케이알 네임서버 변경
△ 호스팅케이알 네임서버 변경

이제 아까 라이트세일에서 제공받은 1) 네임서버 정보를 넣어주고, 2) IP Check 버튼을 각각 눌러줘서 3) 해당 네임서버에 대한 아이피를 조회한 후 4) 변경하기 버튼을 눌러주세요.

호스팅케이알 네임서버 변경
△ 호스팅케이알 네임서버 변경

호스팅케이알은 변경 신청이 완료되면 이메일로 한 번 더 확인을 해주더군요. 변경되는 데 최대 2-3일 정도 시간이 필요한데, 이는 48시간이 지나야 이제부터 내 도메인을 누군가 브라우저 주소창에 쳤을 때 어디로 가야 하는지 호스팅케이알에게 물어보지 않고 라이트세일 쪽에 물어본다는 뜻입니다. 여기까지 하셨으면 48시간 정도 기다린 다음에 다음 작업을 진행하시는 걸 추천합니다.

3-5. A record 설정

네임서버 연결을 원래 설정한 그대로 사용하기로 했거나, 라이트세일 쪽으로 네임서버가 안정적으로 연결되기를 기다린 후에 해야 할 작업은 도메인이 직접 라이트세일 인스턴스를 바라보도록 해주는 것인데요.

라이트세일 DNS 설정 (네임서버가 라이트세일인 경우)

라이트세일의 네트워킹 탭에서 내가 관리하기로 한 도메인의 DNS zone으로 들어갑니다. 라이트세일로 네임서버를 이동하지 않았다면 다음 항목으로 이동하세요.

라이트세일 DNS 존 메뉴
△ 라이트세일 DNS 존 메뉴
라이트세일 DNS records : Add record
△ 라이트세일 Add record

이제 “Add record” 버튼을 눌러 정보를 추가합시다.

라이트세일 A record 추가
△ 라이트세일 A record 추가

방식은 A record를 추가하고, “mydomain.com” 이 내 인스턴스의 정적 아이피로 연결되도록 합니다. 보통 정적 아이피를 하나만 생성했다면 어차피 고를 게 하나 뿐입니다. Subdomain의 빈 칸에 “@” 기호를 넣어주는데, @.mydomain.com = mydomain.com 이라는 뜻입니다. 위와 같이 하면 mydomain.com 을 입력하면 내 인스턴스 아이피로 데려가라는 뜻입니다. 다 했으면 초록색 체크표시를 클릭.

라이트세일 CNAME record 설정
△ 라이트세일 CNAME record 설정

다음으로는 www.mydomain.com 이 mydomain.com 으로 접속되도록 위와 같이 써주세요. 방문자가 www.mydomain.com 으로 주소창에 입력하더라도 mydomain.com 으로 접속됩니다. 어차피 둘은 요즘 같은 것으로 취급되고, 주소창에 www를 생략하는 경우가 많습니다.

다음으로 Subdomain에 별표(*)를 넣어 이를 정적 아이피로 연결합니다. 이것은 모든 형태의 서브도메인, 즉 abcd.mydomain.com 을 입력했을 때 다른 곳으로 가지 말고 내 서버 인스턴스 아이피로 안내하라는 뜻입니다. 워드프레스 멀티사이트를 만들면 사이트를 여러 개 만들게 되는데, site1.mydomain.com, site2.mydomain.com 과 같이 만들게 되고 이 모든 사이트가 일단 워드프레스 설치된 입구로 입장하면 워드프레스가 알아서 설정된 사이트의 첫 페이지로 나눠서 안내하는 시스템입니다. 별표 대신 내가 개설할 사이트의 주소를 특정해서 추가로 넣어도 좋습니다. shopping.mydomain.com 등과 같이 어차피 만들 사이트의 서브도메인을 이미 정해 놓은 경우라면 말이죠. 그러나 이 경우에도 와일드카드로 *.mydomain.com 항목을 그냥 두는 편입니다.

라이트세일 A record 설정 - 정적 아이피와 연결
△ 라이트세일 A record 설정

호스팅케이알 DNS 설정

저는 그냥 도메인 구입한 호스팅케이알 네임서버를 그대로 사용해서 설정했습니다. 왜냐하면 라이트세일에서 만들 수 있는 DNS zone 이 총 3개로 제한되기 때문인데요. 사이트를 세 개 정도 운영하면 상관 없는데 그 이상의 도메인을 연결하려고 하니 차라리 도메인 업체의 관리 페이지가 편하더군요. 처음에 도메인 구입하고 네임서버 변경을 위해 시간을 버릴 일도 없습니다.

호스팅케이알 접속 후, 우측 상단 나의 서비스 > 도메인 관리 메뉴로 들어가세요. 이후1) 도메인을 선택하고, 2) 아래 테이블에서 “네임서버(서브도메인) 설정 관리” 메뉴를 선택한 뒤 3) 신청하기를 클릭합니다.

호스팅케이알 A record 설정 관리
△ 호스팅케이알 A record 설정 관리

라이트세일과 달리 서브도메인 빈칸에 “@”를 적지 않습니다. 레코드 타입은 A (record)로 설정하고, IP 주소는 나의 인스턴스 정적 아이피를 적어줍니다. 우선순위는 대충 적으셔도 되지만 기본적인 연결 항목이 가장 높은 순위여야겠죠? 다 했으면 설정 내용 추가합니다.

도메인 연결 A record 설정 - 호스팅케이알
△ 기본 도메인 연결 A record 설정

라이트세일 설정과 비슷하게 CNAME 설정과, *.seoulrain.net 서브 도메인에 해당하는 A record도 설정해줍니다. 이제 www.seoulrain.net 은 사실상 seoulrain.net 과 똑같이 취급되며, abcd.seoulrain.net 과 같이 어떤 이름으로 서브 도메인을 설정해도 일단 내 라이트세일 인스턴스 아이피로 데려갑니다.

호스팅케이알 서브도메인 설정 - A Record, CNAME
△ 호스팅케이알 서브도메인 설정 예시

네임서버 변경은 오래 걸리지만 A record 변경은 네임서버 안에서 직접 어디로 도메인을 안내할 건지를 수정하는 거라 늦어도 10분 정도면 반영됩니다. TTL 값 설정을 제공하는 곳도 있는데, 쉽게 말해 새로고침 주기라고 생각하시면 됩니다. 이 값을 짧게 설정해서 서버가 바뀐 아이피를 빨리 알 수 있도록 하고, 작업을 마치고 안정적으로 사이트가 돌아가면 다시 길게 설정해서 부하를 줄이는 게 좋습니다.

3-6. 추가 도메인 설정

워드프레스 멀티사이트는 mydomain.com 을 일단 메인 도메인(primary domain)으로 해서 워드프레스 사이트를 만들고, 그 안에서 네트워크를 꾸려 site1.mydomain.com, site2.mydomain.com 과 같은 사이트를 추가로 만들게 되는데요.

example22.com 과 같은 도메인을 site1.mydomain.com 과 연결하는 작업은 나중에 워드프레스 안에서 하면 되지만, example22.com 도메인은 일단 우리집 인스턴스 문 앞까지는 데리고 와야 워드프레스가 그 도메인을 site1.mydomain.com 으로 안내할 수 있습니다.

따라서 example22.com 도메인의 네임서버를 라이트세일로 변경해서 위와 같이 한 번 더 세팅을 하시거나, 도메인 구입 업체에서 A record 설정을 직접 하여 나의 서버 인스턴스 정적 아이피를 바라보도록 하면 됩니다. 다만 example22.com 의 서브 도메인은 사용하지 않을테니까 설정할 필요가 없겠죠?

가령 내가 ththlink.mydomain.com 이라는 사이트를 워드프레스 멀티사이트 안에 추가로 만들어서 독립적인 사이트로 운영하고자 계획하는데, 이 사이트를 ththlink.net 도메인에 연결해서 사용자들은 ththlink.net 만 사용해서 접속하게 할 생각이라면,

호스팅케이알 - 도메인 A record 레코드 설정
△ 별도의 도메인 A record 설정 예시

위와 같이 메인 도메인은 서버 인스턴스 아이피로 설정하고, www.ththlink.net 은 CNAME으로 ththlink.net 과 동일하게 취급해주세요. 위 캡처의 아이피는 본인의 서버 인스턴스 아이피로 대체하세요.

4. LEMP 스택 설치

이제 나만의 서버 공간 인스턴스를 만들고, 서버에 접속할 방법을 마련했고, 도메인도 연결 완료했습니다. LEMP = 리눅스 + Nginx + MySQL + PHP 로 이루어진 세트를 말하는 것으로, 워드프레스 운영을 위한 기본 환경 구성이 됩니다.

4-1. 프록시 설정

제가 작업하다 보니 윈도우10 + 크롬 브라우저에서 프록시 설정 때문에 좀 애를 먹게 되는 경우가 있더군요. 분명 도메인이 아이피와 연결이 완료되었는데 크롬브라우저에서는 접속이 안 되고, 인터넷 익스플로러에서는 된다든가 …

윈도우 10 인터넷 설정 - 자동 프록시 끔 설정
△ 윈도우10에서 프록시 서버 자동 검색 끄기

위와 같이 인터넷 설정에서 프록시 서버 자동 검색을 꺼주니 문제가 해결되었습니다. 윈도우 설정 > 네트워크 및 인터넷 > 프록시 항목입니다. 혹시 자꾸 방화벽이나 프록시 설정 때문에 접속 불가 화면을 브라우저에서 보시면 이 설정을 점검해 보세요. 또한 세팅하는 서버나 도메인에서 광고차단 플러그인 등을 끄고 작업을 하시는 게 좋겠어요.

4-2. putty에서 도메인으로 접속해보기

Putty실행 후 기존에 저장한 세션을 Load 해주세요. 그리고 Host Name에 이제 아이피 대신 내 메인 도메인을 적어 봅니다. 그리고 다시 세션 저장한 뒤, Open 눌러서 접속합니다. 도메인과 아이피가 잘 연결되었다면 서버에서 응답하는 화면이 나와야겠죠.

putty 세션 로드 - 저장- 오픈
△ Putty에서 호스트네임을 도메인으로 변경
putty
△ 도메인으로 SSH 접속이 가능

그러나 Putty로 접속은 되어도 웹브라우저에 http://mydomain.com 을 입력해도 아직은 아무것도 보이지 않습니다. 서버에서 아직 인터넷 사용자 누구나 볼 수 있는 웹페이지를 보여주도록 준비가 안 되었기 때문입니다.

4-3. Nginx 웹서버

이제 서버가 전세계 사람들에게 인터넷 페이지를 보여줄 수 있도록 웹서버 프로그램을 설치해 줍시다. 브라우저도 크롬, 인터넷 익스플로러가 있듯 웹서버는 Apache와 Nginx가 널리 쓰이는데… 저는 자세히는 모르겠고 최근 몇 년 사이에 Nginx가 주변에 많이 보여서 한 번 도전해보기로 합니다. Nginx는 동시접속자가 많을 때 아파치 서버보다 효율적이라고 하던데 … 사실 제 홈페이지에 동시 접속자가 많이 생길 일은 없고 아파치로 운영할 때도 아무 문제 없었습니다.

SSH에 관리자로 입장

Putty로 사이트 접속 후 루트 사용자로 변경합니다.

sudo su

사용자명이 ‘root’로 변경되고, 명령어 입력부 끝자리가 $ 기호에서 #로 변경된 것을 알 수 있습니다. 우리는 서버 전체에 대한 설정을 시작할 건데 앞으로 모든 작업은 이렇게 루트 사용자로 입장해서 해야 합니다. 사용자 변경과 권한에 대한 친절한 설명은 스위프트님의 리눅스 서버 root와 사용자, 그리고 CLI 명령어 실행 시 주의사항 글을 참고하세요.

sudo su
△ ‘sudo su’ 입력

앱 목록 업데이트

sudo apt update

nginx 웹서버 설치

sudo apt install nginx

계속하겠냐고(continue) 물으면 “y” 타이핑 후 엔터칩니다.

참고로 이런 명령어를 타이핑하는 게 귀찮은데, 위 명령어를 마우스로 복사해서 Putty 창에서 키보드 Shift + Insert 키를 누르면 붙여넣기 됩니다.

샘플 웹페이지 확인

웹서버 설치가 완료되면 인터넷 브라우저에 1) 자신의 인스턴스 정적 아이피를 입력해 봅니다. 2) 또한 도메인 주소를 입력해봅니다.

welcome to nginx
△ 웹서버 설치가 완료되어 웹페이지가 보임

위 1), 2) 모두 환영 페이지가 보여야 정상입니다. 이제 서버에서 웹페이지를 만들 수 있게 되었습니다. 만약 아이피로 접속하면 잘 보이는데 도메인으로 연결했을 때 안 보이면, 아직 도메인과 서버의 연결에 시간이 필요하거나, 프록시나 방화벽 문제일 수 있습니다. 핸드폰 LTE망과 다른 브라우저에서는 보이는지 체크하세요. 모두 이상이 없을 때 다음 단계로 진행하세요.

4-4. MySQL 패키지

워드프레스에는 글, 미디어, 사용자, 태그 등등의 여러 정보를 관리하게 되는데 MySQL 데이터베이스 시스템을 널리 이용합니다. MariaDB로 넘어가는 흐름이 있는데 뭔가 문제 생기면 대응할 자신이 없어서 전통적으로 사용하는 MySQL 패키지를 설치하기로 합니다.

MySQL 패키지 설치

sudo apt install mysql-server

y를 눌러 설치 시작하시고, 중간에 설치 과정에서 재시작해야 하는 서비스가 있는데 괜찮냐고 물어보면 화살표키로 Yes를 선택 후 엔터치세요.

sudo apt install mysql-server

MySQL 보안 설치

이제 실제 데이터베이스를 구축합시다.

sudo mysql_secure_installation

패스워드 안정성 검사 플러그인 쓸 거냐구 물으면 Y 쓰고 엔터칩니다.

mysql - 패스워드 검증 플러그인 사용
△ 패스워드 검증 플러그인 사용
mysql - 데이터베이스 패스워드 강도
△ 패스워드 강도

데이터베이스 접근하는 패스워드 강도를 묻습니다. Low는 8자 이상, Medium은 8자 이상이면서 대소문자 섞고 특수문자까지 포함해야 합니다. 1번 미디움을 선택하고 엔터친 다음 약속한 보안수준에 맞는 패스워드를 두 번 입력해줍니다. 패스워드는 잊지 않도록 어디 메모하면서 진행하세요.

MySQL 패스워드 설정
△ MySQL 패스워드 설정

패스워드 입력하고, 이걸로 계속 진행할 거냐고 물으면 y, 그 다음 질문이 계속 이어지는데 모두 y라고 답하면 됩니다. 기존의 익명 사용자 삭제, 원격에서 root 사용자 접속 금지, 테스트 데이터베이스 테이블 삭제, 권한설정 새로고침까지 완료하면 All done! 메시지가 나오면서 데이터베이스 접근 설정이 끝납니다.

MySQL 보안 설치 끝 all done
△ MySQL 보안 설치 끝

MySQL 설치 확인

실제로 설치되었는지 버전을 물어봅시다.

mysql --version

설치된 버전이 보입니다. mysql 14.14 버전이 설치되었네요.

mysql --version
△ mysql version

MySQL 실행 연습

데이터베이스를 관리하는 mysql 을 실행해 봅시다.

sudo mysql

명령 대기 문자열이 mysql> 로 바뀌었습니다. 현재 어떤 데이터베이스가 있을까 알아봅니다. mysql 에 들어온 다음부터는 명령어 끝에 세미콜론 ; 을 붙여줍니다.

show databases;
mysql : show databases
△ show databases

아 이런 데이터베이스가 현재 있군요. 뭔 소린지 모르겠고 건드리기 무서우니 일단 나갑니다.

exit;

4-5. PHP

그냥 html 문서를 다 만들어두고 누가 오면 그 페이지를 보여주는 거라면 여기서 멈추면 되지만 워드프레스는 그보다는 복잡하게 돌아갑니다. 쌀국수 주세요 하면 면 따로, 그릇 따로, 육수 따로 합친 다음에 최종적으로 서빙하는 이런 다이나믹한 관리를 위해서는 php 를 서버가 이해하고 다뤄야 합니다.

앱 목록 업데이트

sudo apt update

php-fpm 설치

현재 php 버전을 물어보면, 그런 거 없으니 니가 설치하라고 알려줍니다.

php -v
nginx : php -v
△ php 미설치 상태

php도 버전이 있는데 php7.2-cli 를 설치하라는 걸 보면 현재 서버가 php7.2를 요구하고 있습니다. Nginx 웹서버와 php 문서 사이의 통신과 처리는 php-fpm 이 하는데, 이 녀석을 설치하면 됩니다. 보통 php-fpm 을 설치하라고 하면 현재 요구되는 버전에 맞게 설치합니다.

sudo apt install php-fpm

아래와 같이 php-fpm 설치를 명령하니, php 7.2 버전에 맞는 php7.2-cliphp7.2-fpm 을 포함해 몇 가지 패키지들이 함께 설치될 예정입니다. y + 엔터키 치고 진행합니다.

sudo apt install php-fpm
△ sudo apt install php-fpm

몇 가지 패키지를 추가로 설치해줍시다. 뭐가 뭐하는 거고 왜 필요한지는 저한테 물어보지 마세요.

sudo apt-get install php7.2-mysql php7.2-curl php7.2-json php7.2-cgi php7.2-xsl php7.2-zip

서버 환경 설정에서 php.fpm 작동 설정

이제 Nginx 서버에서 php.fpm 이 일할 수 있도록 해줍시다. 외부에서 누가 사이트에 접속해 올 때 서버는 어떤 식으로 응답할지 /etc/nginx/sites-enabled/ 디렉토리에 있는 파일을 읽어 대답합니다. 그리고 이 파일은 /etc/nginx/sites-available/ 폴더에 있는 파일과 연결되어 있습니다. 가령 양복을 입은 손님이 오면 양복을 받아 옷걸이에 걸고 예약석으로 안내할 것~ 등등 매뉴얼을 적어 sites-available 캐비넷에 저장해두면, 이게 현관에 있는 직원 모니터 sites-enabled 에 자동으로 똑같이 떠서 누가 오면 그걸 보고 대응하는 식입니다.

서버의 사이트 기본 설정 /etc/nginx/sites-available/default 를 열어 편집해 봅시다.

sudo nano /etc/nginx/sites-available/default

화살표 키 아래로 눌러서 내용을 내려 보면 “pass PHP scripts to FastCGI server” 항목이 있습니다. php 코드를 php-fpm 한테 줘서 해석하고 처리하도록 맡겨주기 항목인데요. 모두 앞에 # 표시가 붙어 주석 처리되어 실제 실행되지는 않도록 잠겨 있는 상태입니다.

# pass PHP scripts to FastCGI server
        #
        #location ~ \.php$ {
        #       include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
        #       fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        #}

이 부분의 관련 코드에 붙은 주석을 모두 제거하되, # With php-cgi 부분은 해제하지 않습니다. 또한 설명하는 코멘트는 주석을 당연히 유지하세요.

# pass PHP scripts to FastCGI server
        
        location ~ \.php$ {
               include snippets/fastcgi-php.conf;
        
               # With php-fpm (or other unix sockets):
               fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }

마지막으로 아시다시피 우리가 설치한 것은 php7.0-fpm.sock 이 아니라 php7.2 버전이었죠? 버전을 맞춰 php7.2-fpm 으로 고쳐주세요.

# pass PHP scripts to FastCGI server
        
        location ~ \.php$ {
               include snippets/fastcgi-php.conf;
        
               # With php-fpm (or other unix sockets):
               fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }

다 했으면 Ctrl + X 키를 눌러 빠져나가면서, 변경사항을 y키로 반영하고, 파일명 변경 없이 엔터키로 그대로 저장합니다.

서버를 재시작합니다.

sudo service nginx restart

샘플 .php 파일 만들기

이제 정말 웹서버가 php 자료를 브라우저에서 보여줄 수 있는지 검사해보겠습니다. 사용자는 서버에 처음 도착하면 /var/www/html 경로에 있는 자료를 보게 되는데, 그 안에 info.php 파일을 만들어 추가하겠습니다. 간단하게 경로와 파일명까지 적으면서 편집기로 열면 됩니다.

sudo nano /var/www/html/info.php

그리고 아래 내용을 붙여넣습니다.

<?php phpinfo(); ?>

Ctrl + X 키를 누르고, 변경사항 저장할 거냐고 물어보면 y키로 대답. 파일명 변경 안 할 거니까 그대로 엔터쳐서 빠져나오고 마무리합니다.

php 페이지 접근

이제 아이피주소/info.php 또는 http://mydomain.com/info.php 로 접속해서 샘플 php 가 브라우저에서 제대로 보이는지 검사하세요. 아래와 같은 페이지가 보여야 합니다. 만약 보이지 않거나, 파일 자체를 다운로드하는 팝업이 뜨면 info.php 파일 작성 내용과 php7.2-fpm 관련 서버 설정을 다시 점검하세요.

info.php
△ Nginx 에서 info.php 파일이 정상 출력

보안상 모든 서버 설정이 끝나고 사이트 운영이 정상 궤도에 오르면 info.php 파일은 지우는 걸 추천합니다. 서버의 자세한 환경을 굳이 지나가는 사람들에게 가르쳐줄 필요는 없으니까요.

5. 워드프레스 싱글 사이트 설치

이제 워드프레스를 설치해보겠습니다.

5-1. 워드프레스 데이터베이스 생성

우선 워드프레스의 데이터베이스를 mySQL에 생성해야 합니다. mysql 최고 권한을 가진 root 사용자의 패스워드를 만들어줍니다. 데이터베이스 최고관리자라고 생각하면 됩니다. 여러 종류의 패스워드가 등장하므로 따로 메모하면서 진행하는 걸 추천합니다.

sudo mysql -u root -p

패스워드를 써주고, mysql> 이 표시되면서 대기 상태가 되었습니다. 이제 wordpress 라는 이름의 데이터베이스를 만들어줍니다. 안전하게 문자 인코딩까지 지정한 아래 내용을 복사해서 붙여넣으세요.

CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

데이터베이스 목록을 확인해보면 wordpress 가 새로 생겼습니다.

show databases;
mysql - show databases
△ 새로 생성된 wordpress 데이터베이스

이제 데이터베이스 사용자를 하나 만들겠습니다. 아래 내용에서 NEWUSER와 NEWPASSWORD 부분을 본인이 사용하고 싶은 아이디와 패스워드로 바꾼 뒤에 붙여넣으세요.

CREATE USER 'NEWUSER'@'localhost' IDENTIFIED BY 'NEWPASSWORD';

그리고 방금 만든 유저에게 워드프레스 데이터베이스에 접근할 수 있는 모든 권한을 줍니다. NEWUSER와 NEWPASSWORD 부분을 방금 입력한 내용으로 일치하게 작성하세요. 1 warning이 뜰텐데 무시해도 좋습니다.

GRANT ALL ON wordpress.* TO 'NEWUSER'@'localhost' IDENTIFIED BY 'NEWPASSWORD';

내가 생성한 유저에게 권한이 잘 부여됐는지 확인해봅니다.

SHOW GRANTS FOR 'NEWUSER'@'localhost';
mysql - show grants
△ mySQL 사용자 권한 확인

위처럼 seoulrain이라는 유저에게 worldpress 데이터베이스 권한이 부여됐습니다.

권한을 새로고침합니다.

FLUSH PRIVILEGES;

mysql에서 빠져나오고 마무리합니다.

exit;

5-2. 워드프레스 다운로드

이제 워드프레스를 본격 설치해보겠습니다.

설치파일 다운로드

임시 폴더로 이동합니다.

cd /tmp

웹에서 워드프레스 설치 파일 최신본을 내려받읍시다.

curl -LO https://wordpress.org/latest.tar.gz

받은 압축파일의 압축을 풀어줍니다.

tar xzvf latest.tar.gz

루트 위치 재확인

웹서버의 현대 기본 설정 파일을 열어 웹서버가 방문객을 맞이하는 최초 위치 경로를 다시 확인합니다.

sudo nano /etc/nginx/sites-enabled/default

편집기를 열어서 아래 화살표키로 화면을 내리면 root 경로를 다시 확인할 수 있습니다. 현재 /var/www/html 디렉토리가 루트 경로입니다. 이제 워드프레스를 /var/www/html/wordpress 와 같은 경로에 설치하려고 합니다.

nginx root /var/ww/html
△ Nginx 기본 설정 파일에서 root 경로 확인

다시 Ctrl + X 를 눌러 편집기를 빠져나오세요.

워드프레스 환경설정 파일 만지기

아까 워드프레스 파일을 압축해제했던 /tmp 위치에 있어야 합니다.

cd /tmp

워드프레스 샘플 환경설정 파일을 복사해서 실제 환경설정 파일에 덮어쓰겠습니다.

cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php

이제 워드프레스 폴더 전체를 들어서 실제 워드프레스가 작동할 루트 위치로 옮겨줍니다. 위에서 확인했든 목표 경로는 /var/www/html/wordpress 입니다.

sudo cp -a /tmp/wordpress/. /var/www/html/wordpress/

실제로 잘 이사한 걸까요? mc 를 실행해서 재빨리 확인해봅시다.

mc - midnight commander
△ mc에서 보이는 워드프레스 폴더 위치

마우스로 클릭하면서 해당 경로를 차례대로 밟아서 가보니 폴더가 잘 도착해 있네요. F10을 눌러서 빠져나옵니다.

웹서버가 워드프레스에 접근하는 권한 부여

Nginx 가 워드프레스를 다룰 때 어려움이 없도록 권한을 줍니다.

sudo chown -R www-data:www-data /var/www/html/wordpress

기본적으로 운영/설치 과정에 에러를 줄이기 위해 워드프레스 폴더 자체의 권한을 755로 변경합니다.

sudo chmod -R 755 /var/www/html/wordpress/

5-3. 워드프레스 운용을 위한 웹서버 설정

워드프레스 루트로 안내하는 서버 설정

지금 우리는 워드프레스 멀티사이트를 운영하려고 하는데요. 메인 도메인이 입구에 있고, 그 아래 자식처럼 site1.mydomain.com site2.mydomain.com 같은 사이트를 내 마음대로 만들어서 별도의 사이트로 운영할 겁니다.

그리고 site1에게 example.com 도메인을 주고, site2에게 또 다른 도메인을 부여해서 이를 연결할 건데요. 일단 도메인을 들고 워드프레스가 있는 문 앞까지만 도착하면 워드프레스가 알아서 도메인에 따라 안내를 할 것이므로 각 도메인이 워드프레스 대문이 있는 /var/www/html/wordress 로 입장하도록 문 앞에서 안내하는 설정이 필요합니다.

사이트 설정파일 ‘wordpress’를 생성하면서 편집기로 열어봅니다.

sudo nano /etc/nginx/sites-available/wordpress

그리고 아래 내용을 수정 후 붙여넣기(putty에서 Shift + Ins) 하면 되는데요.

server {
    listen 80;
    listen [::]:80;
    root /var/www/html/wordpress;
    index  index.php index.html index.htm;
    server_name  seoulrain.net *.seoulrain.net example.com example2.org;

    client_max_body_size 100M;

    location / {
        try_files $uri $uri/ /index.php?$args;        
    }

    location ~ \.php$ {
         include snippets/fastcgi-php.conf;
         fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         include fastcgi_params;
    }


}
  • 먼저 root 주소가 /var/www/html/wordpress; 가 맞는지 확인하세요.
  • index index.php index.html .. 의 순서로 첫 페이지에 index.html 보다 index.php 를 우선시하도록 합니다.
  • server_name 설정이 매우 중요한데요. 여기에는 내 블로그에 개설할 모든 사이트가 사용할 예정이거나 사용하는 도메인을 적습니다. www.seoulrain.net 도 적을 수 있지만 어차피 www.seoulrain.net 도메인은 이미 seoulrain.net 으로 돌려지니 생략했습니다. *.seoulrain.net 과 같이 별표와 함께 적은 것은 앞으로 내가 abc.seoulrain.net 처럼 서브도메인으로 어떤 걸 적을지 확실하지 않지만 무조건 그런 형식의 주소로 찾아오는 사람이 있으면 워드프레스 루트로 보낸다는 겁니다. 그 다음으로 example.com 이나 example.org 처럼 내 블로그 서브도메인 사이트에 연결할 독립 도메인도 워드프레스 대문으로 안내해야 하므로 나열합니다. abc.example.com은 사이트에 접속할 때 쓰는 주소가 아니므로 *.example.com 과 같은 형식은 안 씁니다. 끝에 세미콜론을 까먹지 마시고요.
  • client_max_body_size 100M; 와 같이 파일 제한을 넉넉하게 잡아줍니다.
  • 나머지는 붙여넣으면 될 거 같습니다. php7.2-fpm 문자열에서 php 버전 7.2를 확인하십시오.

다 했으면 Ctrl + X 눌러서 빠져나오면서, 변경사항 반영(y)하시고, 이름 변경 없이 그대로 저장합니다.

심볼릭 링크 정리

작성한 설정 파일은 /etc/nginx/sites-available/ 에 위치하고 있는데 실제로 서비스되는 위치는 /etc/nginx/sites-enabled 입니다. 그래서 설정 파일을 sites-enabled 폴더에 넣어도 되지만 available 폴더에 만들고 언제나 똑같은 내용을 참조하도록 enabled 폴더에 심볼릭 링크를 만들어 줍니다.

sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/

오류 검사합니다.

sudo nginx -t

오류가 없으면 아래와 같이 syntax is ok 라는 메시지가 출력되지요.

nginx -t
△ nginx 오류 검사

웹서버를 다시 시작합니다.

sudo systemctl reload nginx

이제 내가 설정한 server_name 에 해당하는 seoulrain.net 또는 *.seoulrain.net 또는 example.com 또는 example2.org 도메인으로 접속해서 내 서버 문을 두드리는 이가 있으면 이들을 모두 root 경로인 /var/www/html/wordpress 로 데려갈 겁니다.

디폴트 설정 심볼릭 링크 정리

같은 문으로 들어오는 입장객을 어떻게 처리하라는 지침이 중복되면 안 되기 때문에 기존에 있던 default 설정은 작동하지 않도록 심볼릭 링크를 끊어주도록 합시다.

sudo unlink /etc/nginx/sites-enabled/default

서버 재시작

sudo systemctl reload nginx

이런 식으로 내가 생각하는 이름표, 도메인, 주소를 들고 내 서버 문을 두드리는 모든 경우에 대한 손님 맞이 준비가 끝났습니다.

도메인으로 접속해보면

error establishing a database connection
△ 워드프레스 설치 준비가 끝나지 않은 화면

위 화면이 보여야 정상입니다. 정상적으로 /var/www/html/wordpress 경로로 인도되었으나, 데이터베이스 설정이 준비되지 않았다는 에러 메시지입니다.

5-4. 워드프레스 환경설정 파일 수정

이제 워드프레스 설정 파일을 열어 설치를 시작하기 위한 정보를 제공합시다. wp-config.php 파일을 편집기로 열어줍니다.

sudo nano /var/www/html/wordpress/wp-config.php

데이터베이스 이름, 사용자명, 패스워드 입력

화살표 키로 이동해서 먼저 DB_NAME에 ‘wordpress’ 데이터베이스 이름을 써 주고, DB_USER에는 데이터베이스에 접근 권한을 부여한 사용자 이름을, DB_PASSWORD에는 데이터베이스 사용자의 패스워드를 적어줍니다. 위 5-1. 워드프레스 데이터베이스 생성 단계에서 생성한 사용자와 패스워드를 정확히 넣어주세요.

config - 데이터베이스 이름, 사용자, 패스워드를 기입
△ 데이터베이스 이름, 사용자, 패스워드를 기입

시크릿키 값 제공

아직 나가지 말고 이어서 시크릿키를 넣어주겠습니다. 워드프레스가 쿠키 파일을 만들 때 다른 사람이 이것을 가로채도 복원해서 알아보지 못하도록 암호화하게 되는데 이 때 사용하는 복잡한 열쇠키라고 생각하면 됩니다. 무작위 문자가 필요한데 일단 wordpress.org 에서 제공하는 시크릿키 생성 페이지에 접속해서 키를 얻으세요.

화면에 키가 표시되면 새로고침을 두세 번 눌러서 변경하고, 전체를 복사해서 메모장에 붙여넣은 후, 일단 .txt 파일로 저장해둡니다. 절대 다른 사이트에 샘플로 올라와있는 키를 사용하지 말고 내가 사용할 수 있도록 처음 생성된 신선한 키를 사용하십시오.

워드프레스 시크릿 키 복사
△ 키를 복사합니다

이제 키가 복사된 상태에서 … 다시 putty 편집 화면으로 돌아가서 define(‘Auth_Key .. 부분을 찾아 모두 지웁니다.

replace wp secret key
△ 빨간색 부분을 모두 지운다.

그리고 복사한 키를 그 위에 덮어씁니다.

wordpress secret key
△ 새로 얻은 복잡한 키 값으로 대체

플러그인 설치 시 비번 요청 안 하게

마지막으로 아래 코드를 복사해서 아무 곳에나 붙여넣어주세요. 워드프레스 관리자 페이지에서 플러그인이나 테마를 설치할 때 귀찮게 사용자 인증을 요구하는 것을 피하기 위한 설정입니다.

define('FS_METHOD', 'direct');

저는 /* That’s all,~ 위에 붙여넣었습니다.

fs_method
△ FS_Method 관련 코드 삽입

모두 마쳤으면 Ctrl + X 키를 눌러 빠져나가면서 저장 내용을 반영(y)합니다.

서버 재시작

sudo systemctl reload nginx

5-5. 브라우저에서 설치 마무리

이제 브라우저를 열어 도메인으로 접속해보면, 워드프레스 설치를 안내하는 처음 화면이 우리를 반겨줍니다.

워드프레스 설치 - 언어 설정
△ 언어 설정과 함께 설치를 시작할 수 있음

간단하게 1) 사이트 제목, 2) 워드프레스 로그인 아이디(데이터베이스 아이디와 다름), 3) 패스워드, 4) 관리자 대표 이메일주소, 5) 검색엔진이 내 사이트 탐색하지 못하게 막을 것인지 여부를 챙겨주고, 6) 설치를 시작합니다.

워드프레스 설치 초기 사용자 정보 입력
△ 사이트 정보와 로그인 아이디 설정

패스워드를 너무 간단하게 정하면 ‘Very weak’ 경고가 뜨는데, 억지로 confirm 해서 강제 진행할 수도 있지만 가급적 더 강력한 것으로 바꿔줍니다.

워드프레스 설치 사용자 패스워드 강도
△ 워드프레스 사용자 비번 검증

성공 메시지가 뜨면서 로그인 버튼이 보입니다.

WORDPRESS SETUP SUCCESS

로그인하세요. 대시보드가 보이면 성공입니다. 또한 로그아웃하고 도메인으로 접속해서 사이트 첫 화면이 보이는지 확인하세요.

6. 워드프레스 멀티사이트 설치

라이트세일 인스턴스에 가벼운 워드프레스 하나만 돌리기는 아깝습니다. 우리는 서버네임에 mydomain.com외에도 *.mydomain.com , example.com 등등의 도메인을 추가한 바 있지요. 워드프레스 안에서 여러 사이트를 쉽게 추가 개설할 수 있는 ‘멀티 사이트’ 세팅을 해보겠습니다.

6-1. 서버네임 재확인

현재 제가 사용하는 /etc/nginx/sites-available/wordpress 파일을 예로 들어보겠습니다.

/etc/nginx/sites-available/wordpress
  • root 주소는 /var/www/html/wordpress 로 되어 있습니다.
  • server_name 은 seoulrain.net , *.seoulrain.net , onmaroo.net , ewha.me 이렇게 여러 도메인을 나열했습니다.
  • location ~ /favicon.ico 부분은 없어도 됩니다. 파비콘같은 중요하지 않은 파일에 대한 접근 로그 기록을 서버가 신경쓰지 말라는 코드입니다.
  • access_log~ 부분은 여러 사이트를 운영하는 경우 사이트별로 로그 기록을 나눠서 기록하도록 하여 나중에 관리가 편리하도록 하는 것인데 .. 사실 저는 로그 기록을 일부러 뒤져볼 일이 없을 거 같아서 이것도 귀찮으면 패스하세요.
  • php7.2-fpm 과 같이 php7.2 를 다루는 fastcgi가 지정되도록 합니다.

실제로 고쳐봅시다.

sudo nano /etc/nginx/sites-available/wordpress

아래의 코드를 본인의 환경에 맞게 고쳐서 붙여넣으세요.

server {
    listen 80;
    listen [::]:80;
    root /var/www/html/wordpress;
    index  index.php index.html index.htm;
    server_name  seoulrain.net *.seoulrain.net onmaroo.net ewha.me;

    client_max_body_size 100M;

    location / {
        try_files $uri $uri/ /index.php?$args;        
    }

    location ~ /favicon.ico {
        access_log off;
        log_not_found off;
   }

    location ~ \.php$ {
         include snippets/fastcgi-php.conf;
         fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         include fastcgi_params;
    }

    access_log  /var/log/nginx/$host-access.log;
    error_log   /var/log/nginx/wpms-error.log;
}

이미 설정한 이 파일을 다시 열어 점검할 때 사실 기존에 입력한 내용을 건드리지 않아도 좋습니다만… 특히 server_name 의 설정이 맞는지 다시 한 번 확인이 필요합니다. 괜히 초대 손님을 안내하지 못하는 일이 없도록 말이죠.

Ctrl + X 를 눌러 저장 내용 반영(y)하고 빠져나갑니다. 이 파일의 심볼릭 링크는 이미 생성했으므로 패스합니다.

문법 오류 검사.

nginx -t

6-2. 워드프레스 설정 파일 수정

환경설정 파일에 멀티사이트 허용 코드 추가

워드프레스 환경설정 파일을 엽니다.

sudo nano /var/www/html/wordpress/wp-config.php

/* That’s all, .. 위 부분에 아래 코드를 추가합니다.

define('WP_ALLOW_MULTISITE', true);

아래와 같이 추가하면 됩니다.

WP_ALLOW_MULTISITE
△ 멀티사이트 허용

이제 Ctrl + X 키를 눌러 저장하면서 빠져나옵니다.

대시보드에서 네트워크 설치 시작

이제 다시 메인 도메인의 대시보드를 한 번 새로고침(F5) 해주시고, Tools(도구) 항목 아래에 Network Setup(네트워크 설치) 항목이 새로 나타났음을 확인해주세요.

워드프레스 네트워크 설치
△ 네트워크 설치 메뉴 생성

저는 서브도메인(Sub-domains) 방식을 선호합니다. 나의 메인 사이트가 만약 efbs.kr 이라고 한다면… site1.efbs.kr … site2.efbs.kr 과 같은 주소로 접속할 수 있는 새끼 사이트를 계속 만들 수 있습니다. 서브디렉토리 방식은 서버네임 설정 등이 간편하지만 대신 특정 페이지나 포스트 주소와 중복되는 형식이어서 꺼려집니다.

전체 사이트1, 사이트2 ..를 총괄하는 네트워크의 타이틀을 적어주고, Install 클릭.

네트워크 주소 방식 지정

워드프레스 멀티사이트 서브도메인 서브 디렉토리

네트워크 생성 후 활성화

다음 화면에서 워드프레스 설정 파일에 추가할 코드가 제시됩니다. 아래의 (1)번 항목에 있는 내용을 복사하면 되는데, ‘efbs.kr’ 이라고 되어 있는 곳에 자신의 메인 도메인이 있음을 확인하세요. (2)번은 Nginx 에서는 신경쓰지 않아도 됩니다. (1)번 코드만 복사합니다.

create a network of wordpress sites

이제 복사한 코드를 가지고 wp-config.php 로 갑시다.

sudo nano /var/www/html/wordpress/wp-config.php

그리고 /* That’s all .. 주석 위에 붙여넣기 해줍니다(Shift + Ins).

wp_allow_multisite

Ctrl + X 키를 통해 빠져나오면서 변경사항 저장(y)하시고요.

웹서버 재시작

sudo systemctl reload nginx

6-3. 멀티사이트에 사이트 추가 생성하기

브라우저에서 메인 사이트 대시보드로 다시 로그인하면, 멀티사이트 설정이 완료된 화면이 보입니다. 아래와 같이 여러 사이트의 허브가 되는 Network 관리자의 대시보드 화면으로 이제 들어갈 수 있어요.

워드프레스 멀티사이트 대시보드
△ 워드프레스 멀티사이트 대시보드

새로운 사이트를 추가해봅시다.

워드프레스 멀티사이트 - 새로운 사이트 추가
△ 워드프레스 멀티사이트 – 새로운 사이트 추가

만약 위의 설정 단계에서 *.efbs.kr 을 서버네임에 추가했다면 그 어떤 이름을 사용하더라도 상관 없습니다. shopping.efbs.kr 라고 주소를 설정한다면, 이렇게 만든 사이트는 이제 shopping.efbs.kr 로 접근할 수 있는 새로운 사이트가 될 것입니다.

Add new site

주소창에 http://shopping.efbs.kr 로 접속해보면 메인 도메인과 다른 새로운 사이트의 첫 화면을 볼 수 있습니다. 이제부터 별개의 사이트처럼 관리하면 됩니다.

6-4. 멀티사이트 사이트에 도메인 추가 연결

그러나 shopping.efbs.kr 은 efbs.kr 아래에 있다는 걸 보여주고 있어서 이 사이트를 독립된 example.com 으로만 접속하게 하고 싶다면 어떻게 할까요?

위에서 우리는 이미 server_name 에 example.com 을 적어주었으므로, 이미 서버는 example.com 을 통해 방문하는 사람을 워드프레스로 안내하고 있습니다. 이미 개설한 shopping.efbs.kr 사이트의 설정에서 주소만 example.com 으로 바꿔주면 됩니다.

워드프레스 멀티사이트 도메인 수정
△ site1.mydomain.com 주소를 서버네임의 다른 도메인에 매칭

이제 example.com 로 접속하면서 사람들은 사실은 shopping.efbs.kr 로 만든 사이트를 보게 될 겁니다. 기존의 shopping.efbs.kr 로의 연결은 끊기게 되고, 가르쳐주지 않으면 examle.com 이 efbs.kr 사이트 아래에 복속되어 있다는 것을 도메인 이름만으로 알기 힘듭니다.

언제든지 임시로 사이트가 필요할 때 site1.mydomain.com 과 같이 사이트를 개설해서 별도로 활용할 수 있고, 서버 설정을 통해 사이트네임만 추가, 삭제해주면서 다른 도메인과 연결도 유연하게 변경할 수 있습니다.

7. SSL 인증서

인터넷 주소 앞이 http:// 로 시작하는 경우와 https:// ~ 로 시작하는 경우가 있는데, http에 암호화와 안정성을 더한 방식이라고 쉽게 이해하고 넘어갑시다. 요즘 사이트를 https로 서비스하지 않으면 검색 순위에서도 밀리고 브라우저도 방문자에게 경고를 띄우게 됩니다.

이미 개설한 사이트에 Let’s Encrypt 무료 인증서를 발급받아 적용해보겠습니다.

7-1. HTTPS 포트 열어주기

서버는 기본적으로 http:// 방식으로 입장하는 애들만 받아주게 통로를 열어두었습니다. 앞으로 https:// 방식으로도 입장할 수 있도록 방화벽에서 포트를 열어주겠습니다.

라이트세일에 쉽게 설정할 수 있는 메뉴가 있습니다. 인스턴스 처음 화면으로 접속하세요. 그리고 설정할 인스턴스를 선택해 들어갑니다. 이제 Networking 탭에서 Firewall(방화벽) 설정하는 부분이 보입니다. Add another를 클릭해서 새로운 룰을 추가합시다.

라이트세일 인스턴스 방화벽 설정
△ 라이트세일 인스턴스 방화벽 설정

새로운 룰로, ‘HTTPS’ 를 선택하고, Save를 눌러줍니다. 이제 https 접속이 허가되었습니다.

라이트세일 방화벽 https 추가
△ HTTPS 추가

7-2. 인증서 설치를 도와주는 Certbot 설치

인증서 설치를 도와주는 certbot을 설치해 보겠습니다.

먼저 설치를 위한 저장소부터 마련합니다.

패키지 목록 등 업데이트

sudo apt-get update
sudo apt-get install software-properties-common

아래 내용 넣어주고 [ENTER] 치고 로딩 기다립니다. 시간이 좀 걸릴 수 있는데 Done 메시지 나올 때까지 기다립니다.

sudo add-apt-repository ppa:certbot/certbot

Nginx용 Certbot 설치

sudo apt-get install python-certbot-nginx

여기까지 잘 안 되면 다시 최신 버전으로 업데이트해서 다시 시도해봅니다.

sudo add-apt-repository ppa:certbot/certbot

문법 오류 검사

sudo nginx -t

서버 재시작

sudo service nginx restart

7-3. 인증서 받을 도메인 확인과 설정 백업

현재 워드프레스에 어떤 도메인으로 접속하도록 하고 있는지 server_name 을 한 번 더 확인합니다.

sudo nano /etc/nginx/sites-available/wordpress

인증서 설정 과정에서 Certbot 이 자동으로 이 설정 파일 안에 내용을 추가하게 될텐데요. 내용을 복사해서 따로 백업해놓으면 문제가 생겼을 때 돌아가기 쉽습니다.

server {
    listen 80;
    listen [::]:80;
    root /var/www/html/wordpress;
    index  index.php index.html index.htm;
    server_name  mydomain.com *.mydomain.com example.com example.org;

    client_max_body_size 100M;

    location / {
        try_files $uri $uri/ /index.php?$args;        
    }

    location ~ /favicon.ico {
        access_log off;
        log_not_found off;
   }

    location ~ \.php$ {
         include snippets/fastcgi-php.conf;
         fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         include fastcgi_params;
    }

    access_log  /var/log/nginx/$host-access.log;
    error_log   /var/log/nginx/wpms-error.log;
}

위와 같이 서버네임이 mydomain.com , *.mydomain.com , example.com, example.org 라고 해보겠습니다.

서버네임에 없는 도메인은 받을 수 없습니다. 가령 abc.com 이나 site1.example.org는 안 됩니다. www.mydomain.com 은 *.mydomain.com 에 포함되므로 가능합니다. 어차피 도메인 설정에서 www.example.com 이 example.com 으로 연결되도록 해두었으므로 저는 서버네임에서도 www.example.com 을 생략하고 인증서 받을 때도 생략했습니다.

이제 현재 개설해서 운영을 완료한 사이트가 mydomain.com site1.mydomain.com example.com example.org 이렇게 총 4개라고 할 때~ 아래와 같이 인증서를 요구합니다.

7-4. 인증서 내려받기

실제 인증서를 받아보겠습니다. 위에서 확인한 서버네임에 유의하여 각 도메인에 해당하는 인증서를 달라고 요구합니다. 아래 코드를 수정해서 사용하세요. 각 도메인마다 한 장씩 인증서가 발급되는 게 아니라 하나의 인증서에 아래 도메인을 모두 인증합니다.

sudo certbot --nginx -d mydomain.com -d www.mydomain.com -d site1.mydomain.com -d example.com -d -d example.org

보시면 아시겠지만 -d 한 칸 띄고 도메인이 계속 나열됩니다. www.mydomain.com 인증서는 사실 이미 무조건 mydomain.com 으로 안내되고 있으니 생략해도 됩니다만 혹시 모르니 추가했습니다.

*.mydomain.com 과 같은 와일드카드 사용해서 인증서를 받으면 앞으로 추가로 사이트를 개설했을 때 다시 받을 필요가 없어서 좋지만, 왜인지 저는 authentificator 에러가 나더군요. 어차피 수시로 사이트를 개설할 것은 아니므로 실제로 필요한 도메인에 대해서만 으면 됩니다.

처음 신청하는 경우 이메일 주소를 달라고 하면 적어줍니다. 또한 약관(Terms of Service)에 동의해달라고 하면 A 적어넣어 엔터 치고 진행하세요.

https로 리다이렉팅
△ http 로 접속해도 https로 리다이렉팅할 거면 2번을 선택

Redirecting 할 거냐 물어보면 맘대로 하면 됩니다. 보통 하나의 주소로 입장하게 하면 검색 순위에도 좋은 영향이 있으리라 기대하고 (2) 리다이렉팅하는 편입니다.

letsencrypt 인증서 발급 성공
△ 인증서 발급 성공 화면

Congratulation!! 메시지가 보인다면 성공입니다. 실제 인증서 관련 파일이 저장되는 위치가 안내되고, 서버 설정에도 관련 내용이 자동으로 추가되었습니다.

도메인으로 접속해보고 안전한 사이트로 표시되는지 확인합니다.

안전한 사이트로 표시 (SSL)
△ 안전한 사이트로 표시

8. SSL 인증서 관리와 갱신

8-1. 서브도메인 사이트를 추가 개설했을 때

가령 인증서까지 잘 받아서 여러 사이트를 운영하다가, site2.mydomain.com 으로 사이트를 하나 더 만들었고 해당 사이트는 https 접속이 안 되는 상황에서 인증서를 확장할 수 있습니다.

간편하게 새로운 도메인을 포함해서 한 번 더 인증서를 요청하면 됩니다. 기존 명령어 맨 뒤에 -d site2.mydomain.com 만 추가하였습니다.

sudo certbot --nginx -d mydomain.com -d www.mydomain.com -d site1.mydomain.com -d example.com -d -d example.org -d site2.mydomain.com

그럼 기존 인증서가 이미 있는데 도메인을 추가한 새 인증서로 대체해서 확장할 것인지 묻습니다. E 키를 눌러서 확장합니다.

기존 인증서를 확정 Expand
△ 기존 인증서를 확장하면서 대체할 것인지 묻는 화면

이후 redirect 옵션을 설정 후, Congratulation! 메시지가 보이면 마무리된 것입니다.

다시 새롭게 개설한 site2.mydomain.com 으로 접속해보면 안전한 사이트로 표시되는 것을 확인할 수 있습니다.

현재 인증서 목록을 보여달라고 했을 때 하나의 인증서만 있어야 덮어쓰기가 잘 된 것입니다.

sudo certbot certificates

8-2. 인증서 갱신

Let’s encrypt 에서 무료로 발급받은 인증서는 3개월이 만기입니다. 만료가 되기 전에 이메일로 보통 알려주는데요. 만기일 전에 갱신 작업이 필요합니다.

인증서를 갱신하려면 아래와 같이 입력하세요.

sudo certbot renew

아직 기간이 많이 남은 경우 갱신할 시기가 안 됐다는 메시지를 보입니다.

인증서 갱신 시기가 안 됨
△ 인증서 갱신 시기가 안 됨

갱신 기능 자체에는 문제가 없는지 시험삼아 돌려보는 건 가능한데, --dry-run 옵션을 추가하면 됩니다.

sudo certbot renew --dry-run

아래와 같이 시뮬레이션 돌렸는데 갱신 과정에 이상이 없었다는 걸 알 수 있습니다.

certbot renew --dry-run
△ certbot renew –dry-run

8-3. 인증서 자동 갱신 스크립트

3개월마다 서버에 접속해서 갱신을 하는 게 매우 귀찮은 일이기 때문에 보통 자동으로 갱신할 수 있도록 설정합니다. Crontab 을 사용해서 반복적으로 현재 인증서의 만료일을 확인하고 갱신이 필요한 경우에 갱신 작업을 할 수 있도록 시킬 수 있어요.

서버 시간 설정

지금 몇 시냐고 서버에게 물어봅니다.

date

UTC = 세계 표준시로 표시되고 있네요.

우분투 - 현재 시각 표시
△ 서버 현재 시각 표시

서울 시간대로 표시하도록 합시다.

sudo dpkg-reconfigure tzdata

아래와 같은 화면이 나오면

dpkg-reconfigure tzdata
△ 시간대 선택

화살표 키를 움직여 Asia > Seoul 시간대를 선택하고 엔터. 이제 서버의 현재 시각이 KST=한국표준시로 변경되었습니다.

서버 현재 시각을 아시아/서울로 설정
△ 서버 현재 시각을 아시아/서울로 설정

인증서 자동갱신 기능, 라이트세일 인스턴스 우분투 설치 배포판에 포함돼

Eff.org의 문서에 의하면 certbot 클라이언트를 다운로드 받을 때 많은 경우 자동 갱신 기능이 함께 담겨서 따라옵니다. Ubuntu 같은 리눅스 운영체제에서 시스템 패키지 매니저 apt 를 통해 Certbot을 설치한 경우에도 자동 갱신(automatic renwal) 기능이 같이 들어있어요. 우리는 이미 위에서 sudo add-apt-repository ppa:certbot/certbot 를 통해 Certbot을 설치한 바 있습니다.

자동 갱신 기능과 함께 배포되는 Certbot
△ 자동 갱신 기능과 함께 배포되는 Certbot (certbot.eff.org)

이미 내 시스템이 자동화를 하고 있는지 궁금하다면, 시스템 타이머를 체크해보면 좋은데요.

sudo systemctl list-timers certbot.timer

아래와 같이 certbot.timer 유닛이 certbot.service 를 활성화하는 작업을 5시간 34분 뒤에 실시할 예정임을 알 수 있습니다. LAST가 n/a인 것으로 보면 아직 시도한 적은 한 번도 없습니다.

systemctl list-timers certbot.timer
△ Certbot.timer

그리고 /etc/cron.d/cerbot 을 열어보면

sudo nano /etc/cron.d/certbot
/etc/cron.d/certbot
△ /etc/cron.d/certbot

스크립트를 보면 뒤에는 잘 모르겠고 … 앞 부분과 맨 뒤를 읽어보세요. 12시간마다 분침 0분 시점에 인증서 갱신(certbot renew)을 시도하도록 되어 있습니다.


0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && cerbot -q renew

systemd를 사용하여 cron을 구현하고 반복 갱신 작업을 하면 기존의 crontab 설정파일을 통하는 것보다 안정적이라고 합니다.

나오며 – 라이트세일 + 워드프레스 도전하십쇼!

이상으로 월 3~5달러에 아마존 라이트세일 통해 아주 넉넉한 성능과 용량을 제공하는 VPS – 가상사설서버 인스턴스를 임대하여, 원하는 수만큼 사이트를 만들 수 있도록 워드프레스 멀티사이트를 자동설치 프로그램의 도움 없이 구축하고, SSL 인증서까지 발급하는 방법을 알아보았습니다. 이런 작업을 태어나서 처음 해보는 분들 입장에서 써서 .. 너무 글이 뚱뚱해졌습니다…

게다가 저는 개발자가 아니라 용어 설명이 틀렸거나 어색한 곳이 많을텐데 지나가다가 아시는 분이 보시고 좀 고쳐주시면 좋겠네요. 하지만 저처럼 왕초보인 어떤 분에게는 도움이 되기를 바라면서 … 감사합니다.

(2020년 3월)