소개
n8n은 현재 사용 가능한 가장 강력한 오픈소스 워크플로우 자동화 도구 중 하나입니다. Zapier나 Make와 같은 SaaS 대안과 달리, n8n은 데이터와 자동화 프로세스에 대한 완전한 제어권을 제공합니다. 단, 직접 호스팅할 때에만 가능합니다. 리눅스 VPS는 이를 위한 이상적인 환경입니다. 항상 가동되며, 비용 효율적이며, 완전히 사용자가 제어할 수 있기 때문입니다.
이 가이드는 리눅 스 VPS에 생산 환경에 적합한 자체 호스팅 n8n 인스턴스를 설정하는 전체 과정을 단계별로 안내합니다. 빈 서버에서 시작하여 Docker, Nginx, PostgreSQL, 자동 백업, 강화된 보안 구성을 갖춘 완전히 보안이 확보된 SSL 지원 n8n 배포 환경을 구축하게 될 것입니다.
주요 내용
- VPS에서 n8n을 사용하면 무제한 워크플로우, 사용량 제한 없음, 완전한 데이터 소유권을 누릴 수 있습니다
- 업데이트 및 격리가 용이하도록 Docker를 설치 방법으로 권장합니다
- 프로덕션 워크로드에는 PostgreSQL을 권장합니다(SQLite는 아님).
- 프로덕션 환경에서는 Let’s Encrypt SSL이 적용된 리버스 프록시(Nginx)가 필수입니다
- PostgreSQL을 사용하여 n8n을 원활하게 사용하려면 VPS에 최소 1개의 vCPU와 2GB RAM이 있어야 합니다
- 정기적인 자동 백업은 워크플로우 데이터와 인증 정보를 안전하게 보호합니다
n8n이란 무엇인가요?
n8n(‘엔-에이트-엔’으로 발음)은 시각적인 노드 기반 편집기를 사용하여 앱, API 및 서비스를 연결할 수 있는 소스 코드가 공개된 워크플로우 자동화 플랫폼입니다. 기본적으로 400개 이상의 연동 기능을 지원하며, 워크플로우 내에서 사용자 정의 JavaScript 또는 Python 코드를 실행할 수 있습니다.
n8n과 경쟁사 간의 핵심 차이점은 소유권, 비용, 유연성이라는 세 가지로 요약됩니다.
**소유권: **n8n을 자체 호스팅할 경우, 워크플로우 데이터, 인증 정보 및 실행 로그는 절대 서버 외부로 유출되지 않습니다. 민감한 고객 데이터, 재무 기록 또는 독점적인 비즈니스 로직을 다루는 팀에게 이는 매우 중요한 사항입니다. 클라우드 플랫폼은 자동화 로직을 자체 인프라에 저장하므로, 해당 플랫폼의 데이터 보존 정책과 보안 상태에 종속됩니다.
**비용: **n8n 클라우드 요금제는 워크플로우 실행 건당 요금을 부과하므로, 자동화 실행량이 많을 경우 비용이 빠르게 누적됩니다. 하루에 수천 건의 실행을 수행하는 중규모 팀의 경우, 월 수백 달러의 비용이 발생할 수 있습니다. 자체 VPS를 사용할 경우, 서버 비용을 한 번 지불하면 추가 비용 없이 무제한으로 실행할 수 있습니다.
**유연성: **자체 호스팅형 n8n을 사용하면 커뮤니티 노드를 설치하고, 워크플로우 내에서 임의의 코드를 실행하며, 공용 인터넷에서는 접근할 수 없는 내부 서비스에 연결하고, 배포의 모든 측면을 원하는 대로 구성할 수 있습니다. 클라우드 요금제는 이러한 기능 중 상당수를 제한합니다.
필수 준비 사항
시작하기 전에 다음 사항이 준비되어 있는지 확인하십시오:
- Ubuntu 22.04 또는 24.04(권장)이 실행되는 Linux VPS입니다. 일부 보급형 요금제는 다른 배포판만 제공하므로, 선택한 요금제에서 제공업체가 Ubuntu를 지원하는지 확인하십시오
- sudo 권한이 있는 비루트 사용자
- VPS IP 주소로 연결된 도메인 이름(예: n8n.yourdomain.com)
- 서버에 대한 SSH 접속 권한
- 리눅스 명령줄에 대한 기본적인 이해
적합한 VPS 선택
선택하는 서버는 n8n의 성능에 직접적인 영향을 미칩니다. 최소한 1개의 vCPU, 2GB RAM, 20GB SSD 저장 공간이 필요합니다. PostgreSQL, Nginx, n8n이 모두 동시에 실행되기 때문에, 최소 사양의 SQLite 기반 설치에 비해 추가 RAM이 필요합니다.
효과적인 SEO를 위한 올인원 플랫폼
모든 성공적인 비즈니스의 배후에는 강력한 SEO 캠페인이 있습니다. 하지만 선택할 수 있는 최적화 도구와 기법이 무수히 많기 때문에 어디서부터 시작해야 할지 알기 어려울 수 있습니다. 이제 걱정하지 마세요. 제가 도와드릴 수 있는 방법이 있으니까요. 효과적인 SEO를 위한 Ranktracker 올인원 플랫폼을 소개합니다.
사용자가 여러 명인 팀, 복잡한 다단계 워크플로우를 사용하는 팀, 또는 웹훅 처리량이 많은 팀의 경우 2 vCPU와 4 GB RAM으로 업그레이드하십시오. 긴 실행 로그를 보관할 계획이라면 저장 용량은 최소 40 GB 이상이어야 합니다.
PetroSky는 파리와 몬트리올에서 NVMe VPS 요금제를 제공하며, 결제 시 n8n을 원클릭 애플리케이션으로 이용할 수 있습니다. 오픈소스 설치 스크립트가 Docker Compose를 사용하여 n8n을 배포하고, Caddy 및 Let’s Encrypt를 통해 HTTPS를 자동으로 설정해 줍니다. 이 가이드는 모든 제공업체에서 작동하는 수동 설치 방법을 다룹니다.
VPS 제공업체를 선택할 때는 지리적 위치도 고려하십시오. n8n 인스턴스를 가장 자주 연결할 서비스가 위치한 지역과 가장 가까운 곳에 호스팅하면 워크플로 실행 시 API 지연 시간을 줄일 수 있습니다.
1단계: 서버 업데이트
VPS에 SSH로 접속하여, 어떤 것도 설치하기 전에 전체 시스템 업데이트를 실행 하세요:
sudo apt update && sudo apt upgrade -y
이렇게 하면 Docker 및 기타 소프트웨어를 추가하기 전에 최신 보안 패치가 적용되고 모든 시스템 라이브러리가 최신 상태인지 확인할 수 있습니다.
커널 업데이트가 적용된 경우 시스템을 재부팅하십시오:
sudo reboot
SSH로 다시 연결한 후, n8n을 실행할 전용 시스템 사용자를 생성하십시오. 서비스를 root 권한으로 실행하는 것은 보안 위험이 됩니다:
sudo adduser n8nuser
sudo usermod -aG sudo n8nuser
su - n8nuser
2단계: Docker 및 Docker Compose 설치
n8n에서 공식적으로 권장하는 설치 방법은 Docker입니다. Docker는 n8n과 그 종속성을 시스템의 나머지 부분과 분리하여, 업데이트 및 롤백을 간편하게 해줍니다.
공식 편의 스크립트를 사용하여 Docker를 설치합니다:
curl -fsSL https://get.docker.com | sudo sh
Docker 문서에 따르면, 이 편의 스크립트는 버전을 선택할 수 없이 최신 릴리스만 설치하므로 프로덕션 환경에서는 권장되지 않습니다. Docker 버전을 고정하고 싶다면, 대신 Docker의 Ubuntu 설치 가이드(docs.docker.com/engine/install/ubuntu/)에 나와 있는 apt 저장소 방법을 사용하세요.
sudo 없이 Docker 명령을 실행할 수 있도록 사용자를 Docker 그룹에 추가하세요:
sudo usermod -aG docker $USER
newgrp docker
Docker가 올바르게 실행되고 있는지 확인하세요:
docker --version
docker compose version
두 명령어 모두 오류 없이 버전 문자열을 반환해야 합니다. Docker Compose가 발견되지 않으면 수동으로 설치하십시오:
sudo apt install docker-compose-plugin -y
3단계: 프로덕션용 PostgreSQL 설정
기본적으로 n8n은 SQLite를 데이터베이스로 사용합니다. SQLite는 개인용이나 가벼운 워크플로우에는 적합하지만, 동시 쓰기 처리가 원활하지 않아 많은 워크플로우가 동시에 실행될 경우 속도 저하와 “database is locked” 오류가 발생합니다. 프로덕션 배포를 위해서는 PostgreSQL이 올바른 선택입니다.
효과적인 SEO를 위한 올인원 플랫폼
모든 성공적인 비즈니스의 배후에는 강력한 SEO 캠페인이 있습니다. 하지만 선택할 수 있는 최적화 도구와 기법이 무수히 많기 때문에 어디서부터 시작해야 할지 알기 어려울 수 있습니다. 이제 걱정하지 마세요. 제가 도와드릴 수 있는 방법이 있으니까요. 효과적인 SEO를 위한 Ranktracker 올인원 플랫폼을 소개합니다.
Docker 내에서 n8n과 함께 PostgreSQL을 실행하세요:
mkdir ~/n8n && cd ~/n8n
비밀 정보를 안전하게 저장할 환경 파일을 생성합니다. compose 파일에 비밀번호를 절대 하드코딩하지 마십시오:
nano ~/n8n/.env
다음 내용을 추가하고, 자리 표시자 값을 강력하고 고유한 비밀번호로 대체하세요:
POSTGRES_USER=n8n
POSTGRES_PASSWORD=여기에_강력한_데이터베이스_비 밀번호_입력
POSTGRES_DB=n8n
N8N_ENCRYPTION_KEY=여기에_무작위_32_자_문자열_입력
다음 명령어를 사용하여 안전한 암호화 키를 생성하세요:
openssl rand -hex 16
출력된 값을 N8N_ENCRYPTION_KEY로 사용하십시오. 이 키는 n8n에 저장된 인증 정보를 암호화합니다. 이 키를 분실하면 저장된 모든 인증 정보를 복구할 수 없게 됩니다.
4단계: n8n Docker Compose 파일 생성
n8n 디렉터리에 docker-compose.yml 파일을 생성하세요:
nano ~/n8n/docker-compose.yml
다음 구성을 붙여넣으세요:
services:
postgres:
image: postgres:16-alpine
restart: always
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 10
n8n:
image: docker.n8n.io/n8nio/n8n
restart: always
ports:
- "127.0.0.1:5678:5678"
environment:
- N8N_HOST=n8n.yourdomain.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- NODE_ENV=production
- WEBHOOK_URL=https://n8n.yourdomain.com/
- GENERIC_TIMEZONE=Europe/London
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- EXECUTIONS_MODE=regular
- N8N_LOG_LEVEL=info
volumes:
- n8n_data:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
volumes:
postgres_data:
n8n_data:
구성 참고 사항:
- 127.0.0.1:5678:5678 포트 바인딩은 n8n에 로컬에서만 접근할 수 있도록 보장합니다. Nginx가 모든 외부 트래픽을 처리하므로, 포트 5678을 인터넷에 직접 노출해서는 안 됩니다.
- service_healthy 조건이 포함된 depends_on을 사용하면 n8n이 PostgreSQL이 완전히 준비될 때까지 기다린 후 시작됩니다. 이 설정이 없으면 데이터베이스가 아직 연결을 수락하지 않는 상태에서 n8n을 처음 부팅할 때 오류가 발생합니다.
- N8N_LOG_LEVEL=info를 설정하면 debug 모드처럼 디스크 저장 공간을 과도하게 차지하지 않으면서도 유용한 운영 로그를 얻을 수 있습니다.
5단계: Nginx 설치 및 구성
Nginx는 리버스 프록시 역할을 하여, 포트 443의 HTTPS 트래픽을 포트 5678의 n8n 컨테이너로 전달합니다. 또한 SSL 종료를 처리하므로, n8n 자체에서 인증서를 관리할 필요가 없습니다.
sudo apt install nginx -y
기본 사이트를 제거하고 n8n용 새 서버 블록을 생성합니다:
sudo rm /etc/nginx/sites-enabled/default
sudo nano /etc/nginx/sites-available/n8n
다음 내용을 붙여넣으세요:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
server_name n8n.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
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;
chunked_transfer_encoding on;
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 90s;
client_max_body_size 50m;
}
}
맨 위에 있는 map 블록은 WebSocket 업그레이드 헤더를 올바르게 처리합니다. n8n은 편집기의 실시간 업데이트를 위해 WebSocket을 사용하므로 이 구성은 중요합니다. 이 구성이 없으면 시각적 편집기가 제대로 작동하지 않습니다.
client_max_body_size 50m 지시어는 워크플로가 대용량 웹훅 페이로드를 수신할 수 있도록 합니다. Nginx의 기본 제한은 1 MB로, 파일 업로드나 대용량 JSON 응답을 처리하는 워크플로에는 너무 작습니다.
구성을 활성화하고 테스트해 보세요:
sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
6단계: Let’s Encrypt를 사용하여 SSL 인증서 발급
Certbot과 Nginx 플러그인을 설치합니다:
sudo apt install certbot python3-certbot-nginx -y
도메인에 대한 인증서를 요청합니다:
sudo certbot --nginx -d n8n.yourdomain.com
화면의 안내에 따라 진행하세요. HTTP 트래픽을 HTTPS로 리디렉션할지 묻는 메시지가 나타나면 ‘예(Yes)’(옵션 2)를 선택하세요. Certbot이 이 리디렉션을 처리하고 전체 인증서 체인을 설치하도록 Nginx 구성을 자동으로 업데이트합니다.
자동 갱신이 올바르게 설정되었는지 확인합니다:
sudo certbot renew --dry-run
Certbot은 12시간마다 인증서를 자동으로 갱신하는 systemd 타이머를 설치합니다. 인증서는 만료일 30일 전부터 갱신됩니다. 수동으로 갱신할 필요는 전혀 없습니다.
7단계: n8n 시작
n8n 디렉터리로 돌아가 모든 서비스를 시작합니다:
cd ~/n8n
docker compose up -d
Docker는 PostgreSQL 및 n8n 이미지를 가져오고, 볼륨을 생성한 뒤, 먼저 PostgreSQL을 시작한 다음, 상태 확인이 통과될 때까지 기다린 후 n8n을 시작합니다. 이 과정은 처음 실행 시 1~3분이 소요됩니다.
두 컨테이너가 모두 실행 중인지 확인하세요:
docker compose ps
postgres와 n8n이 모두 상태가 ‘Up’으로 표시되어야 합니다. n8n의 상태가 ‘Restarting’으로 표시되면 로그를 확인하세요:
docker compose logs n8n --tail=50
두 컨테이너 모두 정상 상태가 되면 브라우저를 열고 https://n8n.yourdomain.com로 이동하세요. 이메일 주소와 비밀번호를 입력하여 소유자 계정을 생성하라는 메시지가 표시됩니다. 이 계정은 n8n 인스턴스에 대한 전체 관리자 권한을 갖습니다.
8단계: 부팅 시 n8n이 자동으로 시작되도록 구성하기
docker-compose.yml 파일의 restart: always 지시어는 모든 컨테이너가 중단되거나 서버가 재부팅될 때 자동으로 다시 시작되도록 보장합니다.
서버를 재부팅하여 이를 확인해 보세요:
sudo reboot
SSH를 통해 다시 연결한 후, n8n이 자동으로 다시 시작되었는지 확인하세요:
docker compose -f ~/n8n/docker-compose.yml ps
두 컨테이너 모두 별도의 수동 조작 없이 실행 중인 상태로 표시되어야 합니다.
9단계: 자동 백업 설정
n8n 데이터(워크플로우, 인증 정보, 실행 내역)는 PostgreSQL 데이터베이스와 n8n_data Docker 볼륨(암호화 키 및 일부 구성을 저장함) 두 곳에 저장됩니다. 두 곳 모두 정기적으로 백업하십시오.
백업 스크립트를 생성합니다:
nano ~/n8n/backup.sh
다음 내용을 붙여넣으세요:
#!/bin/bash
BACKUP_DIR="/home/n8nuser/backups"
DATE=$(date +%Y-%m-%d_%H-%M)
LOG_FILE="$BACKUP_DIR/backup.log"
# 다른 작업을 수행하기 전에 백업 디렉터리가 존재하는지 확인
mkdir -p "$BACKUP_DIR"
# PostgreSQL 덤프
DUMP_FILE="$BACKUP_DIR/n8n_db_$DATE.sql"
docker compose -f /home/n8nuser/n8n/docker-compose.yml exec -T postgres \
pg_dump -U n8n n8n > "$DUMP_FILE"
# 덤프가 성공적으로 수행되었고 파일이 비어 있지 않은지 확인
if [ $? -ne 0 ] || [ ! -s "$DUMP_FILE" ]; then
echo "오류: $DATE에 데이터베이스 백업 실패" >> "$LOG_FILE"
rm -f "$DUMP_FILE"
exit 1
fi
# 암호화 키 및 환경 변수 백업
cp /home/n8nuser/n8n/.env "$BACKUP_DIR/n8n_env_$DATE.bak"
# n8n_data 볼륨(인스턴스 구성 및 설치된 커뮤니티 노드) 백업
docker run --rm -v n8n_n8n_data:/data -v "$BACKUP_DIR":/backup alpine \
tar czf /backup/n8n_data_$DATE.tar.gz -C /data .
# 데이터베이스 덤프 압축
gzip "$DUMP_FILE"
# 최근 7일 분의 백업만 남기기
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +7 -delete
find "$BACKUP_DIR" -name "*.bak" -mtime +7 -delete
find "$BACKUP_DIR" -name "n8n_data_*.tar.gz" -mtime +7 -delete
echo "백업 완료: n8n_db_$DATE.sql.gz" >> "$LOG_FILE"
볼륨 이름 n8n_n8n_data는 Docker Compose가 볼륨 이름 앞에 프로젝트 폴더 이름(n8n)을 접두사로 붙여서 생성한 것입니다. docker volume ls 명령어를 사용하여 해당 볼륨 이름을 확인하십시오.
스크립트에 실행 권한을 부여하고 cron으로 예약하십시오:
chmod +x ~/n8n/backup.sh
crontab -e
매일 오전 2시에 백업을 실행하도록 다음 줄을 추가하세요:
0 2 * * * /home/n8nuser/n8n/backup.sh >> /home/n8nuser/backups/backup.log 2>&1
오프사이트 중복성을 위해 rclone 또는 aws s3 sync를 사용하여 백업 디렉터리를 S3 호환 오브젝트 스토리지 제공업체에 동기화하는 것을 고려해 보세요.
10단계: 기본 보안 강화 활성화
방화벽 설정
UFW를 설치하고 서버에 필요한 포트만 허용하세요:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
규칙이 활성화되었는지 확인합니다:
sudo ufw status verbose
포트 22(SSH), 80(HTTP), 443(HTTPS)가 허용된 것으로 표시되어야 합니다. 한 가지 주의할 점: Docker는 자체 방화벽 규칙을 작성하며, 공개된 컨테이너 포트에 대해서는 UFW를 우회합니다. 포트 5678이 비공개로 유지되는 이유는 UFW 때문이 아니라, compose 파일이 해당 포트를 127.0.0.1에 바인딩하기 때문입니다. 따라서 이 바인딩을 0.0.0.0으로 변경해서는 안 됩니다.
SSH의 비밀번호 인증 비활성화
SSH 키를 사용하고 있다면(반드시 사용해야 합니다), 비밀번호 기반 SSH 로그인을 완전히 비활성화하십시오. 먼저, n8nuser 계정이 귀하의 키로 로그인할 수 있는지 확인하십시오. 로컬 컴퓨터에서 다음 명령을 실행하십시오:
ssh-copy-id n8nuser@your_server_ip
그런 다음 SSH 서버 설정을 편집합니다:
sudo nano /etc/ssh/sshd_config
다음 값을 설정하세요:
PasswordAuthentication no
PermitRootLogin no
sudo systemctl restart ssh
많은 우분투 클라우드 이미지에서 /etc/ssh/sshd_config.d/ 디렉터리의 파일(대개 50-cloud-init.conf)이 PasswordAuthentication을 yes로 설정해 놓는데, sshd는 읽은 첫 번째 값을 적용하기 때문에 이 설정이 우선 적용됩니다. 실제로 적용되고 있는 설정을 확인하세요:
sudo sshd -T | grep -i passwordauthentication
결과에 passwordauthentication no가 표시되어야 합니다. 그렇지 않다면, 오버라이드 파일의 값을 변경하고 SSH를 다시 시작하십시오.
새로운 터미널 창에서 키 기반 로그인이 정상적으로 작동하는지 확인할 때까지 현재 SSH 세션을 종료하지 마십시오.
n8n 로그인 페이지에 속도 제한 적용
n8n 로그인 엔드포인트에 대한 무차별 대입 공격 속도를 늦추기 위해 요청 제한을 추가하세요.
효과적인 SEO를 위한 올인원 플랫폼
모든 성공적인 비즈니스의 배후에는 강력한 SEO 캠페인이 있습니다. 하지만 선택할 수 있는 최적화 도구와 기법이 무수히 많기 때문에 어디서부터 시작해야 할지 알기 어려울 수 있습니다. 이제 걱정하지 마세요. 제가 도와드릴 수 있는 방법이 있으니까요. 효과적인 SEO를 위한 Ranktracker 올인원 플랫폼을 소개합니다.
**중요: **limit_req_zone 지시어는 서버 블록 내부가 아닌, 메인 Nginx 구성 파일의 http {} 블록 안에 위치해야 합니다. 메인 구성 파일을 엽니다:
sudo nano /etc/nginx/nginx.conf
기존 http {} 블록 안에 다음 줄을 추가하세요:
http {
...
limit_req_zone $binary_remote_addr zone=n8n_login:10m rate=5r/m;
...
}
그런 다음 n8n 사이트 설정 파일(/etc/nginx/sites-available/n8n)에서, 포트 443을 수신 대기하는 server 블록(6단계에서 Certbot이 생성한 블록) 내의 기존 location / 블록 바로 옆에 다음 location 블록을 추가하세요. Nginx는 location /에서 프록시 헤더를 전달하지 않으므로, 여기에서 해당 헤더를 다시 지정해야 합니다:
location /rest/login {
limit_req zone=n8n_login burst=5 nodelay;
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
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;
}
변경 사항을 적용하려면 Nginx를 재시작하세요:
sudo nginx -t && sudo systemctl reload nginx
이렇게 하면 각 IP 주소당 분당 약 5회의 로그인 시도를 허용하며, 짧은 시간 동안의 집중 접속도 소폭 허용됩니다.
n8n 및 PostgreSQL을 최신 상태로 유지하세요
정기적으로 최신 이미지를 가져와 서비스를 재시작하세요:
cd ~/n8n
docker compose pull
docker compose up -d
Docker는 최신 n8nio/n8n 및 postgres 이미지를 가져오고, 더 새로운 버전이 있는 컨테이너만 재시작합니다.
프로덕션 환경에서는 n8n 이미지를 특정 버전 태그(n8n 릴리스 노트에서 가져온 docker.n8n.io/n8nio/n8n:<version>)에 고정하고 신중하게 업그레이드하는 것을 고려하십시오. 이렇게 하면 변경 로그를 확인하기 전에 정기적인 이미지 가져오기 과정에서 메이저 버전이 갑자기 건너뛰는 일이 발생하지 않습니다.
일반적인 문제 해결
n8n 컨테이너가 계속 재시작됨
재시작 루프가 시작된 직후 컨테이너 로그를 확인하세요:
docker compose logs n8n --tail=100
일반적인 원인:
- 데이터베이스 연결 오류: `docker compose ps` 명령어를 사용하여 PostgreSQL이 정상적으로 작동하는지 확인하십시오. .env 파일의 `POSTGRES_PASSWORD` 값이 데이터베이스 초기화 시 사용된 값과 일치하는지 확인하십시오.
- 암호화 키 누락 또는 변경: N8N_ENCRYPTION_KEY가 설정되어 있지 않거나 첫 실행 후 변경된 경우, n8n은 저장된 자격 증명을 복호화할 수 없어 중단됩니다.
- RAM 부족: PostgreSQL과 n8n을 함께 실행하면 1~1.5 GB의 RAM을 사용할 수 있습니다. `free -h` 명령어로 사용 가능한 메모리를 확인하십시오.
웹훅이 작동하지 않음
웹훅을 사용하려면 n8n이 귀하의 도메인에서 인터넷을 통해 접근 가능해야 합니다. 다음을 확인하십시오:
- 도메인의 DNS A 레코드가 VPS IP를 가리키는지 확인하세요: dig n8n.yourdomain.com
- Nginx가 실행 중인지 확인: sudo systemctl status nginx
- 포트 443이 열려 있는지 확인: sudo ufw status
- WEBHOOK_URL 환경 변수가 슬래시(/)를 포함하여 공용 도메인과 정확히 일치하는지 확인하십시오.
n8n 에디터가 제대로 로드되지 않음
비주얼 에디터는 로드되지만 워크플로 캔버스가 비어 있거나 실시간 업데이트가 작동하지 않는 경우, WebSocket 연결에 문제가 있는 것입니다. Nginx 구성 파일에 $http_upgrade 블록이 포함되어 있는지 확인하고, proxy_set_header Connection 줄에서 리터럴 문자열 “upgrade”가 아닌 $connection_upgrade 변수를 사용하고 있는지 확인하십시오.
SSL 인증서 오류
Certbot이 도메인 유효성 검사 오류로 실패하는 경우, 인터넷에서 포트 80에 접근할 수 있는지 확인하십시오:
curl -I http://n8n.yourdomain.com
요청이 시간 초과되면 VPS 제공업체의 방화벽이 포트 80을 차단하고 있을 수 있습니다. UFW 외에도 클라우드 콘솔의 방화벽 규칙을 확인하십시오.
결론
Linux VPS에서 n8n을 자체 호스팅하면 실행 제한이 없고, 완벽한 데이터 프라이버시를 보장하며, 필요한 모든 통합 기능을 실행할 수 있는 유연성을 갖춘, 즉시 운영 가능한 워크플로 자동화 플랫폼을 확보할 수 있습니다. 이 가이드에서 다룬 설정(Docker, PostgreSQL, Nginx 리버스 프록시, Let’s Encrypt SSL, 자동 백업 및 보안 강화)은 실제 운영 환경에서 사용되는 것과 동일한 스택으로, 안정적이고 안전한 기반을 제공합니다.
최소한의 Docker run 명령어 설치와 달리, 이 설정은 서버 재부팅을 견디고, 동시 워크플로우 실행을 처리하며, 장애 발생 시 원활하게 복구되도록 설계되었습니다. 사용자 자격 증명은 암호화되고, 데이터는 매일 밤 백업되며, 로그인 엔드포인트는 무차별 대입 공격에 대비해 속도 제한이 적용됩니다.
인스턴스가 실행되면, n8n에 내장된 데이터베이스, API, 웹훅 및 AI 통합 노드를 살 펴보고 즉시 워크플로우 자동화를 시작해 보세요. community.n8n.io에 있는 자체 호스팅 커뮤니티 포럼은 워크플로우 아이디어, 노드 문제 해결 및 배포 팁을 얻기 위한 훌륭한 자료이기도 합니다.
