DigitalOcean에서 직접 구축하는 n8n 자동화 플랫폼: 초보자도 가능한 클라우드 워크플로우 구축기

소개

워크플로우 자동화 도구 n8n을 클라우드 서비스로 저렴하게 직접 호스팅해보고 싶었습니다. n8n의 공식 클라우드 서비스는 월 €24(약 38,500원)부터 시작하는데, 개인 사용자로서는 부담스러운 가격이었습니다. DigitalOcean의 가장 저렴한 Droplet($7/월)(약 13,000원)을 이용해 자체 호스팅하면 비용을 크게 절감하면서도 자동화 워크플로우의 모든 기능을 활용할 수 있을 것으로 판단했습니다. Docker와 Caddy를 이용한 설정으로 보안까지 갖춘 환경을 구축하고자 했습니다.

진행 방법

사용 도구

  • 클라우드 서비스: DigitalOcean Droplet (1vCPU, 1GB RAM, Ubuntu 22.04)

  • 컨테이너 기술: Docker 및 Docker Compose

  • 웹 서버: Caddy (자동 HTTPS 설정용)

  • 워크플로우 도구: n8n 최신 LTS 버전

구축 과정

1. DigitalOcean Droplet 생성

DigitalOcean에 가입하고 가장 기본적인 Droplet을 생성했습니다. 지역은 한국에서 사용할 것이기 때문에 싱가포르 데이터센터를 선택하고, Basic 플랜의 $7/월 요금제(1GB RAM, 1 CPU)를 선택했습니다.

비행 가격 책정 페이지의 스크린 샷

2. 서버 초기 설정

서버에 SSH로 접속한 후 기본 패키지를 업데이트했습니다.

apt update && apt upgrade -y

3. Docker 및 Docker Compose 설치

# Docker 설치
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

# Docker Compose 설치
apt install -y docker-compose

4. n8n 배포를 위한 디렉토리 및 설정 파일 생성

# n8n 디렉토리 생성
mkdir -p /opt/n8n
cd /opt/n8n

# 데이터 저장용 디렉토리 생성
mkdir -p data caddy_data caddy_config

5. Docker Compose 설정 파일 작성

version: '3'

services:
  n8n:
    image: n8nio/n8n:latest
    restart: always
    ports:
      - "5678:5678"
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=[유저네임생략]
      - N8N_BASIC_AUTH_PASSWORD=[패스워드생략]
      - NODE_ENV=production
      - N8N_SECURE_COOKIE=false
      - N8N_PROTOCOL=http
      - N8N_HOST=[ip주소생략]
      - N8N_PORT=5678
      - N8N_WEBHOOK_URL=http://[ip주소생략]:5678/
    volumes:
      - ./data:/home/node/.n8n
    user: "1000:1000"
    
  caddy:
    image: caddy:2
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./caddy_data:/data
      - ./caddy_config:/config

6. Caddy 설정 파일 생성

# Caddyfile 작성
echo ":80 {
  reverse_proxy n8n:5678
}" > Caddyfile

7. 서비스 시작 및 문제 해결

처음에는 권한 문제로 서비스가 시작되지 않았습니다:

docker-compose up -d
docker-compose ps  # 상태 확인

로그를 확인해보니 데이터 디렉토리에 접근 권한 문제가 있었습니다:

docker-compose logs n8n

권한 문제를 해결하기 위해 데이터 디렉토리의 권한을 수정했습니다:

chmod -R 777 /opt/n8n/data
docker-compose down
docker-compose up -d

결과와 배운 점

성공적인 배포

n8n이 성공적으로 배포되어 http://[ip주소생략]:5678에서 접속할 수 있게 되었습니다. 관리자 계정으로 로그인하여 워크플로우를 생성하고 자동화 작업을 설정할 수 있게 되었습니다.

배운 점과 꿀팁

  1. Docker 권한 관리의 중요성: Docker 컨테이너의 권한 문제가 발생했을 때, 로그를 확인하고 적절한 권한 설정(user: "1000:1000" 및 볼륨 권한 조정)으로 해결할 수 있었습니다.

  2. 환경 변수의 중요성: n8n은 다양한 환경 변수로 설정할 수 있으며, 특히 N8N_SECURE_COOKIE, N8N_PROTOCOL, N8N_HOST 등의 설정이 중요합니다.

  3. 비용 절감: 공식 클라우드 서비스(€24/월) 대비 자체 호스팅 비용이 약 65% 정도 절감되었습니다($7/월).

시행착오

  1. 이미지 이름 문제: 처음에 n8n/n8n:latest라는 잘못된 이미지 이름을 사용하여 manifest unknown 오류가 발생했습니다. 정확한 이미지 이름인 n8nio/n8n:latest를 사용하니 해결되었습니다.

  2. 보안 쿠키 문제: HTTP로 접속할 때 "secure cookie" 관련 경고가 나타났습니다. N8N_SECURE_COOKIE=false 설정으로 해결했습니다만, 프로덕션 환경에서는 HTTPS를 설정하는 것이 더 안전합니다.

  3. 권한 설정 문제: 데이터 디렉토리에 대한 권한 문제로 n8n이 설정 파일에 접근하지 못하는 상황이 발생했습니다. chmod -R 777 /opt/n8n/data 명령으로 임시 해결했지만, 실제 프로덕션 환경에서는 더 세밀한 권한 설정이 필요합니다.

앞으로의 계획

  1. 도메인 연결 및 HTTPS 설정: 현재는 IP 주소로 접속 중이지만, 도메인을 구매하여 연결하고 Caddy를 통해 자동으로 HTTPS를 설정할 계획입니다.

  2. 백업 자동화: 중요 워크플로우와 데이터를 자동으로 백업하는 시스템을 구축할 예정입니다.

  3. 모니터링 강화: 서버와 n8n 상태를 모니터링하고 알림을 받을 수 있는 시스템을 추가할 계획입니다.

도움 받은 글


이 글이 n8n을 자체 호스팅하려는 다른 분들께 도움이 되길 바랍니다. 추가 질문이나 도움이 필요하시면 댓글로 남겨주세요!

1
1개의 답글

👉 이 게시글도 읽어보세요