[Self-Hosted] 개인 블로그 Ghost를 설치해보자 (feat. Mailgun)
![[Self-Hosted] 개인 블로그 Ghost를 설치해보자 (feat. Mailgun)](/content/images/size/w2000/2025/04/ghost.png)
멋진 블로그가 가지고 싶어서 찾아보니 Ghost가 마음에 들어서 설치해보기로 했다.
설치 환경
- Synology DS220+ (DSM 7.2.2-72806 Update 3)
- Docker Engine 24.0.2
- Docker Compose 2.29.6
- Cloudflare Domain
공식적인 필수 조건은 아래와 같다.
- Ubuntu 20.04 or Ubuntu 22.04
- NGINX (minimum of 1.9.5 for SSL)
- A supported version of Node.js
- MySQL 8
- Systemd
- A server with at least 1GB memory
- A registered domain name
개인 도메인이 필요하다.
Ghost 설치하기
아래 공식 문서에 들어가서 Installation steps을 누르자.
Docker가 편해서 Docker Compose로 설치하기로 했다.

How to install Ghost with Docker
compose.yml 작성하기
volumes:
ghost_data:
name: ghost_data
mysql_data:
name: mysql_data
services:
ghost:
image: 'ghost:5-alpine'
container_name: ghost
hostname: ghost
restart: always
volumes:
- ghost_data:/var/lib/ghost/content
- ./config.production.json:/var/lib/ghost/config.production.json
environment:
- TZ=Asia/Seoul
- database__client=mysql
- database__connection__host=ghost-mysql
- database__connection__user=root
- database__connection__password=비밀번호
- database__connection__database=ghost
- url=https://도메인.com
# - NODE_ENV=development
depends_on:
- ghost-mysql
ghost-mysql:
image: 'mysql:8.0'
container_name: ghost-mysql
hostname: ghost-mysql
restart: always
volumes:
- mysql_data:/var/lib/mysql
environment:
- TZ=Asia/Seoul
- MYSQL_ROOT_PASSWORD=루트비밀번호
compose.yml
공식 문서와 유저 정보를 참고하여 사용 환경에 맞게 수정했다.
도메인과 비밀번호를 수정해주자.
필요하다면 본인 환경에 따라 수정해서 사용하면 된다.
compose.yml
config.production.json 작성하기
{
"url": "https://도메인.com",
"server": {
"host": "0.0.0.0",
"port": 2368
},
"database": {
"client": "mysql",
"connection": {
"host": "ghost-mysql",
"port": 3306,
"user": "root",
"password": "비밀번호",
"database": "ghost"
}
},
"mail": {
"from": "'Acme Support' <[email protected]>",
"transport": "SMTP",
"options": {
"service": "Mailgun",
"host": "smtp.mailgun.org",
"port": 587,
"requireTLS": true,
"secure": false,
"auth": {
"user": "[email protected]",
"pass": "1234567890"
}
}
},
"logging": {
"transports": ["file", "stdout"]
}
}
config.production.json
같은 위치에 config.production.json
을 생성하고 위 내용을 작성한 다음에 도메인과 비밀번호를 수정하자. Mailgun을 설정한 다음에는 "user"
와 "pass"
도 수정해야 한다.
config.production.json
Mailgun 설정하기

블로그에 로그인을 하거나 뉴스레터를 보낼 때 필요한 메일을 설정해야 한다.
메일건 사이트에 접속해서 회원가입을 진행한 다음에 로그인을 하면 대시보드에 접속할 수 있다.
도메인 추가하기


왼쪽에 Send > Sending 아래 Domain으로 들어가서 오른쪽 위에 Add New Domain을 누르자.

Domain name*에 자신의 도메인을 입력하고 Add Domain을 누르자.
도메인이 제대로 추가되었다면, 도메인을 눌러 설정창으로 접속하자.
DNS 레코드 설정하기
DNS records 창으로 가서 도메인 레코드를 설정해야 한다.
클라우드플레어를 사용하므로 클라우드플레어 대시보드를 기준으로 작성한다.


유형을 고르고 Host (name)를 이름에, Value (points to)를 콘텐츠에 넣는다.


유형을 고르고 Host (name)를 이름에, Value (points to)를 메일 서버에, Priority를 우선 순위에 넣는다.


유형을 고르고 Host (name)를 이름에, Value (points to)를 대상에 입력하고, 프록시 상태는 DNS 전용으로 설정한다.
Routes 설정하기
개인 도메인 메일로 메일을 보냈을 때 자신의 지메일이나 네이버로 받고 싶다면 Routes 설정을 해야 한다.


Create route를 눌러서 Forward를 체크하고 평소 사용하는 지메일이나 네이버 메일 주소를 적는다.
SMTP credentials 설정하기

SMTP credentials 창으로 가면 SMTP user 목록이 있다.
기본적으로 postmaster가 있고, 원하는 이름으로 새로 추가할 수도 있다.
사용할 유저의 Reset Password를 누른 다음 비밀번호를 잘 저장해두자.
Setup으로 가면 postmaster의 현재 비밀번호를 확인할 수 있다.
Google 다른 주소에서 메일 보내기
다른 사람에게 메일을 보낼 때 지메일이 아니라 개인 도메인으로 메일을 보내려면 설정해야 한다.



다른 이메일 주소 추가
를 누르고 이름과 원하는ID@도메인.com
을 입력한 다음에 SMTP credentials에서 설정했던 아이디와 비밀번호를 입력하면 된다.
config.production.json 수정하기
"mail": {
"from": "'Acme Support' <[email protected]>",
"transport": "SMTP",
"options": {
"service": "Mailgun",
"host": "smtp.mailgun.org",
"port": 587,
"requireTLS": true,
"secure": false,
"auth": {
"user": "[email protected]",
"pass": "1234567890"
}
}
}
config.production.json
"user"
에 설정한 유저를 입력하고 "pass"
에는 저장해둔 비밀번호를 입력하자. "from"
도 원하는 문구로 설정하면 된다.
클라우드플레어 DNS 프록시를 사용하지 않거나 DNS 네임 서버만 사용한다면, "requireTLS": true
를 지우고 "secure": false
를 true
로 바꾸자
DNS 전용으로 쓸 때는 잘 되다가 프록시를 사용하니 안되길래 검색을 해보니까 인증서 문제로 requireTLS를 설정해야 정상 작동했다.

실행하기
모든 준비가 끝났다 이제 정상 작동하는 지 확인하자.
먼저 compose.yml을 실행하자
docker compose up -d
MySQL 연결이 준비가 안 된 상태에서는 Ghost 컨테이너가 계속 꺼지고 켜지고 반복한다. 처음 설치할 때는 이걸 몰라서 검색해보고 여러 번 삭제했었다...
DB 준비가 되면 Ghost 컨테이너와 MySQL 컨테이너가 연결이 되고 Ghost 컨테이너가 테이블을 생성하기 시작한다.
테이블 생성은 10분 넘게 걸렸다.
로그에 접속할 준비가 됐다고 뜨면, 설정했던 도메인으로 접속하자!
관리자 화면은 https://도메인.com/ghost
로 접속하면 된다.
Ghost에서 Mailgun API 추가하기


API Security로 들어가서 새로운 API Key를 생성한 다음에

고스트 어드민 페이지로 들어가서 메일건 API를 추가하면 된다.