Ghost 블로그 설치: 포테이너 스택으로 10분 만에 끝내기

안녕하세요, Mark입니다.

지난 편에서 도메인 연결까지 마쳤으니, 이제 드디어 실제 서비스를 올릴 차례입니다. 첫 번째 주인공은 Ghost 블로그입니다.

솔직히 말하면… 생각보다 너무 빨리 끝나서 좀 허무했습니다. ㅎㅎ 그동안 도커, 포테이너, NPM을 열심히 깔아둔 덕분인지, 이제는 설치가 정말 뚝딱이더라고요.


👻 Ghost가 뭔가요?

Ghost는 블로그와 뉴스레터에 특화된 오픈소스 CMS(콘텐츠 관리 시스템)입니다. 워드프레스보다 훨씬 가볍고 깔끔한 디자인이 특징이에요. 글 쓰는 것 자체에 집중할 수 있는 에디터가 특히 마음에 듭니다.


📦 1단계: 포테이너 스택으로 설치하기

포테이너 접속 후 Stacks → Add Stack으로 이동합니다.

스택 이름을 ghost 정도로 입력하고, 아래 내용을 Web editor에 붙여넣습니다.

yaml

version: '3.1'

services:
ghost:
image: ghost:latest
restart: always
ports:
- 2368:2368
dns:
- 8.8.8.8
environment:
# 기본 설정
url: https://your-domain.com
database__client: mysql
database__connection__host: db
database__connection__user: root
database__connection__password: [DB_PASSWORD]
database__connection__database: ghost
NODE_ENV: production

# 메일 설정 (Gmail SMTP)
mail__transport: SMTP
mail__options__service: Gmail
mail__options__host: smtp.gmail.com
mail__options__port: 587
mail__options__secure: "false"
mail__options__auth__user: [YOUR_GMAIL]
mail__options__auth__pass: [GMAIL_APP_PASSWORD]
mail__from: [YOUR_GMAIL]

volumes:
- /home/ubuntu/ghost/content:/var/lib/ghost/content

db:
image: mysql:8.0
restart: always
environment:
MYSQL_ROOT_PASSWORD: [DB_PASSWORD]
volumes:
- /home/ubuntu/ghost/db:/var/lib/mysql
version: '3.1'

services:
  ghost:
    image: ghost:latest
    restart: always
    ports:
      - 2368:2368
    dns:
      - 8.8.8.8
    environment:
      # 기본 설정
      url: https://your-domain.com
      database__client: mysql
      database__connection__host: db
      database__connection__user: root
      database__connection__password: [DB_PASSWORD]
      database__connection__database: ghost
      NODE_ENV: production
      
      # 메일 설정 (Gmail SMTP)
      mail__transport: SMTP
      mail__options__service: Gmail
      mail__options__host: smtp.gmail.com
      mail__options__port: 587
      mail__options__secure: "false"
      mail__options__auth__user: [YOUR_GMAIL]
      mail__options__auth__pass: [GMAIL_APP_PASSWORD]
      mail__from: [YOUR_GMAIL]
      
    volumes:
      - /home/ubuntu/ghost/content:/var/lib/ghost/content

  db:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: [DB_PASSWORD]
    volumes:
      - /home/ubuntu/ghost/db:/var/lib/mysql

각 항목 설명

항목설명
url내 도메인 주소 입력 (https 포함)
2368:2368외부 포트:내부 포트.
database__connection__passwordMySQL 비밀번호, 본인이 원하는 걸로 설정
mail__options__auth__passGmail 앱 비밀번호 (일반 비밀번호 아님!)
volumesGhost 데이터와 DB를 서버에 저장하는 경로

⚠️ Gmail 앱 비밀번호란? Gmail 계정의 일반 로그인 비밀번호가 아닙니다. Google 계정 보안 설정에서 2단계 인증 활성화 후 앱 비밀번호를 별도로 발급받아야 합니다. 이 부분은 처음에 좀 헷갈릴 수 있으니 주의하세요.

⚠️ 왜 메일 설정을 꼭 해야 하나요? Ghost는 설치 후 관리자 계정을 이메일로 인증합니다. 메일 설정 없이 설치하면 나중에 접속 자체가 안 되는 황당한 상황이 벌어질 수 있습니다. (저도 이 부분에서 한 번 당했습니다… ㅎㅎ)

내용을 붙여넣고 Deploy the Stack 버튼을 클릭합니다. 잠시 후 Ghost와 MySQL이 함께 설치됩니다.


🔒 2단계: NPM에서 도메인 연결 + SSL 인증서 발급

Ghost가 설치됐으니 이제 도메인을 연결하고 HTTPS를 붙여줄 차례입니다.

NPM 접속(http://서버IP:81) → Proxy Hosts → Add Proxy Host

항목입력값
Domain Namesyour-domain.com
Schemehttp
Forward Hostname서버 IP 또는 ghost (컨테이너명)
Forward Port2368
Block Common Exploits✅ 체크

입력 후 SSL 탭으로 이동해서:

  • SSL CertificateRequest a new SSL Certificate 선택
  • Force SSL ✅ 체크
  • I Agree to the Let’s Encrypt Terms of Service ✅ 체크
  • Save 클릭

잠시 기다리면 Let’s Encrypt 인증서가 자동으로 발급됩니다. 이제 브라우저 주소창에 🔒 자물쇠가 생겼습니다!

💡 예전에 SSL 인증서 값만 3만 5천 원을 냈던 기억이 떠오르는 순간입니다. 지금은 버튼 몇 번으로 무료 인증서가 뚝딱이에요. ㅎㅎ


🌐 3단계: Ghost 접속 및 관리자 계정 설정

이제 브라우저에서 도메인으로 접속해봅니다.

https://your-domain.com
https://your-domain.com

Ghost 기본 화면이 뜨면 성공입니다! 🎉

관리자 페이지는 아래 주소로 접속합니다.

https://your-domain.com/ghost
https://your-domain.com/ghost

처음 접속하면 관리자 계정 생성 화면이 나옵니다.

  1. 사이트 명, 이름, 이메일, 비밀번호 입력
  2. Create your account 클릭
  3. 입력한 이메일로 사이트 생성 완료 메일 발송
  4. 메일주소와 이 때 입력한 비밀번호가 고스트 접속 비밀번호가 됨.
  5. Ghost 대시보드 입장! 🎉

✅ 핵심 요약

단계내용
1단계포테이너 스택으로 Ghost + MySQL 설치
2단계NPM에서 도메인 연결 + Let’s Encrypt SSL 발급
3단계관리자 페이지 접속 후 계정 생성 및 로그인

마치며

도커, 포테이너, NPM을 미리 깔아둔 덕분에 Ghost 설치 자체는 정말 금방 끝났습니다. 스택 명령어 붙여넣고, NPM에서 도메인 연결하고, 관리자 계정 만들면 끝이에요.


Mark의 한마디: “메일 설정, 귀찮다고 건너뛰지 마세요. 저처럼 1주일 뒤에 접속이 안 돼서 멘붕 오고 싶지 않다면요. ㅎㅎ 스택 명령어에 메일 설정까지 한 번에 넣어두는 게 정답입니다.”

댓글 남기기