Synology NAS와 Mac Mini를 서로 다른 네트워크에서 연결하기: n8n 원격 인프라 완벽 가이드
왜 원격 네트워크 연결이 필요한가요?
홈랩(Home Lab)을 운영하다 보면 모든 장비가 같은 집, 같은 네트워크 안에 있지 않은 경우가 많습니다. 예를 들어, 데이터 안정성을 위해 Synology NAS는 집에 두고, 실제 워크플로우를 실행하는 Mac Mini는 사무실에 두는 경우가 있을 수 있습니다. 또는 클라우드 서버와 온프레미스 장비를 연동해야 하는 상황도 있을 수 있습니다. 이러한 구성은 재해 복구(Disaster Recovery) 관점에서도 매우 유용하며, 지리적으로 분산된 인프라를 통해 더욱 안정적인 시스템을 구축할 수 있습니다.
이 글에서는 Synology NAS에 PostgreSQL과 Redis를 설치하고, 완전히 다른 네트워크에 있는 Mac Mini에서 n8n을 실행하여 이 데이터베이스들에 연결하는 방법을 상세히 알아봅니다. 네트워크 기초 개념부터 Docker Compose 설정, 라우터 포트포워딩, 그리고 보안 고려사항까지 일반인과 초보 개발자도 쉽게 따라할 수 있도록 친절하게 설명해 드리겠습니다. 특히 Docker 네트워크의 동작 원리와 공인 IP를 통한 통신 방식에 대해 깊이 있게 다루어, 실제 환경에서 바로 적용할 수 있는 실용적인 지식을 전달해 드리겠습니다.

목 차
1. 네트워크 기초 개념 이해하기
공인 IP vs 사설 IP: 인터넷 주소의 두 가지 유형
인터넷 통신을 이해하기 위해서는 먼저 IP 주소의 두 가지 유형을 알아야 합니다. 공인 IP(Public IP)는 인터넷에서 유일하게 식별되는 주소로, 전 세계 어디서든 이 주소를 통해 해당 장비에 접근할 수 있습니다. 반면 사설 IP(Private IP)는 특정 네트워크 내부에서만 사용되는 주소로, 192.168.x.x, 10.x.x.x, 172.16.x.x~172.31.x.x 대역이 여기에 해당합니다. 사설 IP는 인터넷에서 직접 접근할 수 없으며, 반드시 라우터를 통해 공인 IP로 변환(NAT)되어야 외부와 통신할 수 있습니다.
예를 들어, 집에 있는 Synology NAS가 192.168.0.4라는 사설 IP를 가지고 있더라도, 외부에서는 이 주소로 직접 접근할 수 없습니다. 외부에서 접근하려면 집 라우터에 할당된 공인 IP인 210.183.92.82를 통해야 하며, 라우터에서 적절한 포트포워딩 설정이 되어 있어야 합니다. 이 개념은 서로 다른 네트워크에 있는 장비들을 연결할 때 가장 기본이 되는 원리이므로, 반드시 이해하고 넘어가시기 바랍니다.
포트포워딩: 외부 요청을 내부 장비로 전달하기
포트포워딩(Port Forwarding)은 라우터가 특정 포트로 들어오는 외부 요청을 내부 네트워크의 특정 장비로 전달해주는 기능입니다. 마치 아파트 경비실에서 방문객에게 "502호로 가세요"라고 안내해주는 것과 비슷합니다. 라우터는 공인 IP의 특정 포트로 들어오는 트래픽을 보고, 미리 설정된 규칙에 따라 해당 트래픽을 내부의 사설 IP와 포트로 전달합니다. 이 기능이 없다면 외부에서 내부 네트워크의 서비스에 접근하는 것이 불가능합니다.
포트포워딩 설정 시에는 외부 포트와 내부 포트, 그리고 내부 IP 주소를 지정해야 합니다. 예를 들어, "외부 5432 포트로 들어오는 TCP 트래픽을 내부 192.168.0.4:5432로 전달"과 같은 규칙을 설정합니다. 보안상의 이유로 외부 포트를 내부 포트와 다르게 설정하는 경우도 있는데, 예를 들어 외부에서는 15432 포트를 사용하고 내부에서는 5432 포트를 사용하도록 설정할 수 있습니다. 이렇게 하면 기본 포트를 노린 자동화된 공격을 어느 정도 회피할 수 있습니다.
NAT(Network Address Translation)의 동작 원리
NAT는 네트워크 주소 변환을 의미하며, 사설 IP를 가진 장비가 인터넷과 통신할 수 있게 해주는 핵심 기술입니다. 내부 장비가 외부로 요청을 보낼 때, 라우터는 해당 패킷의 출발지 IP를 사설 IP에서 공인 IP로 변환합니다. 그리고 응답이 돌아올 때는 다시 원래의 사설 IP로 변환하여 해당 장비에 전달합니다. 이 과정을 통해 제한된 수의 공인 IP로 많은 장비들이 인터넷을 사용할 수 있게 됩니다.
우리가 구성하려는 시스템에서 NAT는 매우 중요한 역할을 합니다. Mac Mini에서 Synology NAS의 PostgreSQL에 접속하려고 할 때, Mac Mini의 요청은 먼저 자신의 라우터를 통해 공인 IP로 나가고, 인터넷을 거쳐 Synology NAS가 있는 네트워크의 공인 IP로 도달합니다. 그러면 Synology NAS 측 라우터가 포트포워딩 규칙에 따라 해당 요청을 NAS로 전달하게 됩니다. 이 전체 과정이 자연스럽게 이루어지려면 양쪽 라우터 모두 적절히 설정되어 있어야 합니다.
2. 시스템 아키텍처 상세 분석
전체 네트워크 구성도
이번 예제에서 다루는 시스템은 완전히 분리된 두 개의 네트워크로 구성됩니다.
- 첫 번째 네트워크는 Synology NAS가 위치한 곳으로, 공인 IP 210.183.92.82를 가지며 내부적으로 192.168.0.x 대역을 사용합니다.
- 두 번째 네트워크는 Mac Mini가 위치한 곳으로, 공인 IP 61.85.213.191을 가지며 내부적으로 192.168.10.x 대역을 사용합니다.
이 두 네트워크는 인터넷을 통해서만 서로 통신할 수 있으며, 각자의 라우터에서 포트포워딩 설정이 필요합니다.
┌────────────────────────────────────────────────────────────────────────┐
│ 인터넷 (Internet) │
└────────────────────────────────────────────────────────────────────────┘
│ │
│ │
▼ ▼
┌─────────────────────────┐ ┌─────────────────────────┐
│ 네트워크 A │ │ 네트워크 B │
│ 공인IP: 210.183.92.82 │ │ 공인IP: 61.85.213.191 │
├─────────────────────────┤ ├─────────────────────────┤
│ 라우터 │ │ 라우터 │
│ ├─ 5432:5432 → NAS │ │ ├─ 5678:5678 → Mac │
│ └─ 6379:6379 → NAS │ │ │
├─────────────────────────┤ ├─────────────────────────┤
│ Synology NAS │ ◄──────────► │ Mac Mini │
│ 사설IP: 192.168.0.4 │ 공인IP 통신 │ 사설IP: 192.168.10.10 │
│ ├─ PostgreSQL (:5432) │ │ ├─ n8n Main (:5678) │
│ └─ Redis (:6379) │ │ └─ n8n Worker (x3) │
└─────────────────────────┘ └─────────────────────────┘
각 서버의 역할 정의
Synology NAS는 이 아키텍처에서 데이터 저장소 역할을 담당합니다.
PostgreSQL 데이터베이스는 n8n의 모든 워크플로우 정의, 실행 기록, 사용자 설정 등 핵심 데이터를 저장합니다. Redis는 n8n의 큐잉 시스템과 캐싱을 담당하며, 특히 여러 워커가 작업을 분산 처리할 때 작업 조율의 중심 역할을 합니다. NAS를 데이터 저장소로 선택한 이유는 RAID를 통한 데이터 보호, Hyper Backup을 통한 자동 백업, 그리고 24시간 안정적인 운영이 가능하기 때문입니다. 이러한 특성은 중요한 데이터를 안전하게 보관해야 하는 데이터베이스 서버로서 매우 적합합니다.
Mac Mini는 실제 워크플로우 실행을 담당하는 컴퓨팅 유닛입니다.
n8n Main 인스턴스는 웹 UI를 제공하고 웹훅을 수신하며, 전체 워크플로우 오케스트레이션을 담당합니다. n8n Worker는 실제 작업을 처리하는 역할을 하며, CPU 집약적인 작업이나 오래 걸리는 작업을 메인 인스턴스와 분리하여 처리합니다. 이 예제에서는 3개의 워커를 구성하여 병렬 처리 능력을 높였습니다. Mac Mini의 강력한 Apple Silicon 프로세서는 복잡한 워크플로우도 빠르게 처리할 수 있어, 연산 중심의 역할에 적합합니다.
3. Docker 네트워크의 이해: 핵심 개념 완벽 정리
이 섹션에서는 많은 분들이 헷갈려하시는 Docker 네트워크의 동작 원리를 상세히 설명합니다.
특히 "왜 서로 다른 Docker 네트워크에 있는 컨테이너끼리 통신이 가능한가?"라는 핵심 질문에 답해 드리겠습니다. 결론부터 말씀드리면, 이 시나리오에서 Docker 네트워크(database_network, n8n_network)는 외부 통신과 전혀 관련이 없습니다. 각각의 Docker 네트워크는 해당 호스트 내부에서 컨테이너 간 통신을 위한 것이며, 서로 다른 물리적 서버 간의 통신은 호스트의 실제 네트워크 인터페이스를 통해 이루어집니다.
Docker 네트워크가 하는 일 vs 하지 않는 일
Docker 네트워크는 동일한 호스트 내에서 컨테이너들이 서로 통신할 수 있도록 가상의 네트워크를 만들어주는 기능입니다.
같은 Docker 네트워크에 속한 컨테이너들은 컨테이너 이름으로 서로를 찾을 수 있고(DNS), 격리된 환경에서 안전하게 통신할 수 있습니다. 예를 들어, Synology NAS에서 database_network에 PostgreSQL과 Redis가 함께 있다면, 같은 NAS 안에서 실행되는 다른 앱이 postgres-shared:5432로 접근할 수 있습니다. 그러나 Docker 네트워크는 서로 다른 물리적 호스트 간의 통신을 제공하지 않습니다. Mac Mini의 n8n_network와 Synology NAS의 database_network는 완전히 별개의 네트워크이며, 서로 직접 연결되지 않습니다.
Docker 네트워크의 범위 이해하기
Docker 네트워크가 하는 일:
- 같은 호스트 내 컨테이너 간 통신 제공
- 컨테이너 이름으로 DNS 해석 (예: postgres-shared → 172.28.0.2)
- 네트워크 격리를 통한 보안 제공
- 같은 네트워크 내 컨테이너끼리 모든 포트 접근 가능
Docker 네트워크가 하지 않는 일:
- 서로 다른 물리적 호스트 간 연결 (이건 실제 네트워크가 담당)
- 인터넷을 통한 원격 통신 (이건 공인 IP + 포트포워딩이 담당)
- VPN처럼 두 호스트를 하나의 네트워크로 연결
원격 연결의 실제 경로: Docker 네트워크를 우회하는 통신
Mac Mini의 n8n이 Synology NAS의 PostgreSQL에 접속할 때의 실제 통신 경로를 단계별로 살펴보겠습니다. 이 과정에서 Docker 네트워크는 전혀 사용되지 않습니다. n8n 컨테이너가 210.183.92.82:5432로 연결을 시도하면, 이 요청은 Docker의 NAT를 통해 Mac Mini의 실제 네트워크 인터페이스로 나갑니다. 그 다음 Mac Mini의 라우터를 거쳐 인터넷으로 나가고, Synology NAS가 있는 네트워크의 라우터에 도달합니다. 포트포워딩 규칙에 따라 요청이 NAS로 전달되고, 최종적으로 Docker의 포트 매핑(0.0.0.0:5432:5432)을 통해 PostgreSQL 컨테이너에 도달합니다.
┌────────────────────────────────────────────────────────────────────────────┐
│ n8n → PostgreSQL 연결의 실제 경로 │
├────────────────────────────────────────────────────────────────────────────┤
│ │
│ Mac Mini (192.168.10.10) Synology NAS (192.168.0.4) │
│ ┌─────────────────────────┐ ┌─────────────────────────┐ │
│ │ Docker Engine │ │ Docker Engine │ │
│ │ ┌───────────────────┐ │ │ ┌───────────────────┐ │ │
│ │ │ n8n 컨테이너 │ │ │ │ PostgreSQL 컨테이너││ │ │
│ │ │ (n8n_network) │ │ │ │ (database_network)│ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ DB_HOST= │ │ │ │ listen_addresses= │ │ │
│ │ │ 210.183.92.82 ────┼─-┼─── ❌ 직접 ────-┼-─┼─→ X 불가능! │ │ │
│ │ │ (공인 IP 사용) │ │ 연결 안됨 │ │ '*' │ │ │
│ │ └───────────────────┘ │ │ └───────────────────┘ │ │
│ │ │ │ │ ▲ │ │
│ │ ▼ │ │ │ │ │
│ │ [Docker NAT/Bridge] │ │ [Docker Port Mapping] │ │
│ │ │ │ │ 0.0.0.0:5432:5432 │ │
│ └───────────┼────────────┘ └───────────┼────────────┘ │
│ │ │ │
│ ▼ ▲ │
│ ┌───────────────────────┐ ┌───────────────────────┐ │
│ │ Mac Mini 호스트 │ │ NAS 호스트 │ │
│ │ 네트워크 인터페이스 │ │ 네트워크 인터페이스 │ │
│ │ (192.168.10.10) │ │ (192.168.0.4) │ │
│ └───────────┬───────────┘ └───────────┬───────────┘ │
│ │ ▲ │
│ ▼ │ │
│ ┌───────────────────────┐ ┌───────────────────────┐ │
│ │ Mac 라우터 │ │ NAS 라우터 │ │
│ │ NAT 변환 │ │ 포트포워딩 │ │
│ │ 192.168.10.10 → │ ──────────────→│ 5432 → 192.168.0.4 │ │
│ │ 61.85.213.191 │ 인터넷 │ 공인IP: 210.183.92.82 │ │
│ └───────────────────────┘ └───────────────────────┘ │
│ │
│ ## 실제 연결 경로: n8n → Docker NAT → Mac 호스트 → Mac 라우터 → │
│ 인터넷 → NAS 라우터 → NAS 호스트 → Docker → PostgreSQL │
│ │
└────────────────────────────────────────────────────────────────────────────┘
database_network 설정 상세 분석
Synology NAS의 database_network 설정을 상세히 분석해 보겠습니다.
이 네트워크는 NAS 내부에서 PostgreSQL과 Redis 같은 데이터베이스 서비스들이 서로 통신하거나, 같은 NAS에서 실행되는 다른 애플리케이션들이 데이터베이스에 접근할 때 사용됩니다. 서브넷 172.28.0.0/16은 Docker 컨테이너들에게 할당되는 사설 IP 대역을 정의하며, 이 대역은 호스트의 실제 네트워크(192.168.0.x)와 완전히 분리되어 있습니다. 이 네트워크 설정은 Mac Mini의 n8n과는 전혀 관련이 없습니다.
# Synology NAS의 database_network 설정 분석
networks:
database_network:
driver: bridge # ① 브릿지 드라이버 사용
ipam: # ② IP 주소 관리 설정
config:
- subnet: 172.28.0.0/16 # ③ 컨테이너용 서브넷 정의
# ──────────────────────────────────────────────────────────────
# 각 설정의 의미:
# ──────────────────────────────────────────────────────────────
# ① driver: bridge
# - Docker의 기본 네트워크 드라이버입니다
# - 호스트에 가상의 네트워크 브릿지(docker0와 유사)를 생성합니다
# - 같은 브릿지에 연결된 컨테이너끼리 통신할 수 있습니다
# - 외부 통신은 호스트의 NAT를 통해 이루어집니다
# ② ipam (IP Address Management)
# - 컨테이너에 할당될 IP 주소 범위를 관리합니다
# - 설정하지 않으면 Docker가 자동으로 172.17.0.0/16 등을 할당합니다
# ③ subnet: 172.28.0.0/16
# - 이 네트워크에 속한 컨테이너들이 사용할 IP 대역입니다
# - /16은 65,534개의 IP를 사용할 수 있음을 의미합니다
# - 예: postgres → 172.28.0.2, redis → 172.28.0.3
# - 이 IP들은 NAS 내부에서만 유효하며 외부에서 접근 불가합니다!
# ──────────────────────────────────────────────────────────────
# 중요: 이 네트워크는 NAS 내부 전용입니다!
# ──────────────────────────────────────────────────────────────
# Mac Mini의 n8n은 이 네트워크에 직접 접근할 수 없습니다.
# n8n은 공인 IP(210.183.92.82)를 통해 호스트의 포트에 접근하고,
# Docker의 포트 매핑을 통해 컨테이너에 도달합니다.
┌────────────────────────────────────────────────────────────────────────────┐
│ Synology NAS 내부의 database_network 구조 │
├────────────────────────────────────────────────────────────────────────────┤
│ │
│ Synology NAS (호스트 IP: 192.168.0.4) │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ database_network (172.28.0.0/16) - Docker 브릿지 네트워크 │ │
│ │ ┌────────────────────────────────────────────────────────────-─┐ │ │
│ │ │ │ │ │
│ │ │ ┌─────────────────┐ ┌─────────────────┐ │ │ │
│ │ │ │ PostgreSQL │ │ Redis │ │ │ │
│ │ │ │ 172.28.0.2 │ ◄────► │ 172.28.0.3 │ │ │ │
│ │ │ │ (내부 통신용) │ │ (내부 통신용) │ │ │ │
│ │ │ └────────┬────────┘ └────────┬────────┘ │ │ │
│ │ │ │ │ │ │ │
│ │ └───────────┼──────────────────────────┼───────────────────────┘ │ │
│ │ │ │ │ │
│ │ ▼ ▼ │ │
│ │ ┌─────────────────────────────────────────────────────────────┐ │ │
│ │ │ Docker 포트 매핑 (Port Mapping) │ │ │
│ │ │ 0.0.0.0:5432 → 172.28.0.2:5432 (PostgreSQL) │ │ │
│ │ │ 0.0.0.0:6379 → 172.28.0.3:6379 (Redis) │ │ │
│ │ └─────────────────────────────────────────────────────────────┘ │ │
│ │ │ │ │
│ └───────────────────────────────┼─────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ NAS 호스트 네트워크 인터페이스 │ │
│ │ 192.168.0.4:5432 │ │
│ │ 192.168.0.4:6379 │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ 라우터 → 인터넷 │
│ 공인 IP: 210.183.92.82 │
│ │
└────────────────────────────────────────────────────────────────────────────┘
※ Mac Mini의 n8n이 PostgreSQL에 접근하는 경로:
210.183.92.82:5432 → 라우터 포트포워딩 → 192.168.0.4:5432 →
Docker 포트매핑 → 172.28.0.2:5432 (PostgreSQL 컨테이너)
n8n_network 설정 상세 분석
Mac Mini의 n8n_network는 n8n Main과 n8n Worker들이 서로 통신하기 위한 네트워크입니다.
이 네트워크 내에서는 컨테이너 이름으로 서로를 찾을 수 있어, 예를 들어 워커가 n8n-main:5678로 메인 인스턴스에 접근할 수 있습니다. 하지만 이 네트워크 역시 Mac Mini 내부에서만 유효하며, Synology NAS의 database_network와는 완전히 별개입니다. n8n이 원격의 PostgreSQL에 접속할 때는 이 Docker 네트워크를 사용하지 않고, 공인 IP를 통한 인터넷 연결을 사용합니다.
# Mac Mini의 n8n_network 설정 분석
networks:
n8n_network:
driver: bridge # 브릿지 드라이버 (기본값)
# ──────────────────────────────────────────────────────────────
# 이 네트워크의 용도:
# ──────────────────────────────────────────────────────────────
# 1. n8n Main과 Worker 간의 내부 통신
# - Worker가 Main에게 작업 완료를 알릴 때
# - 같은 네트워크이므로 컨테이너 이름으로 통신 가능
# - 예: n8n-worker → n8n-main:5678
# 2. 여러 Worker들 간의 통신 (필요시)
# - Worker들이 서로의 상태를 확인하거나
# - 분산 처리 조율이 필요한 경우
# 3. 향후 같은 Mac Mini에 다른 서비스 추가 시
# - 예: 모니터링 컨테이너, 로깅 컨테이너 등
# ──────────────────────────────────────────────────────────────
# 이 네트워크가 하지 않는 것:
# ──────────────────────────────────────────────────────────────
# - Synology NAS의 PostgreSQL과의 연결에 사용되지 않음!
# - Synology NAS의 Redis와의 연결에 사용되지 않음!
# - 인터넷을 통한 외부 통신에 관여하지 않음!
# n8n → PostgreSQL 연결은 공인 IP를 통해 이루어집니다:
# DB_POSTGRESDB_HOST: 210.183.92.82 (Docker 네트워크 아님!)
┌────────────────────────────────────────────────────────────────────────────┐
│ Mac Mini 내부의 n8n_network 구조 │
├────────────────────────────────────────────────────────────────────────────┤
│ │
│ Mac Mini (호스트 IP: 192.168.10.10) │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ n8n_network (172.18.0.0/16) - Docker 브릿지 네트워크 │ │
│ │ ┌──────────────────────────────────────────────────────────────┐ │ │
│ │ │ │ │ │
│ │ │ ┌─────────────────┐ │ │ │
│ │ │ │ n8n-main │ ┌─────────────────┐ │ │ │
│ │ │ │ 172.18.0.2 │ │ n8n-worker-1 │ │ │ │
│ │ │ │ Port: 5678 │ ◄───► │ 172.18.0.3 │ │ │ │
│ │ │ └─────────────────┘ └─────────────────┘ │ │ │
│ │ │ ▲ │ │ │
│ │ │ │ ┌─────────────────┐ │ │ │
│ │ │ │ │ n8n-worker-2 │ │ │ │
│ │ │ └───────────────► │ 172.18.0.4 │ │ │ │
│ │ │ │ └─────────────────┘ │ │ │
│ │ │ │ │ │ │
│ │ │ │ ┌─────────────────┐ │ │ │
│ │ │ │ │ n8n-worker-3 │ │ │ │
│ │ │ └───────────────► │ 172.18.0.5 │ │ │ │
│ │ │ └─────────────────┘ │ │ │
│ │ │ │ │ │
│ │ │ ↑ 이 네트워크는 n8n 컴포넌트 간 내부 통신 전용입니다 │ │ │
│ │ └──────────────────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ═════════════════════════════════════════════════════════════════ │ │
│ │ │ │
│ │ PostgreSQL/Redis 연결은 Docker 네트워크를 사용하지 않습니다! │ │
│ │ │ │
│ │ n8n-main ──→ DB_HOST=210.183.92.82 ──→ 인터넷 ──→ Synology NAS │ │
│ │ (공인 IP 직접 사용) │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
└────────────────────────────────────────────────────────────────────────────┘
왜 Docker 네트워크 설정이 서로 달라도 연결이 되는가?
핵심을 다시 한번 정리하면, Mac Mini의 n8n이 Synology NAS의 PostgreSQL에 연결될 때 Docker 네트워크는 사용되지 않습니다. 두 Docker 네트워크(database_network와 n8n_network)는 완전히 별개이며, 서로 연결되어 있지 않습니다. 연결이 가능한 이유는 n8n이 공인 IP(210.183.92.82)를 통해 인터넷을 거쳐 NAS에 접근하기 때문입니다. 이 연결은 일반적인 TCP/IP 네트워크 통신이며, Docker의 포트 매핑(0.0.0.0:5432:5432)이 외부에서 들어오는 요청을 컨테이너로 전달해주는 역할만 합니다.
┌────────────────────────────────────────────────────────────────────────────┐
│ 핵심 요약: 왜 연결이 되는가? │
├────────────────────────────────────────────────────────────────────────────┤
│ │
│ # 질문: database_network와 n8n_network는 완전히 다른 네트워크인데 │
│ 어떻게 n8n이 PostgreSQL에 접속할 수 있나요? │
│ │
│ # 답변: Docker 네트워크는 전혀 사용되지 않습니다! │
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Mac Mini Synology NAS │ │
│ │ ┌───────────────┐ ┌───────────────┐ │ │
│ │ │ n8n_network │ │ database_ │ │ │
│ │ │ (172.18.0.0) │ # 연결 없음 │ network │ │ │
│ │ │ │ ═══════════════════│ (172.28.0.0) │ │ │
│ │ └───────────────┘ └───────────────┘ │ │
│ │ │ │
│ │ ↑ Docker 네트워크끼리는 연결되지 않습니다 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 대신, 실제 연결은 이렇게 이루어집니다: │ │
│ │ │ │
│ │ n8n 컨테이너 │ │
│ │ │ │ │
│ │ │ DB_POSTGRESDB_HOST=210.183.92.82 (공인 IP!) │ │
│ │ ▼ │ │
│ │ Mac Mini 호스트 네트워크 인터페이스 │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ Mac Mini 라우터 (NAT) │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ═══════════════════ 인터넷 ═══════════════════ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ NAS 라우터 (포트포워딩: 5432 → 192.168.0.4) │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ NAS 호스트 (192.168.0.4:5432) │ │
│ │ │ │ │
│ │ │ Docker 포트 매핑 (0.0.0.0:5432 → 컨테이너:5432) │ │
│ │ ▼ │ │
│ │ PostgreSQL 컨테이너 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
│ 💡 결론: Docker 네트워크 이름이 같든 다르든 상관없습니다! │
│ 원격 연결은 공인 IP + 포트포워딩 + Docker 포트 매핑으로 이루어집니다. │
│ │
└────────────────────────────────────────────────────────────────────────────┘
같은 네트워크 vs 다른 네트워크: 설정 방식의 차이
같은 호스트 내에서 컨테이너 간 통신과 서로 다른 호스트 간의 통신은 완전히 다른 방식으로 설정됩니다. 같은 호스트 내에서는 Docker 네트워크를 공유하고 컨테이너 이름을 호스트명으로 사용하지만, 서로 다른 호스트 간에는 공인 IP(또는 VPN을 통한 사설 IP)와 포트 번호를 명시해야 합니다. 이 차이를 이해하면 Docker Compose 설정이 왜 그렇게 되어 있는지 명확해집니다.
# ================================================================
# 시나리오 비교: 같은 호스트 vs 다른 호스트
# ================================================================
# ────────────────────────────────────────────────────────────────
# 시나리오 A: 모든 서비스가 같은 호스트에 있는 경우
# (예: Synology NAS에 PostgreSQL, Redis, n8n 모두 설치)
# ────────────────────────────────────────────────────────────────
version: "3.8"
services:
postgres:
image: postgres:18-alpine
networks:
- shared_network # 같은 네트워크에 속함
redis:
image: redis:8-alpine
networks:
- shared_network # 같은 네트워크에 속함
n8n:
image: n8nio/n8n:latest
environment:
# 컨테이너 이름을 호스트로 사용! (Docker DNS)
DB_POSTGRESDB_HOST: postgres # ← 컨테이너 이름
QUEUE_BULL_REDIS_HOST: redis # ← 컨테이너 이름
networks:
- shared_network # 같은 네트워크에 속함
networks:
shared_network:
driver: bridge
# 같은 네트워크에 있으므로 서로 직접 통신 가능!
# ────────────────────────────────────────────────────────────────
# 시나리오 B: 서비스가 서로 다른 호스트에 있는 경우 (현재 구성)
# (PostgreSQL, Redis → NAS / n8n → Mac Mini)
# ────────────────────────────────────────────────────────────────
# --- Synology NAS의 docker-compose.yml ---
version: "3.8"
services:
postgres:
image: postgres:18-alpine
ports:
- "0.0.0.0:5432:5432" # 외부 접근 허용 필수!
networks:
- database_network # NAS 내부 네트워크 (선택사항)
redis:
image: redis:8-alpine
ports:
- "0.0.0.0:6379:6379" # 외부 접근 허용 필수!
networks:
- database_network # NAS 내부 네트워크 (선택사항)
networks:
database_network:
driver: bridge
# 이 네트워크는 Mac Mini의 n8n과 관련 없음!
# --- Mac Mini의 docker-compose.yml ---
version: "3.8"
services:
n8n:
image: n8nio/n8n:latest
environment:
# 공인 IP를 호스트로 사용! (인터넷 통신)
DB_POSTGRESDB_HOST: 210.183.92.82 # ← 공인 IP 필수!
QUEUE_BULL_REDIS_HOST: 210.183.92.82 # ← 공인 IP 필수!
networks:
- n8n_network
networks:
n8n_network:
driver: bridge
# 이 네트워크는 NAS의 PostgreSQL과 관련 없음!
4. Synology NAS Docker PostgreSQL의 pg_hba.conf 접근 방법
Docker 컨테이너 내부의 PostgreSQL 설정 파일에 접근하는 방법은 여러 가지가 있습니다. 컨테이너는 기본적으로 격리된 환경이기 때문에, 설정 파일을 수정하려면 특별한 방법이 필요합니다. 여기서는 가장 실용적인 세 가지 방법을 소개해 드리겠습니다. 권장하는 방법은 첫 번째인 "볼륨 마운트 방식"으로, 설정 파일을 호스트에 두고 컨테이너가 이를 읽도록 하는 것입니다. 이 방식은 컨테이너를 재생성해도 설정이 유지되며, 수정도 편리합니다.
방법 1: 볼륨 마운트로 외부 설정 파일 사용 (권장)
가장 깔끔하고 권장되는 방법은 pg_hba.conf 파일을 Synology NAS의 볼륨에 생성하고, 이를 컨테이너에 마운트하는 것입니다. 이 방식을 사용하면 File Station이나 SSH를 통해 쉽게 설정 파일을 수정할 수 있으며, 컨테이너를 재생성하거나 업그레이드해도 설정이 그대로 유지됩니다. 먼저 설정 파일을 저장할 디렉토리를 생성하고, pg_hba.conf 파일을 작성한 후, docker-compose.yml에서 이 파일을 마운트하도록 설정합니다.
# ================================================================
# 단계 1: Synology NAS에서 설정 디렉토리 생성
# ================================================================
# SSH로 NAS에 접속하거나 File Station에서 생성
mkdir -p /volume1/docker/postgres/config
# ================================================================
# 단계 2: pg_hba.conf 파일 생성
# ================================================================
# File Station에서 텍스트 편집기로 생성하거나 SSH에서:
cat > /volume1/docker/postgres/config/pg_hba.conf << 'EOF'
# PostgreSQL Client Authentication Configuration File
# ====================================================
# TYPE DATABASE USER ADDRESS METHOD
# 로컬 소켓 연결 (컨테이너 내부에서)
local all all trust
# localhost IPv4 연결
host all all 127.0.0.1/32 scram-sha-256
# localhost IPv6 연결
host all all ::1/128 scram-sha-256
# Docker 네트워크 내부 연결 (같은 NAS의 다른 컨테이너)
host all all 172.0.0.0/8 scram-sha-256
# ================================================================
# 원격 연결 허용 설정 (Mac Mini에서의 접근)
# ================================================================
# 옵션 A: 특정 IP만 허용 (보안상 권장)
# Mac Mini가 있는 네트워크의 공인 IP
host all all 61.85.213.191/32 scram-sha-256
# 옵션 B: 모든 IP 허용 (테스트용, 프로덕션 비권장)
# host all all 0.0.0.0/0 scram-sha-256
EOF
# 파일 권한 설정
chmod 644 /volume1/docker/postgres/config/pg_hba.conf
# ================================================================
# 단계 3: docker-compose.yml에서 설정 파일 마운트
# ================================================================
version: "3.8"
services:
postgres:
image: postgres:18-alpine
container_name: postgres-shared
restart: unless-stopped
ports:
- "0.0.0.0:5432:5432"
environment:
POSTGRES_USER: n8n_user
POSTGRES_PASSWORD: "YourStr0ng!P@ssw0rd#2024"
POSTGRES_DB: n8n_production
volumes:
# 데이터 영구 저장
- /volume1/docker/postgres/data:/var/lib/postgresql/data
# ★ 핵심: 커스텀 pg_hba.conf 마운트
- /volume1/docker/postgres/config/pg_hba.conf:/var/lib/postgresql/data/pg_hba.conf
command: >
postgres
-c listen_addresses='*'
-c log_connections=on
networks:
- database_network
┌───────────────────────────────────────────────────────────────────────────┐
│ 볼륨 마운트 방식의 파일 구조 │
├───────────────────────────────────────────────────────────────────────────┤
│ │
│ Synology NAS 파일 시스템 │
│ ───────────────────────── │
│ /volume1/docker/postgres/ │
│ ├── config/ │
│ │ └── pg_hba.conf ← 여기서 직접 수정 가능! │
│ │ (File Station 또는 SSH) │
│ ├── data/ │
│ │ ├── base/ │
│ │ ├── global/ │
│ │ ├── pg_hba.conf ← 마운트되어 config/pg_hba.conf를 가리킴 │
│ │ └── ... (PostgreSQL 데이터) │
│ └── docker-compose.yml │
│ │
│ # 장점: │
│ • File Station에서 GUI로 편집 가능 │
│ • SSH로 vim/nano 등으로 편집 가능 │
│ • 컨테이너 재생성해도 설정 유지 │
│ • 버전 관리(Git) 가능 │
│ │
└───────────────────────────────────────────────────────────────────────────┘
방법 2: 실행 중인 컨테이너에 직접 접속하여 수정
이미 실행 중인 컨테이너의 pg_hba.conf를 임시로 확인하거나 수정해야 할 때 사용하는 방법입니다. docker exec 명령으로 컨테이너 내부에 접속하여 파일을 직접 수정할 수 있습니다. 하지만 이 방법은 컨테이너를 재생성하면 수정 내용이 사라지므로, 테스트 목적으로만 사용하는 것이 좋습니다. 영구적인 설정 변경은 반드시 방법 1(볼륨 마운트)을 사용해야 합니다.
# ================================================================
# SSH로 Synology NAS에 접속한 후 실행
# ================================================================
# 1. 실행 중인 컨테이너 확인
docker ps | grep postgres
# 출력: abc123def456 postgres:18-alpine ... postgres-shared
# 2. 컨테이너 내부에 쉘로 접속
docker exec -it postgres-shared /bin/bash
# ================================================================
# 컨테이너 내부에서 실행 (프롬프트가 바뀜)
# ================================================================
# 3. pg_hba.conf 파일 위치 확인
# PostgreSQL Alpine 이미지에서의 기본 위치
cat /var/lib/postgresql/data/pg_hba.conf
# 4. 현재 설정 확인
cat /var/lib/postgresql/data/pg_hba.conf
# 5. 파일 수정 (Alpine에는 vi만 있음)
vi /var/lib/postgresql/data/pg_hba.conf
# vi 사용법:
# - i : 편집 모드 진입
# - ESC : 명령 모드로 돌아가기
# - :wq : 저장하고 종료
# - :q! : 저장 안하고 종료
# 6. 컨테이너에서 나가기
exit
# ================================================================
# 컨테이너 외부 (NAS 쉘)에서 실행
# ================================================================
# 7. PostgreSQL 설정 다시 로드 (재시작 없이 적용)
docker exec -it postgres-shared psql -U n8n_user -d n8n_production -c "SELECT pg_reload_conf();"
# 또는 컨테이너 재시작
docker restart postgres-shared
방법 2 주의사항
이 방법의 한계:
1. 컨테이너 재생성 시 수정 내용 손실
• docker-compose down && docker-compose up -d 하면 초기화됨
2. 이미지 업그레이드 시 수정 내용 손실
• 새 버전 이미지로 교체하면 초기화됨
3. 볼륨이 마운트되어 있다면 영구 저장됨
• /var/lib/postgresql/data가 볼륨에 마운트되어 있으면,그 안의 pg_hba.conf도 호스트에 저장되어 유지됨
# 권장 사용 시나리오:
• 현재 설정 확인 (읽기 전용)
• 임시 테스트 목적
• 문제 진단 및 디버깅
방법 3: Synology Container Manager GUI에서 터미널 접속
SSH에 익숙하지 않다면 Synology DSM의 Container Manager 패키지에서 제공하는 GUI 터미널 기능을 사용할 수 있습니다. 웹 브라우저에서 NAS에 접속하여 그래픽 인터페이스로 컨테이너 내부에 접근할 수 있어, 명령줄에 익숙하지 않은 분들도 쉽게 설정을 확인하고 수정할 수 있습니다. 단, 이 방법도 방법 2와 마찬가지로 영구적인 설정 변경에는 적합하지 않습니다.
Container Manager GUI에서 터미널 접속하기
1. DSM 웹 인터페이스 접속
→ 브라우저에서 http://192.168.0.4:5000 또는 QuickConnect 주소
2. Container Manager 실행
→ 패키지 센터에서 설치되어 있어야 함
→ 메인 메뉴에서 Container Manager 아이콘 클릭
3. 컨테이너 목록에서 postgres-shared 선택
→ 왼쪽 메뉴: 컨테이너
→ 목록에서 postgres-shared 클릭
4. 상세 정보 창에서 "터미널" 탭 클릭
5. "생성" 버튼으로 새 터미널 세션 시작
→ bash 또는 sh 선택
→ 컨테이너 내부 명령줄 사용 가능
6. pg_hba.conf 확인
cat /var/lib/postgresql/data/pg_hba.conf
pg_hba.conf 수정 후 적용 방법
pg_hba.conf 파일을 수정한 후에는 PostgreSQL이 새 설정을 읽도록 해야 합니다. 컨테이너를 완전히 재시작하는 방법과 설정만 다시 로드하는 방법이 있습니다. 설정만 다시 로드하는 방법을 사용하면 서비스 중단 없이 변경사항을 적용할 수 있어 프로덕션 환경에서 유용합니다. 다만, 일부 설정(예: listen_addresses)은 재시작해야만 적용되므로 상황에 따라 적절한 방법을 선택해야 합니다.
# ================================================================
# pg_hba.conf 변경사항 적용하기
# ================================================================
# 방법 A: PostgreSQL 설정 리로드 (서비스 중단 없음, 권장)
# ────────────────────────────────────────────────────────────────
# NAS SSH에서 실행
docker exec -it postgres-shared psql -U n8n_user -d n8n_production \
-c "SELECT pg_reload_conf();"
# 성공시 출력:
# pg_reload_conf
# ----------------
# t
# (1 row)
# 방법 B: 컨테이너 재시작 (몇 초간 서비스 중단)
# ────────────────────────────────────────────────────────────────
docker restart postgres-shared
# 방법 C: Docker Compose로 재시작
# ────────────────────────────────────────────────────────────────
cd /volume1/docker/database
docker-compose restart postgres
# ================================================================
# 설정 적용 확인하기
# ================================================================
# 현재 로드된 pg_hba.conf 규칙 확인
docker exec -it postgres-shared psql -U n8n_user -d n8n_production \
-c "SELECT * FROM pg_hba_file_rules;"
# 특정 IP에서의 연결이 어떤 규칙에 매칭되는지 확인
docker exec -it postgres-shared psql -U n8n_user -d n8n_production \
-c "SELECT * FROM pg_hba_file_rules WHERE address = '61.85.213.191/32';"
5. Synology NAS 측 Docker Compose 설정
PostgreSQL 컨테이너 설정
Synology NAS에 PostgreSQL을 설정할 때는 외부 접근을 허용하도록 구성해야 합니다.
기본적으로 PostgreSQL은 localhost에서의 접근만 허용하지만, 원격 네트워크에서 접근하려면 모든 인터페이스에서 연결을 수신하도록 설정해야 합니다. 또한 보안을 위해 강력한 패스워드를 설정하고, 필요한 경우 SSL 연결을 강제할 수 있습니다. Docker의 포트 매핑에서 0.0.0.0:5432:5432로 설정하면 호스트의 모든 네트워크 인터페이스에서 5432 포트로의 접근이 컨테이너로 전달됩니다.
# Synology NAS: /volume1/docker/database/docker-compose.yml
version: "3.8"
services:
postgres:
image: postgres:18-alpine
container_name: postgres-shared
restart: unless-stopped
ports:
# 0.0.0.0은 모든 네트워크 인터페이스에서 수신을 의미합니다
# 이렇게 해야 외부 네트워크에서의 접근이 가능합니다
- "0.0.0.0:5432:5432"
environment:
# 보안을 위해 강력한 패스워드를 사용하세요
POSTGRES_USER: n8n_user
POSTGRES_PASSWORD: "YourStr0ng!P@ssw0rd#2024"
POSTGRES_DB: n8n_production
# 모든 IP에서의 연결을 허용 (실제 보안은 pg_hba.conf에서 처리)
POSTGRES_HOST_AUTH_METHOD: scram-sha-256
volumes:
# Synology NAS의 영구 저장소에 데이터 저장
- /volume1/docker/postgres/data:/var/lib/postgresql/data
# 커스텀 설정 파일 마운트 (원격 접근 허용 설정)
- /volume1/docker/postgres/config/pg_hba.conf:/etc/postgresql/pg_hba.conf
command: >
postgres
-c listen_addresses='*'
-c hba_file=/etc/postgresql/pg_hba.conf
-c log_connections=on
-c log_disconnections=on
networks:
- database_network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U n8n_user -d n8n_production"]
interval: 30s
timeout: 10s
retries: 5
PostgreSQL 원격 접근 설정 파일 (pg_hba.conf)
PostgreSQL의 pg_hba.conf 파일은 클라이언트 인증을 제어하는 핵심 설정 파일입니다.
이 파일에서 어떤 IP 대역에서 어떤 인증 방식으로 접근을 허용할지 정의합니다. 원격 네트워크에서 접근을 허용하려면 해당 네트워크의 IP 대역을 명시적으로 추가해야 합니다. 0.0.0.0/0으로 설정하면 모든 IP에서 접근이 가능하지만, 보안상 권장하지 않습니다. 가능하다면 Mac Mini가 있는 네트워크의 공인 IP를 명시적으로 지정하는 것이 좋습니다.
# /volume1/docker/postgres/config/pg_hba.conf
# PostgreSQL Client Authentication Configuration File
# TYPE DATABASE USER ADDRESS METHOD
# 로컬 소켓 연결 허용
local all all trust
# localhost IPv4 연결 허용
host all all 127.0.0.1/32 scram-sha-256
# localhost IPv6 연결 허용
host all all ::1/128 scram-sha-256
# 같은 Docker 네트워크 내 연결 허용 (172.x.x.x 대역)
host all all 172.0.0.0/8 scram-sha-256
# Mac Mini 네트워크에서의 연결 허용 (공인 IP 기반)
# 특정 IP만 허용하여 보안 강화
host all all 61.85.213.191/32 scram-sha-256
# 또는 더 넓은 대역을 허용 (권장하지 않음)
# host all all 0.0.0.0/0 scram-sha-256
Redis 컨테이너 설정
Redis 역시 외부 네트워크에서의 접근을 허용하도록 설정해야 합니다.
Redis는 기본적으로 인증 없이 사용할 수 있지만, 원격 접근을 허용할 때는 반드시 패스워드를 설정해야 합니다. --requirepass 옵션으로 패스워드를 설정하고, --bind 0.0.0.0으로 모든 인터페이스에서의 접근을 허용합니다. 또한 --protected-mode no 옵션을 통해 보호 모드를 비활성화해야 외부에서 접근할 수 있습니다. AOF(Append Only File) 영구 저장을 활성화하여 데이터 손실을 방지하는 것도 중요합니다.
redis:
image: redis:8-alpine
container_name: redis-shared
restart: unless-stopped
ports:
# 모든 인터페이스에서 6379 포트 수신
- "0.0.0.0:6379:6379"
command: >
redis-server
--appendonly yes
--appendfsync everysec
--bind 0.0.0.0
--protected-mode no
--requirepass "YourR3d!sP@ssw0rd#2024"
--maxmemory 512mb
--maxmemory-policy allkeys-lru
volumes:
# Redis 데이터 영구 저장
- /volume1/docker/redis/data:/data
networks:
- database_network
healthcheck:
test: ["CMD", "redis-cli", "-a", "YourR3d!sP@ssw0rd#2024", "ping"]
interval: 30s
timeout: 10s
retries: 5
networks:
database_network:
driver: bridge
ipam:
config:
- subnet: 172.28.0.0/16
Synology NAS 측 전체 docker-compose.yml
위의 설정들을 모두 합친 전체 Docker Compose 파일입니다. 이 파일은 Synology NAS의 Container Manager에서 프로젝트로 배포하거나, SSH로 접속하여 docker-compose 명령으로 실행할 수 있습니다. 모든 서비스가 동일한 Docker 네트워크에 속해 있어 컨테이너 간 통신이 원활하며, 호스트의 5432와 6379 포트가 외부에 노출되어 원격 접근이 가능합니다. 데이터는 Synology NAS의 볼륨에 영구 저장되어 컨테이너가 재시작되어도 데이터가 보존됩니다.
# Synology NAS: /volume1/docker/database/docker-compose.yml
# 전체 설정 파일
version: "3.8"
services:
postgres:
image: postgres:18-alpine
container_name: postgres-shared
restart: unless-stopped
ports:
- "0.0.0.0:5432:5432"
environment:
POSTGRES_USER: n8n_user
POSTGRES_PASSWORD: "YourStr0ng!P@ssw0rd#2024"
POSTGRES_DB: n8n_production
POSTGRES_HOST_AUTH_METHOD: scram-sha-256
volumes:
- /volume1/docker/postgres/data:/var/lib/postgresql/data
- /volume1/docker/postgres/config/pg_hba.conf:/etc/postgresql/pg_hba.conf
command: >
postgres
-c listen_addresses='*'
-c hba_file=/etc/postgresql/pg_hba.conf
-c log_connections=on
-c log_disconnections=on
networks:
- database_network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U n8n_user -d n8n_production"]
interval: 30s
timeout: 10s
retries: 5
redis:
image: redis:8-alpine
container_name: redis-shared
restart: unless-stopped
ports:
- "0.0.0.0:6379:6379"
command: >
redis-server
--appendonly yes
--appendfsync everysec
--bind 0.0.0.0
--protected-mode no
--requirepass "YourR3d!sP@ssw0rd#2024"
--maxmemory 512mb
--maxmemory-policy allkeys-lru
volumes:
- /volume1/docker/redis/data:/data
networks:
- database_network
healthcheck:
test: ["CMD", "redis-cli", "-a", "YourR3d!sP@ssw0rd#2024", "ping"]
interval: 30s
timeout: 10s
retries: 5
networks:
database_network:
driver: bridge
ipam:
config:
- subnet: 172.28.0.0/16
6. Mac Mini 측 Docker Compose 설정
n8n Main 인스턴스 설정
Mac Mini에서 실행되는 n8n Main 인스턴스는 웹 인터페이스 제공과 워크플로우 관리를 담당합니다. 가장 중요한 설정은 데이터베이스 연결 정보입니다. DB_POSTGRESDB_HOST에는 Synology NAS가 있는 네트워크의 공인 IP인 210.183.92.82를 지정해야 합니다. 이 주소로 연결 요청을 보내면, 인터넷을 통해 NAS 측 라우터에 도달하고, 포트포워딩을 통해 PostgreSQL 컨테이너로 전달됩니다. Redis 연결도 마찬가지로 공인 IP를 사용합니다.
# Mac Mini: ~/docker/n8n/docker-compose.yml
version: "3.8"
services:
n8n-main:
image: docker.n8n.io/n8nio/n8n:latest
container_name: n8n-main
restart: unless-stopped
ports:
# n8n 웹 UI 및 웹훅 수신 포트
- "0.0.0.0:5678:5678"
environment:
# 기본 설정
N8N_HOST: 0.0.0.0
N8N_PORT: 5678
N8N_PROTOCOL: https
WEBHOOK_URL: https://n8n.yourdomain.com/
# 큐 모드 활성화 (워커와 함께 사용)
EXECUTIONS_MODE: queue
# ============================================
# 핵심 설정: 원격 PostgreSQL 연결
# Synology NAS의 공인 IP를 사용합니다
# ============================================
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: 210.183.92.82
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_DATABASE: n8n_production
DB_POSTGRESDB_USER: n8n_user
DB_POSTGRESDB_PASSWORD: "YourStr0ng!P@ssw0rd#2024"
# PostgreSQL SSL 설정 (선택사항, 보안 강화시 활성화)
# DB_POSTGRESDB_SSL_ENABLED: true
# DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED: false
# ============================================
# 핵심 설정: 원격 Redis 연결
# Synology NAS의 공인 IP를 사용합니다
# ============================================
QUEUE_BULL_REDIS_HOST: 210.183.92.82
QUEUE_BULL_REDIS_PORT: 6379
QUEUE_BULL_REDIS_PASSWORD: "YourR3d!sP@ssw0rd#2024"
QUEUE_BULL_REDIS_DB: 0
# 보안 설정
N8N_ENCRYPTION_KEY: "your-32-character-encryption-key!"
volumes:
- n8n_data:/home/node/.n8n
networks:
- n8n_network
healthcheck:
test: ["CMD-SHELL", "wget --spider -q http://localhost:5678/healthz || exit 1"]
interval: 30s
timeout: 10s
retries: 5
n8n Worker 설정
n8n Worker는 실제 워크플로우 실행을 담당하는 컴포넌트입니다. Worker도 Main 인스턴스와 동일한 데이터베이스와 Redis에 연결해야 하므로, 같은 공인 IP를 사용합니다. deploy.replicas 설정을 통해 여러 개의 워커 인스턴스를 생성할 수 있으며, 이 예제에서는 3개의 워커를 구성했습니다. 각 워커는 독립적으로 작업을 가져와 처리하며, Redis를 통해 작업 큐를 공유합니다. 이러한 구성을 통해 많은 양의 워크플로우를 병렬로 처리할 수 있습니다.
n8n-worker:
image: docker.n8n.io/n8nio/n8n:latest
container_name: n8n-worker
restart: unless-stopped
# 워커는 포트를 외부에 노출할 필요가 없습니다
command: worker
environment:
# 큐 모드로 워커 실행
EXECUTIONS_MODE: queue
# ============================================
# 원격 PostgreSQL 연결 (Main과 동일)
# ============================================
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: 210.183.92.82
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_DATABASE: n8n_production
DB_POSTGRESDB_USER: n8n_user
DB_POSTGRESDB_PASSWORD: "YourStr0ng!P@ssw0rd#2024"
# ============================================
# 원격 Redis 연결 (Main과 동일)
# ============================================
QUEUE_BULL_REDIS_HOST: 210.183.92.82
QUEUE_BULL_REDIS_PORT: 6379
QUEUE_BULL_REDIS_PASSWORD: "YourR3d!sP@ssw0rd#2024"
QUEUE_BULL_REDIS_DB: 0
# 보안 설정 (Main과 동일한 키 사용 필수)
N8N_ENCRYPTION_KEY: "your-32-character-encryption-key!"
# 워커별 동시 처리 작업 수
N8N_CONCURRENCY_PRODUCTION_LIMIT: 10
volumes:
- n8n_data:/home/node/.n8n
networks:
- n8n_network
deploy:
# 3개의 워커 인스턴스 실행
replicas: 3
resources:
limits:
cpus: '2'
memory: 2G
Mac Mini 측 전체 docker-compose.yml
Mac Mini의 전체 Docker Compose 설정 파일입니다. n8n Main과 Worker가 모두 포함되어 있으며, 공유 볼륨을 통해 데이터를 공유합니다. 모든 서비스가 동일한 Docker 네트워크에 속해 있어 필요시 서로 통신할 수 있습니다. 외부에는 n8n Main의 5678 포트만 노출되며, 이 포트를 통해 웹 UI 접근과 웹훅 수신이 이루어집니다. 데이터베이스와 Redis는 원격의 Synology NAS에 있으므로, Mac Mini의 Docker Compose에는 데이터베이스 서비스가 포함되지 않습니다.
# Mac Mini: ~/docker/n8n/docker-compose.yml
# 전체 설정 파일
version: "3.8"
services:
n8n-main:
image: docker.n8n.io/n8nio/n8n:latest
container_name: n8n-main
restart: unless-stopped
ports:
- "0.0.0.0:5678:5678"
environment:
N8N_HOST: 0.0.0.0
N8N_PORT: 5678
N8N_PROTOCOL: https
WEBHOOK_URL: https://n8n.yourdomain.com/
EXECUTIONS_MODE: queue
# 원격 PostgreSQL (Synology NAS 공인 IP)
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: 210.183.92.82
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_DATABASE: n8n_production
DB_POSTGRESDB_USER: n8n_user
DB_POSTGRESDB_PASSWORD: "YourStr0ng!P@ssw0rd#2024"
# 원격 Redis (Synology NAS 공인 IP)
QUEUE_BULL_REDIS_HOST: 210.183.92.82
QUEUE_BULL_REDIS_PORT: 6379
QUEUE_BULL_REDIS_PASSWORD: "YourR3d!sP@ssw0rd#2024"
QUEUE_BULL_REDIS_DB: 0
N8N_ENCRYPTION_KEY: "your-32-character-encryption-key!"
volumes:
- n8n_data:/home/node/.n8n
networks:
- n8n_network
healthcheck:
test: ["CMD-SHELL", "wget --spider -q http://localhost:5678/healthz || exit 1"]
interval: 30s
timeout: 10s
retries: 5
depends_on:
- n8n-worker
n8n-worker:
image: docker.n8n.io/n8nio/n8n:latest
restart: unless-stopped
command: worker
environment:
EXECUTIONS_MODE: queue
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: 210.183.92.82
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_DATABASE: n8n_production
DB_POSTGRESDB_USER: n8n_user
DB_POSTGRESDB_PASSWORD: "YourStr0ng!P@ssw0rd#2024"
QUEUE_BULL_REDIS_HOST: 210.183.92.82
QUEUE_BULL_REDIS_PORT: 6379
QUEUE_BULL_REDIS_PASSWORD: "YourR3d!sP@ssw0rd#2024"
QUEUE_BULL_REDIS_DB: 0
N8N_ENCRYPTION_KEY: "your-32-character-encryption-key!"
N8N_CONCURRENCY_PRODUCTION_LIMIT: 10
volumes:
- n8n_data:/home/node/.n8n
networks:
- n8n_network
deploy:
replicas: 3
resources:
limits:
cpus: '2'
memory: 2G
volumes:
n8n_data:
driver: local
networks:
n8n_network:
driver: bridge
7. 라우터 포트포워딩 설정 가이드
Synology NAS 측 라우터 설정 (네트워크 A)
Synology NAS가 있는 네트워크의 라우터에서는 PostgreSQL과 Redis 포트를 포워딩해야 합니다.
외부에서 공인 IP(210.183.92.82)의 5432 포트로 접속하면, 라우터가 이를 내부의 Synology NAS(192.168.0.4)의 5432 포트로 전달합니다. 마찬가지로 6379 포트도 Redis를 위해 포워딩합니다. 대부분의 라우터에서 이 설정은 "포트포워딩", "가상 서버", 또는 "NAT 설정" 메뉴에서 찾을 수 있습니다. 설정시 TCP 프로토콜을 선택해야 하며, UDP는 필요하지 않습니다.
┌─────────────────────────────────────────────────────────────────┐
│ 네트워크 A 라우터 포트포워딩 설정 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 규칙 1: PostgreSQL 포트포워딩 │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 서비스 이름 : PostgreSQL │ │
│ │ 프로토콜 : TCP │ │
│ │ 외부 포트 : 5432 │ │
│ │ 내부 IP : 192.168.0.4 (Synology NAS) │ │
│ │ 내부 포트 : 5432 │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
│ 규칙 2: Redis 포트포워딩 │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 서비스 이름 : Redis │ │
│ │ 프로토콜 : TCP │ │
│ │ 외부 포트 : 6379 │ │
│ │ 내부 IP : 192.168.0.4 (Synology NAS) │ │
│ │ 내부 포트 : 6379 │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
│ [참고] ipTIME 라우터의 경우: │
│ 관리도구 → 고급설정 → NAT/라우터 관리 → 포트포워드 설정 │
│ │
└─────────────────────────────────────────────────────────────────┘
Mac Mini 측 라우터 설정 (네트워크 B)
Mac Mini 측 라우터에서는 n8n 웹훅을 수신하기 위해 5678 포트를 포워딩해야 합니다.
만약 n8n 웹 UI에 외부에서 직접 접근하지 않고 VPN이나 Cloudflare Tunnel 등을 사용한다면, 이 포트포워딩은 생략해도 됩니다. 웹훅 URL을 외부에 공개해야 하는 경우에만 포트포워딩이 필요합니다. 보안을 위해 가능하다면 HTTPS를 사용하고, 앞단에 Nginx 리버스 프록시를 두어 SSL 종료를 처리하는 것을 권장합니다.
┌─────────────────────────────────────────────────────────────────┐
│ 네트워크 B 라우터 포트포워딩 설정 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 규칙 1: n8n 웹 UI 및 웹훅 포트포워딩 │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 서비스 이름 : n8n │ │
│ │ 프로토콜 : TCP │ │
│ │ 외부 포트 : 5678 │ │
│ │ 내부 IP : 192.168.10.10 (Mac Mini) │ │
│ │ 내부 포트 : 5678 │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
│ [선택사항] HTTPS 사용시 (권장) │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 서비스 이름 : n8n-https │ │
│ │ 프로토콜 : TCP │ │
│ │ 외부 포트 : 443 │ │
│ │ 내부 IP : 192.168.10.10 (Mac Mini) │ │
│ │ 내부 포트 : 443 │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
ipTIME 라우터에서의 실제 설정 방법
국내에서 많이 사용하는 ipTIME 라우터를 예로 들어 실제 설정 방법을 설명드립니다. 먼저 웹 브라우저에서 192.168.0.1(기본값)로 접속하여 관리자 페이지에 로그인합니다. 왼쪽 메뉴에서 "고급설정"을 클릭한 후, "NAT/라우터 관리" 아래의 "포트포워드 설정"으로 이동합니다. 여기서 "새 규칙 추가" 버튼을 클릭하고, 위에서 설명한 정보들을 입력합니다. 규칙 추가 후에는 "적용" 버튼을 눌러 설정을 저장해야 합니다.
ipTIME 라우터 설정 단계별 가이드
1. 관리자 페이지 접속
→ 브라우저에서 http://192.168.0.1 접속
→ 관리자 계정으로 로그인
2. 포트포워드 설정 메뉴 이동
→ 고급설정 → NAT/라우터 관리 → 포트포워드 설정
3. PostgreSQL 규칙 추가
• 규칙이름 │ PostgreSQL
• 내부 IP 주소 │ 192.168.0.4
• 프로토콜 │ TCP
• 외부 포트 │ 5432
• 내부 포트 │ 5432
4. Redis 규칙 추가
• 규칙이름 │ Redis
• 내부 IP 주소 │ 192.168.0.4
• 프로토콜 │ TCP
• 외부 포트 │ 6379
• 내부 포트 │ 6379
5. 설정 저장
→ "적용" 버튼 클릭
8. 네트워크 연결 테스트 및 트러블슈팅
Mac Mini에서 원격 연결 테스트
설정을 완료한 후에는 반드시 연결이 정상적으로 되는지 테스트해야 합니다. Mac Mini에서 터미널을 열고 다음 명령어들을 실행하여 Synology NAS의 PostgreSQL과 Redis에 접근할 수 있는지 확인합니다. 먼저 nc(netcat) 명령으로 포트가 열려있는지 확인하고, 그 다음 실제 클라이언트로 연결을 시도합니다. 연결이 실패하는 경우에는 라우터 포트포워딩, 방화벽 설정, 서비스 상태 등을 순차적으로 점검해야 합니다.
# ============================================
# Mac Mini 터미널에서 실행하는 연결 테스트
# ============================================
# 1. PostgreSQL 포트 연결 테스트
echo "PostgreSQL 포트 테스트..."
nc -zv 210.183.92.82 5432
# 성공시: Connection to 210.183.92.82 port 5432 [tcp/postgresql] succeeded!
# 2. Redis 포트 연결 테스트
echo "Redis 포트 테스트..."
nc -zv 210.183.92.82 6379
# 성공시: Connection to 210.183.92.82 port 6379 [tcp/redis] succeeded!
# 3. PostgreSQL 실제 연결 테스트 (psql 클라이언트 필요)
echo "PostgreSQL 연결 테스트..."
PGPASSWORD="YourStr0ng!P@ssw0rd#2024" psql \
-h 210.183.92.82 \
-p 5432 \
-U n8n_user \
-d n8n_production \
-c "SELECT version();"
# 4. Redis 실제 연결 테스트 (redis-cli 필요)
echo "Redis 연결 테스트..."
redis-cli -h 210.183.92.82 -p 6379 -a "YourR3d!sP@ssw0rd#2024" PING
# 성공시: PONG
# 5. Docker 컨테이너에서 테스트 (더 정확한 테스트)
docker run --rm postgres:18-alpine \
sh -c "PGPASSWORD='YourStr0ng!P@ssw0rd#2024' psql \
-h 210.183.92.82 \
-p 5432 \
-U n8n_user \
-d n8n_production \
-c 'SELECT 1'"
일반적인 연결 문제와 해결 방법
네트워크 연결 문제는 여러 단계에서 발생할 수 있으며, 체계적인 접근이 필요합니다. 가장 흔한 문제는 라우터의 포트포워딩이 제대로 설정되지 않은 경우입니다. 또한 ISP에서 특정 포트를 차단하는 경우도 있으므로, 이 경우 다른 포트 번호를 사용해야 합니다. 방화벽 설정도 중요한 점검 사항이며, Synology NAS의 방화벽 설정에서 해당 포트에 대한 외부 접근이 허용되어 있는지 확인해야 합니다.
# ============================================
# 트러블슈팅 가이드
# ============================================
# 문제 1: "Connection refused" 오류
# → 원인: 서비스가 실행 중이지 않거나 포트가 열려있지 않음
# → 해결:
# 1. Synology NAS에서 컨테이너 상태 확인
docker ps | grep postgres
docker ps | grep redis
# 2. 컨테이너 로그 확인
docker logs postgres-shared
docker logs redis-shared
# 문제 2: "Connection timed out" 오류
# → 원인: 포트포워딩이 설정되지 않았거나 방화벽에서 차단
# → 해결:
# 1. 라우터 포트포워딩 설정 재확인
# 2. Synology NAS 방화벽 설정 확인
# - 제어판 → 보안 → 방화벽 → 규칙 편집
# 3. ISP에서 포트 차단 여부 확인
# 문제 3: "Authentication failed" 오류
# → 원인: 잘못된 사용자명/패스워드 또는 pg_hba.conf 설정 오류
# → 해결:
# 1. docker-compose.yml의 환경 변수 확인
# 2. pg_hba.conf에서 Mac Mini IP가 허용되어 있는지 확인
# 3. 패스워드에 특수문자가 있다면 따옴표로 감싸기
# 문제 4: 간헐적 연결 끊김
# → 원인: 네트워크 불안정 또는 NAT 타임아웃
# → 해결:
# 1. PostgreSQL에 keepalive 설정 추가
# 2. Redis에 timeout 설정 조정
# 3. 네트워크 품질 확인 (ping, traceroute)
# Synology NAS 방화벽에서 포트 허용 (DSM 웹 UI에서)
# 제어판 → 보안 → 방화벽 → 규칙 편집 → 생성
# - 포트: 5432, 6379
# - 소스 IP: 전체 또는 특정 IP
# - 동작: 허용
연결 상태 모니터링
운영 환경에서는 연결 상태를 지속적으로 모니터링하는 것이 중요합니다. 간단한 스크립트를 만들어 주기적으로 연결을 확인하고, 문제 발생시 알림을 받을 수 있도록 설정할 수 있습니다. 아래 스크립트는 PostgreSQL과 Redis 연결을 확인하고, 실패시 로그를 남기는 예제입니다. 이 스크립트를 cron에 등록하여 주기적으로 실행하면, 연결 문제를 조기에 발견할 수 있습니다.
#!/bin/bash
# health-check.sh - 원격 데이터베이스 연결 상태 확인 스크립트
NAS_IP="210.183.92.82"
POSTGRES_PORT="5432"
REDIS_PORT="6379"
LOG_FILE="/var/log/n8n-health.log"
check_postgres() {
if nc -z -w5 $NAS_IP $POSTGRES_PORT 2>/dev/null; then
echo "$(date): PostgreSQL - OK" >> $LOG_FILE
return 0
else
echo "$(date): PostgreSQL - FAILED" >> $LOG_FILE
return 1
fi
}
check_redis() {
if nc -z -w5 $NAS_IP $REDIS_PORT 2>/dev/null; then
echo "$(date): Redis - OK" >> $LOG_FILE
return 0
else
echo "$(date): Redis - FAILED" >> $LOG_FILE
return 1
fi
}
# 연결 확인 실행
check_postgres
PG_STATUS=$?
check_redis
REDIS_STATUS=$?
# 문제 발생시 알림 (선택적)
if [ $PG_STATUS -ne 0 ] || [ $REDIS_STATUS -ne 0 ]; then
# 여기에 알림 로직 추가 (이메일, Slack 등)
echo "$(date): 연결 문제 감지!" >> $LOG_FILE
fi
9. 보안 강화 방안
VPN을 통한 연결 (권장)
공인 IP를 통해 데이터베이스 포트를 직접 노출하는 것은 보안상 권장되지 않습니다. 더 안전한 방법은 VPN을 통해 두 네트워크를 연결하는 것입니다. WireGuard나 OpenVPN을 사용하면 암호화된 터널을 통해 두 네트워크가 마치 하나의 네트워크처럼 통신할 수 있습니다. 이 경우 포트포워딩 없이도 사설 IP를 직접 사용할 수 있어 보안이 크게 향상됩니다. Synology NAS는 VPN Server 패키지를 통해 WireGuard를 지원하므로, 이를 활용하는 것을 강력히 권장합니다.
# VPN 사용시 docker-compose.yml 설정 (Mac Mini)
# VPN으로 연결되면 사설 IP를 직접 사용할 수 있습니다
services:
n8n-main:
environment:
# VPN을 통해 연결되면 사설 IP 사용 가능
# 포트포워딩 불필요, 더 안전함
DB_POSTGRESDB_HOST: 192.168.0.4 # NAS 사설 IP
DB_POSTGRESDB_PORT: 5432
QUEUE_BULL_REDIS_HOST: 192.168.0.4 # NAS 사설 IP
QUEUE_BULL_REDIS_PORT: 6379
# WireGuard VPN 설정 예시 (Mac Mini wg0.conf)
# [Interface]
# PrivateKey = <Mac Mini 개인키>
# Address = 10.0.0.2/24
#
# [Peer]
# PublicKey = <Synology NAS 공개키>
# AllowedIPs = 192.168.0.0/24
# Endpoint = 210.183.92.82:51820
# PersistentKeepalive = 25
포트 번호 변경을 통한 보안 강화
기본 포트를 사용하면 자동화된 스캐닝 공격의 대상이 되기 쉽습니다. PostgreSQL의 5432, Redis의 6379는 매우 잘 알려진 포트이므로, 이를 다른 번호로 변경하면 기본적인 수준의 보안을 추가할 수 있습니다. 물론 이것만으로 충분한 보안이 되지는 않지만, 무차별 대입 공격의 빈도를 줄이는 데 도움이 됩니다. 포트를 변경할 때는 라우터의 포트포워딩 설정과 Docker Compose의 환경 변수를 모두 수정해야 합니다.
# 비표준 포트 사용 예시
# Synology NAS docker-compose.yml
services:
postgres:
ports:
# 외부에서는 15432로 접근, 내부는 5432 유지
- "0.0.0.0:15432:5432"
redis:
ports:
# 외부에서는 16379로 접근, 내부는 6379 유지
- "0.0.0.0:16379:6379"
# Mac Mini docker-compose.yml
services:
n8n-main:
environment:
# 변경된 포트 번호 사용
DB_POSTGRESDB_PORT: 15432
QUEUE_BULL_REDIS_PORT: 16379
# 라우터 포트포워딩도 수정 필요
# 외부 15432 → 내부 192.168.0.4:15432
# 외부 16379 → 내부 192.168.0.4:16379
Fail2Ban을 통한 무차별 대입 공격 방어
Fail2Ban은 반복적인 실패한 로그인 시도를 감지하여 해당 IP를 자동으로 차단하는 도구입니다. PostgreSQL과 Redis의 인증 실패 로그를 모니터링하여, 특정 횟수 이상 실패하면 해당 IP를 방화벽에서 차단합니다. Synology NAS에서는 DSM의 자동 차단 기능을 사용할 수 있으며, 더 세밀한 제어가 필요하다면 Docker로 Fail2Ban을 실행할 수도 있습니다. 이러한 방어 메커니즘은 특히 공인 IP로 서비스를 노출할 때 필수적입니다.
Synology DSM 자동 차단 설정:
1. 제어판 → 보안 → 보호 → 자동 차단 활성화
2. 설정 예시:
- 로그인 시도 횟수: 5회
- 시간 범위: 5분
- 차단 기간: 영구 (또는 1일 등)
- 신뢰할 수 있는 IP 추가: Mac Mini 공인 IP
3. 차단된 IP 관리:
- 제어판 → 보안 → 보호 → 차단 목록
- 필요시 수동으로 차단 해제 가능
10. 환경 변수 관리 및 비밀 정보 보호
.env 파일을 통한 설정 분리
실제 운영 환경에서는 패스워드와 같은 민감한 정보를 docker-compose.yml에 직접 작성하지 않는 것이 좋습니다. 대신 .env 파일에 환경 변수를 정의하고, docker-compose.yml에서 이를 참조하도록 합니다. .env 파일은 반드시 .gitignore에 추가하여 버전 관리 시스템에 포함되지 않도록 해야 합니다. 또한 파일 권한을 600으로 설정하여 소유자만 읽을 수 있도록 제한하는 것이 좋습니다.
# Mac Mini: ~/docker/n8n/.env
# 이 파일의 권한을 600으로 설정: chmod 600 .env
# 원격 데이터베이스 설정
NAS_PUBLIC_IP=210.183.92.82
# PostgreSQL 설정
POSTGRES_PORT=5432
POSTGRES_DB=n8n_production
POSTGRES_USER=n8n_user
POSTGRES_PASSWORD=YourStr0ng!P@ssw0rd#2024
# Redis 설정
REDIS_PORT=6379
REDIS_PASSWORD=YourR3d!sP@ssw0rd#2024
# n8n 설정
N8N_ENCRYPTION_KEY=your-32-character-encryption-key!
WEBHOOK_URL=https://n8n.yourdomain.com/
# Mac Mini: ~/docker/n8n/docker-compose.yml
# .env 파일의 변수를 참조하는 설정
version: "3.8"
services:
n8n-main:
image: docker.n8n.io/n8nio/n8n:latest
container_name: n8n-main
restart: unless-stopped
ports:
- "0.0.0.0:5678:5678"
environment:
N8N_HOST: 0.0.0.0
N8N_PORT: 5678
N8N_PROTOCOL: https
WEBHOOK_URL: ${WEBHOOK_URL}
EXECUTIONS_MODE: queue
# .env 파일의 변수 참조
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: ${NAS_PUBLIC_IP}
DB_POSTGRESDB_PORT: ${POSTGRES_PORT}
DB_POSTGRESDB_DATABASE: ${POSTGRES_DB}
DB_POSTGRESDB_USER: ${POSTGRES_USER}
DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
QUEUE_BULL_REDIS_HOST: ${NAS_PUBLIC_IP}
QUEUE_BULL_REDIS_PORT: ${REDIS_PORT}
QUEUE_BULL_REDIS_PASSWORD: ${REDIS_PASSWORD}
N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
11. 핵심 요약 및 체크리스트
설정 완료 체크리스트
원격 네트워크 연결 설정을 완료하기 위한 전체 체크리스트입니다. 각 항목을 순서대로 확인하시면, 누락된 설정 없이 안정적인 시스템을 구축할 수 있습니다. 특히 보안 관련 항목은 반드시 확인하시기 바랍니다. 설정 완료 후에는 테스트 스크립트를 실행하여 모든 연결이 정상인지 확인하고, 문제가 있다면 트러블슈팅 가이드를 참고하여 해결하시기 바랍니다.
## Synology NAS 측 설정 체크리스트
□ PostgreSQL 컨테이너가 정상 실행 중인가?
□ Redis 컨테이너가 정상 실행 중인가?
□ PostgreSQL이 0.0.0.0:5432에서 수신 중인가?
□ Redis가 0.0.0.0:6379에서 수신 중인가?
□ pg_hba.conf에 Mac Mini IP가 허용되어 있는가?
□ Redis에 패스워드가 설정되어 있는가?
□ DSM 방화벽에서 5432, 6379 포트가 허용되어 있는가?
## 네트워크 A 라우터 설정 체크리스트
□ 5432 포트포워딩이 NAS로 설정되어 있는가?
□ 6379 포트포워딩이 NAS로 설정되어 있는가?
□ NAS의 내부 IP가 고정(정적)으로 설정되어 있는가?
## Mac Mini 측 설정 체크리스트
□ docker-compose.yml에 올바른 공인 IP가 설정되어 있는가?
□ 데이터베이스 패스워드가 NAS 설정과 일치하는가?
□ Redis 패스워드가 NAS 설정과 일치하는가?
□ N8N_ENCRYPTION_KEY가 설정되어 있는가?
## 네트워크 B 라우터 설정 체크리스트 (웹훅 사용시)
□ 5678 포트포워딩이 Mac Mini로 설정되어 있는가?
□ Mac Mini의 내부 IP가 고정(정적)으로 설정되어 있는가?
## 보안 체크리스트
□ 강력한 패스워드를 사용하고 있는가?
□ .env 파일이 .gitignore에 추가되어 있는가?
□ 불필요한 포트가 외부에 노출되지 않았는가?
□ VPN 사용을 고려해 보았는가?
핵심 포인트
서로 다른 네트워크에 있는 서버들을 연결하는 핵심은 공인 IP와 포트포워딩입니다. 내부 네트워크에서는 사설 IP를 사용하지만, 외부에서 접근할 때는 반드시 공인 IP를 사용해야 합니다. 라우터의 포트포워딩을 통해 공인 IP의 특정 포트로 들어오는 트래픽을 내부의 서비스로 전달합니다. Docker 컨테이너는 0.0.0.0에 바인딩하여 모든 네트워크 인터페이스에서 접근을 허용해야 합니다. 보안을 위해 강력한 패스워드 사용, IP 제한, 그리고 가능하다면 VPN을 통한 연결을 권장합니다.
'AI 활용' 카테고리의 다른 글
| n8n에서 동적 웹페이지를 크롤링하는 방법 : curl, Headless 브라우저 설치 (0) | 2025.12.20 |
|---|---|
| n8n 환경에서 챗봇 위젯 웹페이지 구성하기 (0) | 2025.12.20 |
| n8n 웹환경 모니터링 시스템 구축 (0) | 2025.12.20 |
| n8n Queue mode 고가용성 서비스 모니터링 구축 (1) | 2025.12.20 |
| n8n 로드밸런싱 및 고가용성 서비스 설정 및 운영 가이드 (0) | 2025.12.19 |