Docker를 이용해 AWS Lightsail에 Ghost5 설치

AWS Lightsail에 docker를 이용해 싸게, 그리고 쉽고 빠르게 Ghost 블로그 개설 방법을 설명한다.

Docker를 이용해 AWS Lightsail에 Ghost5 설치
Photo by Tandem X Visuals / Unsplash

이번이 도대체 몇 번의 블로그 시작일까? 업무에 바쁘다는 이유로 삶에 바쁘다는 이유로 여러 차례 블로그를 열고 닫기를 반복했다. 과연 이번에는 다를까나?

아무튼, 이번 블로그는 AWS Lightsail을 이용하여 Ghost 기반 블로그 작성으로 결정하였다. 블로그 개설까지 절차를 기록으로 남겨둔다.

AWS Lightsail 인스턴스 준비

aws lightsail 인스턴스 만들기

https://lightsail.aws.amazon.com/에서 Instance location은 한국, Linux, Ubuntu 20.04 LTS, $5 플랜을 선택하여 인스턴스를 생성한다.

https 방화벽 허용 설정

생성된 인스턴스에 https 방화벽 허용 설정을 해준다.

  1. 생성된 인스턴스 선택
  2. networking 탭 선택
  3. IPv4 Firewall 항목에서 Add rule 클릭
  4. Application 항목에서 HTTPS 선택
  5. Create 클릭하여 규칙 생성

Ghost 설치

공부도 할 겸 그리고 간편하기도 하니까~ docker를 이용해 ghost를 설치했다. 뭐, 내 업무에서 docker를 사용할 일이 있을까 싶지만 재미있을 것 같아서, ...

아래 .env 파일과 docker-compose.yaml은 https://seongjin.me/upgrade-to-ghost-v5-with-mysql-8-in-docker-compose/ 에서 찾은 자료이다. 해당 페이지에서 관련 항목에 대한 상세한 설명을 제공한다.

.env 파일과 docker-compose.yaml 파일을 인스턴스에 생성한 후(당연히 url 정보와 비밀번호는 상황에 알맞게 채워 넣어야 한다) 파일이 위치한 디렉터리에서 sudo docker compose up -d 명령을 이용해 ghost를 실행한다.

약 3분 후 설정한 url로 접속하여 ghost의 화면이 뜨면 설치 성공이다.

.env

# .env file for compose.yaml
# ENVs for Ghost service
GHOST_VIRTUAL_HOST=exmaple.com,www.example.com
GHOST_VIRTUAL_PORT=2368
GHOST_LETSENCRYPT_HOST=example.com
GHOST_LETSENCRYPT_EMAIL=master@example.com
GHOST_DB_CLIENT=mysql
GHOST_DB_HOST=db
GHOST_DB_PORT=3306
GHOST_URL=https://exmaple.com

# ENVs for DB service(MySQL)
MYSQL_ROOT_PASSWORD=<비밀번호>
MYSQL_USER=ghost
MYSQL_PASSWORD=<비밀번호>
MYSQL_DATABASE=ghost

# ENVs for Acme-companion service
NGINX_PROXY_CONTAINER=nginx-proxy

docker-compose.yaml

version: '3.9'

services:
  nginx-proxy:
    image: nginxproxy/nginx-proxy
    container_name: nginx-proxy
    ports:
      - 80:80
      - 443:443
    restart: unless-stopped
    volumes:
      - conf:/etc/nginx/conf.d
      - certs:/etc/nginx/certs:ro
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro

  nginx-proxy-acme:
    image: nginxproxy/acme-companion
    container_name: nginx-proxy-acme
    depends_on:
      - nginx-proxy
    restart: unless-stopped
    environment:
      NGINX_PROXY_CONTAINER: ${NGINX_PROXY_CONTAINER}
    volumes:
      - certs:/etc/nginx/certs:rw
      - acme:/etc/acme.sh
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - /var/run/docker.sock:/var/run/docker.sock:ro

  ghost:
    image: ghost:5
    container_name: ghost
    depends_on:
      - nginx-proxy
      - nginx-proxy-acme
      - db
    restart: unless-stopped
    ports:
      - 8080:2368
    environment:
      VIRTUAL_HOST: ${GHOST_VIRTUAL_HOST}
      VIRTUAL_PORT: ${GHOST_VIRTUAL_PORT}
      LETSENCRYPT_HOST: ${GHOST_LETSENCRYPT_HOST}
      LETSENCRYPT_EMAIL: ${GHOST_LETSENCRYPT_EMAIL}
      database__client: ${GHOST_DB_CLIENT}
      database__connection__host: ${GHOST_DB_HOST}
      database__connection__port: ${GHOST_DB_PORT}
      database__connection__user: ${MYSQL_USER}
      database__connection__password: ${MYSQL_PASSWORD}
      database__connection__database: ${MYSQL_DATABASE}
      url: ${GHOST_URL}
    volumes:
      - ghost-data:/var/lib/ghost/content
      - ghost-ver:/var/lib/ghost/versions

  db:
    image: mysql:8
    container_name: db
    depends_on:
      - nginx-proxy
      - nginx-proxy-acme
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
    volumes:
      - db-data:/var/lib/mysql
      - ghost-ver:/var/lib/ghost/versions

volumes:
  conf:
  certs:
  vhost:
  html:
  acme:
  ghost-data:
  ghost-ver:
  db-data:

Git Hub의 스크립트 및 파일 사용

docker, ghost 설치 관련하여 스크립트 및 yaml 파일 정리하여 아래 github에 올려두었다. 나중에 참고하자~

GitHub - ironicarori/docker_ghost
Contribute to ironicarori/docker_ghost development by creating an account on GitHub.

업데이트 내역

  1. 2022/10/15: 한글 URL 적용을 위한 ghost versions을 docker 볼륨으로 변경
  2. 2022/09/13: 기본 가이드 작성

참고 자료

  1. https://seongjin.me/upgrade-to-ghost-v5-with-mysql-8-in-docker-compose/