dev.to

I Followed the n8n AWS Docs and It Broke at the First Command

n8n AWS 문서를 따라 했더니 첫 명령부터 실패했습니다

Amazon Linux 2023에서 Docker를 설치해도 Compose 플러그인은 함께 설치되지 않아 `docker compose`가 실패합니다. 글은 플러그인 설치부터 Postgres를 사용하는 n8n 구성, EC2 보안 설정까지 단계별로 안내합니다.

AI 요약

Amazon Linux 2023 EC2 인스턴스에 sudo dnf install -y docker를 실행한 뒤 docker compose up -d를 입력하면 compose가 Docker 명령어가 아니라는 오류가 날 수 있습니다. Docker 엔진과 Compose v2 플러그인이 별도 패키지이기 때문입니다. 글은 이 문제를 해결하고 Postgres를 사용하는 n8n을 EC2에서 처음 실행하는 과정을 설명합니다.

Docker Compose 플러그인 설치

Amazon Linux 2023의 기본 docker 패키지는 Docker 엔진만 설치합니다. 글은 /usr/local/lib/docker/cli-plugins 디렉터리를 만든 뒤 Compose v2.29.7 바이너리를 내려받아 실행 권한을 부여하는 방법을 안내합니다. 이후 Docker 서비스를 활성화하고 docker --version과 docker compose version을 각각 실행해 엔진과 플러그인이 모두 준비됐는지 확인합니다.

다운로드 파일은 x86_64 아키텍처를 기준으로 합니다. Graviton 같은 ARM 인스턴스에서는 파일명을 docker-compose-linux-aarch64로 바꿔야 합니다. 다른 아키텍처 바이너리를 설치하면 명령 실행 단계에서 exec format error가 발생할 수 있습니다. 글에 적힌 Compose 버전은 2.29.7이며, 작성자는 Docker 릴리스에서 원하는 버전을 선택하라고 안내합니다.

EC2와 n8n 구성

인스턴스는 Amazon Linux 2023 AMI를 사용하고, n8n과 Postgres에 필요한 메모리를 고려해 t3.small 이상을 권합니다. t2.micro와 t3.micro는 메모리가 1GB라 컨테이너가 메모리 부족으로 종료될 수 있다고 설명합니다. 보안 그룹은 SSH 22번 포트를 접속자 IP로 제한하고, 시험 중 5678번 포트도 열어야 한다면 같은 방식으로 접근을 제한합니다. 5678번을 0.0.0.0/0에 공개하지 말라고 강조합니다.

Docker Compose 파일은 n8nio/n8n:1.123.64와 postgres:16-alpine 컨테이너를 실행합니다. 워크플로와 실행 기록은 pg_data 볼륨에 저장합니다. 글은 SQLite 대신 처음부터 Postgres를 사용하라고 권합니다. 동시 실행 처리와 이후 데이터베이스 이전 부담을 고려한 선택입니다. n8n 이미지를 latest 대신 특정 버전으로 고정하면 의도하지 않은 업데이트를 피할 수 있다고 설명하며, 1.123.64가 CVE-2026-65589를 수정한 버전이라고 소개합니다.

비밀번호와 암호화 키

Compose 파일을 실행하기 전에 N8N_ENCRYPTION_KEY와 데이터베이스 비밀번호를 바꿔야 합니다. 암호화 키는 n8n에 저장한 자격 증명을 암호화하며, 키를 잃으면 저장된 자격 증명을 복구할 수 없으므로 안전한 곳에 보관해야 합니다. DB_POSTGRESDB_PASSWORD와 POSTGRES_PASSWORD 값도 서로 같아야 합니다. 다르면 n8n이 데이터베이스에 접속하지 못하고 컨테이너가 반복해서 재시작합니다.

설정 후 sudo docker compose up -d로 컨테이너를 시작하고 sudo docker compose ps로 상태를 확인합니다. 20~40초 기다린 뒤 curl로 http://localhost:5678에 요청해 HTTP 200 응답을 확인합니다. 브라우저에서 EC2의 공개 IP와 5678번 포트로 접속하면 소유자 계정을 만드는 설정 화면이 나옵니다. 새 인스턴스에서 가장 먼저 만든 계정이 소유자가 되므로, 공개 접근을 열기 전에 계정을 설정하라고 안내합니다.

인터넷 공개 전 보안 조치

예제는 테스트용으로 N8N_SECURE_COOKIE=false를 설정합니다. HTTPS를 적용하지 않은 IP 주소에서 첫 로그인을 하기 위한 값이며, 운영 환경에서는 HTTPS를 구성한 뒤 제거해야 합니다. 인터넷에 공개하기 전에는 5678번 포트를 직접 게시하지 말고 Docker 네트워크 안에서만 접근하도록 바꾸며, Caddy를 앞에 두고 TLS를 적용하라고 권합니다. 편집기 접근은 관리자 IP로 제한하고 /webhook/* 경로만 공개하는 구성도 제시합니다. 암호화 키와 DB 비밀번호는 AWS Secrets Manager에 저장하고, 최소 권한 IAM 역할로 읽도록 합니다. 보안 그룹에는 접속자 IP의 22번 포트와 80·443번 포트만 허용하며 5678번은 공개하지 않습니다.

docker compose down은 컨테이너를 멈추지만 pg_data 볼륨은 보존합니다. 데이터를 함께 지우려면 down -v를 실행해야 하므로, 볼륨 삭제 명령은 데이터 제거가 필요할 때만 사용해야 합니다.

dev.to 반응

  • @ivannovazzi — sudo dnf install -y docker-compose-plugin을 실행하면 Amazon Linux 2023에서 바로 해결되나요? 아니면 먼저 Docker CE 저장소를 추가해야 하나요? 수정이 한 줄 추가로 끝나는지, 별도의 저장소 전체가 필요한지 궁금합니다.
    • @sarvar_04 — 네, dnf install -y docker-compose-plugin은 AL2023에서 바로 작동하지 않습니다. 그 패키지는 Amazon 저장소에 없고 Docker CE 저장소에 있습니다. 그 방법을 쓰려면 CE 저장소를 추가하고 Amazon의 Docker를 Docker CE로 바꿔야 합니다. 별도 저장소를 추가하는 방식이며 AWS는 AL2023에서 Docker CE를 공식 지원하지 않습니다. 제가 쓴 방법은 Compose v2 플러그인 바이너리를 직접 넣는 것입니다. Docker CE 저장소는 필요 없습니다. 기본 Docker 패키지는 그대로 두고 docker compose 하위 명령만 추가하므로, 별도 저장소가 아니라 단계 하나를 더하는 방식입니다.

원문: dev.to / 번역·요약: Trawling