2편에서 Webhook 테스트로 “트리거 → 처리 → 실행” 흐름을 잡았다면,
3편은 셀프호스팅에서 가장 많이 터지는 포인트인 환경변수(Environment variables)를 “최소만” 정리합니다.
n8n은 도커/도커 컴포즈 환경에서 environment: 항목으로 환경변수를 설정하는 방식이 공식 문서에 정리돼 있습니다. :contentReference[oaicite:0]{index=0}
- 로컬에서도 반드시 맞춰야 하는 타임존 설정을 알고
- 서버로 옮길 때 필수로 마주치는 URL/Webhook 관련 변수의 역할을 이해하고
- 디스크/성능에 직결되는 실행 데이터(Executions) 저장/정리의 기본값과 관리 포인트를 잡을 수 있습니다.
0) 환경변수는 “로컬에서 대충”하면, 서버에서 100% 다시 합니다
로컬 단계에서는 localhost로만 접속하니까 문제가 안 보일 수 있습니다.
하지만 서버(도메인/HTTPS/리버스 프록시)로 넘어가는 순간,
n8n이 표시하는 URL이 틀리거나(Webhook URL), 외부 서비스가 콜백을 못 보내거나,
실행 데이터가 쌓여 디스크가 터지는 문제가 한 번에 옵니다.
그래서 지금은 “최소 세트”만 먼저 고정합니다.
1) 최소 타임존 세트: GENERIC_TIMEZONE + TZ
스케줄(Cron)이나 날짜 처리 노드가 들어가는 순간 타임존이 꼬이면 디버깅이 지옥이 됩니다. 로컬부터 Asia/Seoul로 맞춰 두는 걸 추천합니다.
environment:
- GENERIC_TIMEZONE=Asia/Seoul
- TZ=Asia/Seoul
(참고) 도커/컴포즈에서 환경변수를 넣는 방식은 n8n 공식 “Configuration methods”에 예시가 있습니다. :contentReference[oaicite:1]{index=1}
2) URL/Webhook 세트: “서버로 갈 때” 꼭 필요해지는 변수들
2-1. n8n이 Webhook URL을 만드는 방식
n8n은 기본적으로 N8N_PROTOCOL, N8N_HOST, N8N_PORT를 조합해서 Webhook URL을 만들어 표시합니다. :contentReference[oaicite:2]{index=2}
그런데 리버스 프록시 뒤에서 동작하면 내부 포트(보통 5678)와 외부 포트(보통 443)가 달라져서 이 방식이 깨집니다. :contentReference[oaicite:3]{index=3}
2-2. 그래서 WEBHOOK_URL이 필요합니다
n8n이 리버스 프록시 뒤에 있을 때는 WEBHOOK_URL을 수동으로 설정해 에디터 UI에 올바른 Webhook URL이 표시되고, 외부 서비스에도 정확히 등록되게 해야 합니다. :contentReference[oaicite:4]{index=4}
N8N_PROTOCOL: 보통httpsN8N_HOST: 예)n8n.example.comN8N_PORT: 내부 실행 포트(기본 5678)WEBHOOK_URL: 예)https://n8n.example.com/(리버스 프록시 뒤에서 필수) :contentReference[oaicite:5]{index=5}N8N_PROXY_HOPS: 리버스 프록시 환경에서 권장 설정(보통 1) :contentReference[oaicite:6]{index=6}
이 URL 세트는 5~6편(서버/HTTPS/리버스프록시)에서 실제 compose 템플릿과 함께 완성합니다. 지금은 “왜 WEBHOOK_URL이 필요한지”만 확실히 이해하면 됩니다. :contentReference[oaicite:7]{index=7}
3) 실행 데이터(Executions) 최소 설정: 디스크 터지기 전에 잡자
n8n은 워크플로우 실행 결과(성공/실패/수동 실행 등)를 저장합니다. 특히 n8n 1.0부터는 “성공/실패/수동 실행을 기본 저장”으로 바뀌었고, SQLite 성능 저하를 막기 위해 실행 데이터 정리(prune) 기본값도 함께 안내합니다. :contentReference[oaicite:8]{index=8}
3-1. “어디에 저장되나”부터
기본 DB가 SQLite일 때는 실행 데이터가 쌓이면 디스크가 커질 수 있고, prune로 삭제해도 디스크 공간이 자동으로 줄지 않고 재사용될 수 있습니다. 필요하면 시작 시 vacuum 옵션을 통해 공간 정리 동작을 하도록 설정할 수 있습니다. :contentReference[oaicite:9]{index=9}
3-2. 실행 모드(regular/queue) 같은 기본 변수도 여기서 시작
실행 관련 환경변수 페이지에는 EXECUTIONS_MODE 같은 핵심 변수가 정리되어 있고,
파일 기반 설정(_FILE 접미사)도 지원합니다. :contentReference[oaicite:10]{index=10}
- 로컬에서는 실행 데이터가 조금 쌓여도 괜찮지만, 서버에서는 반드시 “저장/보관/정리” 정책이 필요합니다. :contentReference[oaicite:11]{index=11}
- 민감한 값은
_FILE방식으로 파일에서 읽게 할 수 있습니다(운영에서 유용). :contentReference[oaicite:12]{index=12}
4) 로컬용 compose.yaml에 “최소 환경변수 세트” 적용 예시
1편에서 만든 로컬 compose.yaml에, 지금 편에서 다룬 “타임존 최소 세트”를 반영한 예시입니다. (서버용 URL/Webhook 변수는 5~6편에서 HTTPS/도메인 준비가 끝난 뒤에 넣습니다.)
services:
n8n:
image: docker.n8n.io/n8nio/n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
- NODE_ENV=production
- N8N_PORT=5678
- GENERIC_TIMEZONE=Asia/Seoul
- TZ=Asia/Seoul
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
도커 컴포즈에서 환경변수를 넣는 방식은 n8n 공식 “Configuration methods”에서 동일하게 설명합니다. :contentReference[oaicite:13]{index=13}
5) 안티그래비티 프롬프트 예시: “환경변수 최소 세트”를 정확히 뽑아내는 말투
프롬프트 1) 로컬 최소 세트 점검 + compose 반영
n8n을 Docker Compose로 로컬 운영 중이야.
공식 문서 기준으로만 안내해줘.
목표:
- 로컬에서 최소 환경변수 세트를 정리하고 compose.yaml에 반영
- 특히 타임존(Asia/Seoul)과 실행 데이터(Executions) 관련해서
초보자가 '당장' 알아야 하는 최소만
원하는 출력:
1) 로컬에서 우선 적용할 환경변수 목록(이유 포함)
2) compose.yaml 예시(필요한 부분만)
3) 서버로 갈 때 추가될 URL/WEBHOOK 관련 변수는 "다음 단계"로 구분해서 설명
프롬프트 2) 리버스 프록시/웹훅 URL 개념만 미리 이해하기
지금은 로컬인데, 나중에 서버+HTTPS+리버스 프록시로 운영할 거야.
공식 문서 기준으로만, WEBHOOK_URL / N8N_HOST / N8N_PROTOCOL / N8N_PORT가
왜 필요한지 초보자 관점에서 예시로 설명해줘.
조건:
- 내부는 5678로 돌고, 외부는 443(HTTPS)로 공개되는 상황을 가정
- '어떤 값으로 설정해야 하는지'는 5~6편에서 다룰 거라
여기서는 개념/실수 포인트 중심으로 정리해줘
다음 편 예고
4편에서는 “로컬에서 마음껏 실험해도 망하지 않는” 세팅을 만듭니다. 핵심은 볼륨/백업/실수 복구 루틴입니다. 자동화를 배우는 과정에서는 실수가 필연이라, 복구 루틴을 먼저 만들어두면 학습 속도가 훨씬 빨라집니다.