728x90
반응형

N8N Self-Hosting: Docker-compose 구성

Ubuntu에서 n8n을 Docker Compose를 사용해 셀프 호스팅하는 방법을 단계별로 자세히 설명하겠습니다. Docker Compose를 사용하면 n8n을 컨테이너화된 환경에서 쉽게 배포하고 관리할 수 있으며, 확장성과 유지보수가 용이합니다. 아래 가이드는 초보자도 따라 할 수 있도록 상세히 작성되었으며, systemd 대신 Docker Compose를 중심으로 설정합니다. 각 단계에는 필요한 명령어와 설정 파일을 포함합니다.


사전 요구 사항

시작하기 전에 다음 조건을 확인하세요:

  • 운영 체제: Ubuntu 20.04 LTS 또는 22.04 LTS (최신 LTS 버전 권장)
  • 권한: 루트 또는 sudo 권한이 있는 사용자 계정
  • 네트워크: SSH를 통해 서버에 접근 가능
  • 필수 소프트웨어:
    • Docker
    • Docker Compose
  • 포트: 기본적으로 n8n은 5678 포트를 사용하며, 외부 접근을 위해 방화벽에서 열어야 함
  • 선택 사항: 도메인 이름과 SSL/TLS 설정을 위한 Nginx 및 Certbot

1단계: 시스템 업데이트 및 Docker 설치

먼저, Ubuntu 시스템을 최신 상태로 유지하고 Docker 및 Docker Compose를 설치합니다.

  1. 시스템 업데이트:

    sudo apt update && sudo apt upgrade -y
    • 패키지 목록을 업데이트하고 시스템을 최신 상태로 유지합니다.
  2. Docker 설치:
    Docker 공식 저장소를 사용해 최신 버전을 설치합니다.

    sudo apt install -y curl
    curl -fsSL https://get.docker.com | sudo sh
    • 설치 후 Docker 버전 확인:
      docker --version
      예: Docker version 27.3.1 (2025년 5월 기준 최신 버전).
  3. Docker Compose 설치:
    Docker Compose는 별도로 설치합니다. 최신 버전을 다운로드합니다.

    sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    • 버전 확인:
      docker-compose --version
      예: Docker Compose version v2.29.2.
  4. 현재 사용자를 Docker 그룹에 추가:
    sudo 없이 Docker 명령어를 실행할 수 있도록 설정합니다.

    sudo usermod -aG docker $USER
    • 적용하려면 로그아웃 후 다시 로그인하거나 새 터미널 세션을 시작하세요.

2단계: Docker Compose 설정 파일 생성

n8n을 실행하기 위한 docker-compose.yml 파일을 작성합니다. 이 파일은 n8n 컨테이너와 필요 시 데이터베이스 컨테이너를 정의합니다.

  1. 작업 디렉토리 생성:

    mkdir ~/n8n && cd ~/n8n
  2. docker-compose.yml 파일 생성:

    nano docker-compose.yml

    아래 내용을 붙여넣습니다. 기본적으로 SQLite를 사용하며, 필요 시 PostgreSQL 설정을 추가로 설명하겠습니다.

    version: "3.8"
    services:
      n8n:
        image: n8nio/n8n:latest
        container_name: n8n
        ports:
          - "5678:5678"
        environment:
          - N8N_HOST=0.0.0.0
          - N8N_PORT=5678
          - N8N_PROTOCOL=http
          - N8N_BASIC_AUTH_ACTIVE=true
          - N8N_BASIC_AUTH_USER=your_username
          - N8N_BASIC_AUTH_PASSWORD=your_secure_password
          - WEBHOOK_URL=http://<your_server_ip_or_domain>:5678/
          - N8N_ENCRYPTION_KEY=your_secret_encryption_key
          - GENERIC_TIMEZONE=Asia/Seoul
        volumes:
          - n8n_data:/home/node/.n8n
        restart: always
        networks:
          - n8n_network
    
    volumes:
      n8n_data:
    
    networks:
      n8n_network:
        driver: bridge
    • 설명:
      • image: 최신 n8n 이미지를 사용.
      • ports: 호스트의 5678 포트를 컨테이너의 5678 포트에 매핑.
      • environment: n8n 설정을 위한 환경 변수.
        • N8N_BASIC_AUTH_*: 기본 인증 설정.
        • WEBHOOK_URL: 웹훅 호출을 위한 공용 URL. <your_server_ip_or_domain>을 서버 IP 또는 도메인으로 변경.
        • N8N_ENCRYPTION_KEY: 암호화 키(랜덤 문자열 권장, 예: openssl rand -base64 32로 생성).
        • GENERIC_TIMEZONE: 한국 시간대 Asia/Seoul.
      • volumes: n8n 설정과 워크플로우 데이터를 호스트에 영구 저장.
      • restart: always: 컨테이너가 실패 시 자동 재시작.
      • networks: 컨테이너 간 통신을 위한 브리지 네트워크.
    • 저장 후 파일 닫기: Ctrl+O, Enter, Ctrl+X.
  3. 디렉토리 권한 설정:
    볼륨 데이터를 저장할 디렉토리의 권한을 설정합니다.

    sudo chown -R $USER:$USER ~/n8n
    sudo chmod -R 755 ~/n8n

version: "3.8"
services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=0.0.0.0
      - N8N_PORT=5678
      - N8N_PROTOCOL=http
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=your_username
      - N8N_BASIC_AUTH_PASSWORD=your_secure_password
      - WEBHOOK_URL=http://<your_server_ip_or_domain>:5678/
      - N8N_ENCRYPTION_KEY=your_secret_encryption_key
      - GENERIC_TIMEZONE=Asia/Seoul
    volumes:
      - n8n_data:/home/node/.n8n
    restart: always
    networks:
      - n8n_network

volumes:
  n8n_data:

networks:
  n8n_network:
    driver: bridge

3단계: n8n 실행

Docker Compose를 사용해 n8n 컨테이너를 실행합니다.

  1. Docker Compose로 컨테이너 시작:

    docker-compose up -d
    • -d: 백그라운드에서 실행.
    • 실행 후 컨테이너 상태 확인:
      docker ps
      n8n 컨테이너가 Up 상태로 표시되어야 합니다.
  2. n8n 접속 테스트:
    브라우저에서 http://<서버_IP>:5678로 접속합니다.

    • 설정한 N8N_BASIC_AUTH_USERN8N_BASIC_AUTH_PASSWORD로 로그인.
    • n8n 워크플로우 편집 화면이 나타나면 성공.
  3. 로그 확인:
    문제가 발생하면 컨테이너 로그를 확인합니다:

    docker logs n8n

4단계: PostgreSQL 설정 (선택 사항)

기본적으로 n8n은 SQLite를 사용하지만, 프로덕션 환경에서는 PostgreSQL을 권장합니다. PostgreSQL을 추가하려면 docker-compose.yml을 수정합니다.

  1. 수정된 docker-compose.yml:

    nano docker-compose.yml

    아래와 같이 수정:

    version: "3.8"
    services:
      n8n:
        image: n8nio/n8n/latest
        container_name: n8n
        ports:
          - "5678:5678"
        environment:
          - N8N_HOST=0.0.0.0
          - N8N_PORT=5678
          - N8N_PROTOCOL=http
          - N8N_BASIC_AUTH_ACTIVE=true
          - N8N_BASIC_AUTH_USER=your_username
          - N8N_BASIC_AUTH_PASSWORD=your_secure_password
          - WEBHOOK_URL=http://<your_server_ip_or_domain>:5678/
          - N8N_ENCRYPTION_KEY=your_secret_encryption_key
          - GENERIC_TIMEZONE=Asia/Seoul
          - DB_TYPE=postgresdb
          - DB_POSTGRESDB_HOST=postgres
          - DB_POSTGRESDB_PORT=5432
          - DB_POSTGRESDB_DATABASE=n8n
          - DB_POSTGRESDB_USER=n8n_user
          - DB_POSTGRESDB_PASSWORD=your_db_password
        volumes:
          - n8n_data:/home/node/.n8n
        depends_on:
          - postgres
        restart: always
        networks:
          - n8n_network
    
      postgres:
        image: postgres:15
        container_name: n8n_postgres
        environment:
          - POSTGRES_USER=n8n_user
          - POSTGRES_PASSWORD=your_db_password
          - POSTGRES_DB=n8n
        volumes:
          - postgres_data:/var/lib/postgresql/data
        restart: always
        networks:
          - n8n_network
    
    volumes:
      n8n_data:
      postgres_data:
    
    networks:
      n8n_network:
        driver: bridge
    • 변경 사항:
      • postgres 서비스 추가.
      • DB_TYPE 및 PostgreSQL 관련 환경 변수 추가.
      • depends_on: n8n이 PostgreSQL 컨테이너에 의존하도록 설정.
      • postgres_data 볼륨 추가로 데이터베이스 데이터 영구 저장.
  2. 컨테이너 재시작:

    docker-compose down
    docker-compose up -d
  3. 데이터베이스 연결 확인:
    n8n 로그에서 PostgreSQL 연결 성공 여부를 확인:

    docker logs n8n

version: "3.8"
services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=0.0.0.0
      - N8N_PORT=5678
      - N8N_PROTOCOL=http
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=your_username
      - N8N_BASIC_AUTH_PASSWORD=your_secure_password
      - WEBHOOK_URL=http://<your_server_ip_or_domain>:5678/
      - N8N_ENCRYPTION_KEY=your_secret_encryption_key
      - GENERIC_TIMEZONE=Asia/Seoul
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n_user
      - DB_POSTGRESDB_PASSWORD=your_db_password
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      - postgres
    restart: always
    networks:
      - n8n_network

  postgres:
    image: postgres:15
    container_name: n8n_postgres
    environment:
      - POSTGRES_USER=n8n_user
      - POSTGRES_PASSWORD=your_db_password
      - POSTGRES_DB=n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data
    restart: always
    networks:
      - n8n_network

volumes:
  n8n_data:
  postgres_data:

networks:
  n8n_network:
    driver: bridge

5단계: 보안 및 추가 설정 (선택 사항)

n8n을 안전하게 운영하기 위해 추가 설정을 적용합니다.

  1. 방화벽 설정:
    UFW를 사용해 필요한 포트만 엽니다:

    sudo apt install ufw -y
    sudo ufw allow 22
    sudo ufw allow 5678
    sudo ufw enable
    • SSH(22)와 n8n(5678) 포트를 허용.
    • HTTPS를 사용할 경우 443 포트를 추가로 엽니다.
  2. SSL/TLS 설정 (Nginx + Certbot):
    HTTPS를 위해 Nginx를 리버스 프록시로 설정합니다.

    • Nginx 설치:

      sudo apt install nginx -y
    • Nginx 설정 파일 생성:

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

      아래 내용을 추가(도메인 이름은 your_domain.com으로 변경):

      server {
          listen 80;
          server_name your_domain.com;
      
          location / {
              proxy_pass http://localhost:5678;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto $scheme;
          }
      }
      • 설정 활성화:
        sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
        sudo nginx -t
        sudo systemctl restart nginx
    • Certbot으로 SSL 설정:

      sudo apt install certbot python3-certbot-nginx -y
      sudo certbot --nginx -d your_domain.com
      • Certbot이 자동으로 Nginx 설정을 HTTPS로 업데이트합니다.
      • docker-compose.yml 업데이트:
        nano docker-compose.yml
        N8N_PROTOCOL=httpN8N_PROTOCOL=https로, WEBHOOK_URLhttps://your_domain.com/로 수정.
      • 컨테이너 재시작:
        docker-compose down
        docker-compose up -d

6단계: 유지보수 및 업데이트

  1. n8n 업데이트:
    최신 n8n 이미지를 사용하려면:

    docker-compose down
    docker-compose pull
    docker-compose up -d
  2. 데이터 백업:
    n8n 데이터와 PostgreSQL 데이터를 백업합니다:

    tar -czf n8n_backup_$(date +%F).tar.gz ~/n8n
    docker exec n8n_postgres pg_dump -U n8n_user n8n > n8n_db_backup_$(date +%F).sql
  3. 로그 확인:

    docker logs n8n
    docker logs n8n_postgres

7단계: 최종 확인

  • 브라우저에서 http://<서버_IP>:5678 또는 https://your_domain.com에 접속해 n8n이 정상 작동하는지 확인.
  • 워크플로우 생성 및 테스트로 기능 점검.
  • 방화벽 및 인증 설정 확인.

참고 자료


마무리

이 가이드를 통해 Docker Compose를 사용하여 n8n을 Ubuntu 환경에서 성공적으로 설치하고 설정하는 방법을 배웠습니다. 추가적인 보안 설정과 데이터베이스 설정을 통해 프로덕션 환경에서도 안정적으로 운영할 수 있습니다. 지속적인 업데이트와 유지보수를 통해 n8n의 최신 기능과 보안 패치를 적용하세요.


Keywords

n8n, Docker, Docker Compose, Workflow Automation, PostgreSQL, 워크플로우 자동화, 도커, 환경 변수, 보안 설정, 데이터베이스

728x90
반응형

+ Recent posts