N8N Self-Hosting: Docker-compose 구성
- 사전 요구 사항
- 1단계: 시스템 업데이트 및 Docker 설치
- 2단계: Docker Compose 설정 파일 생성
- 3단계: n8n 실행
- 4단계: PostgreSQL 설정 (선택 사항)
- 5단계: 보안 및 추가 설정 (선택 사항)
- 6단계: 유지보수 및 업데이트
- 7단계: 최종 확인
- 참고 자료
- 마무리
- Keywords
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를 설치합니다.
시스템 업데이트:
sudo apt update && sudo apt upgrade -y
- 패키지 목록을 업데이트하고 시스템을 최신 상태로 유지합니다.
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월 기준 최신 버전).
- 설치 후 Docker 버전 확인:
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
.
- 버전 확인:
현재 사용자를 Docker 그룹에 추가:
sudo 없이 Docker 명령어를 실행할 수 있도록 설정합니다.sudo usermod -aG docker $USER
- 적용하려면 로그아웃 후 다시 로그인하거나 새 터미널 세션을 시작하세요.
2단계: Docker Compose 설정 파일 생성
n8n을 실행하기 위한 docker-compose.yml
파일을 작성합니다. 이 파일은 n8n 컨테이너와 필요 시 데이터베이스 컨테이너를 정의합니다.
작업 디렉토리 생성:
mkdir ~/n8n && cd ~/n8n
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
.
- 설명:
디렉토리 권한 설정:
볼륨 데이터를 저장할 디렉토리의 권한을 설정합니다.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 컨테이너를 실행합니다.
Docker Compose로 컨테이너 시작:
docker-compose up -d
-d
: 백그라운드에서 실행.- 실행 후 컨테이너 상태 확인:
docker ps
n8n
컨테이너가Up
상태로 표시되어야 합니다.
n8n 접속 테스트:
브라우저에서http://<서버_IP>:5678
로 접속합니다.- 설정한
N8N_BASIC_AUTH_USER
와N8N_BASIC_AUTH_PASSWORD
로 로그인. - n8n 워크플로우 편집 화면이 나타나면 성공.
- 설정한
로그 확인:
문제가 발생하면 컨테이너 로그를 확인합니다:docker logs n8n
4단계: PostgreSQL 설정 (선택 사항)
기본적으로 n8n은 SQLite를 사용하지만, 프로덕션 환경에서는 PostgreSQL을 권장합니다. PostgreSQL을 추가하려면 docker-compose.yml
을 수정합니다.
수정된 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
볼륨 추가로 데이터베이스 데이터 영구 저장.
- 변경 사항:
컨테이너 재시작:
docker-compose down docker-compose up -d
데이터베이스 연결 확인:
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을 안전하게 운영하기 위해 추가 설정을 적용합니다.
방화벽 설정:
UFW를 사용해 필요한 포트만 엽니다:sudo apt install ufw -y sudo ufw allow 22 sudo ufw allow 5678 sudo ufw enable
- SSH(22)와 n8n(5678) 포트를 허용.
- HTTPS를 사용할 경우 443 포트를 추가로 엽니다.
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=http
를N8N_PROTOCOL=https
로,WEBHOOK_URL
을https://your_domain.com/
로 수정.- 컨테이너 재시작:
docker-compose down docker-compose up -d
6단계: 유지보수 및 업데이트
n8n 업데이트:
최신 n8n 이미지를 사용하려면:docker-compose down docker-compose pull docker-compose up -d
데이터 백업:
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
로그 확인:
docker logs n8n docker logs n8n_postgres
7단계: 최종 확인
- 브라우저에서
http://<서버_IP>:5678
또는https://your_domain.com
에 접속해 n8n이 정상 작동하는지 확인. - 워크플로우 생성 및 테스트로 기능 점검.
- 방화벽 및 인증 설정 확인.
참고 자료
- n8n 공식 문서: https://docs.n8n.io
- Docker Compose 문서: https://docs.docker.com/compose
- Nginx 및 Certbot 설정: https://certbot.eff.org
마무리
이 가이드를 통해 Docker Compose를 사용하여 n8n을 Ubuntu 환경에서 성공적으로 설치하고 설정하는 방법을 배웠습니다. 추가적인 보안 설정과 데이터베이스 설정을 통해 프로덕션 환경에서도 안정적으로 운영할 수 있습니다. 지속적인 업데이트와 유지보수를 통해 n8n의 최신 기능과 보안 패치를 적용하세요.
Keywords
n8n, Docker, Docker Compose, Workflow Automation, PostgreSQL, 워크플로우 자동화, 도커, 환경 변수, 보안 설정, 데이터베이스
'IT Best Practise > N8N' 카테고리의 다른 글
N8N Self-Hosting: NPM + Systemd 구성 (3) | 2025.06.10 |
---|---|
n8n 워크플로우 오류 모니터링: 실시간 에러 감지 및 알림 시스템 구축 (0) | 2025.06.10 |
n8n 워크플로우 보고서 생성: 데이터 통합과 자동화 보고 시스템 구축 (0) | 2025.06.10 |
데이터 병합 워크플로우: 외부 API를 활용한 정보 보강 자동화 (1) | 2025.06.10 |
비즈니스 워크플로우 자동화: 데이터 기반 업무 프로세스의 혁신 (0) | 2025.06.10 |