n8n을 EC2 인스턴스에 배포해보자 🚀🚀🚀
Source: Dev.to
나는 자동화를 정말 좋아한다
워크플로우에서 자동화를 하는 것을 언제나 즐겨왔다. n8n을 우연히 발견했을 때, 솔직히 감탄했다. 그전까지 가졌던 아이디어들—예를 들어 Google Sheets 업데이트, 소셜 미디어에 포스팅, 자체 API 호스팅, Google Drive를 S3 버킷과 동기화 등—이 모두 새로운 프레임워크나 라이브러리를 배울 필요 없이 현실화될 수 있었다. n8n은 실제로 배포되어 일상 업무에 도움이 되는 작은 자동화를 훨씬 쉽게 만들 수 있게 해 주었고, 그래서 나는 n8n에 푹 빠졌다.
아래는 AWS EC2 인스턴스에 n8n을 배포하여 자체 인프라에서 자동화를 실행할 수 있도록 하는 단계별 가이드이다.
1. EC2 인스턴스 생성
-
AWS Management Console에 로그인하고 EC2 Dashboard로 이동한다.
-
Launch instance를 클릭한다.
-
Name – 인스턴스를 알아보기 쉬운 이름으로 지정한다. 예:
n8n. -
Application and OS Images (AMI) – Amazon Linux 2023 AMI(Free Tier 사용 가능)를 선택한다.
-
Architecture – 비용 효율성을 위해 **64-bit (ARM)**을 선택한다(Graviton 프로세서).
-
Instance type – 이 튜토리얼에서는 t4g.medium(2 vCPU, 4 GB RAM)을 사용한다.
왜 t4g.medium인가?
- 유사한 x86 인스턴스 대비 약 40 % 더 나은 가격‑성능.
- n8n과 여러 워커를 구동하기에 충분한 리소스.
- CPU 크레딧을 이용한 버스트 성능.
- t3.medium 대비 약 40 % 저렴.
- 프로덕션에 적합(t4g.micro와는 달리).
인스턴스 vCPU RAM Typical Use t4g.micro 1 1 GB Free Tier 전용, 제한적 t4g.medium 2 4 GB 소규모‑중간 규모 배포(권장) t4g.large 2 8 GB 대용량 워크플로우 -
Key pair (login) – 기존 키 페어를 선택하거나 새로 만든다. SSH 접속에 필요하다.
-
Network settings – 다음 인바운드 규칙을 가진 새 보안 그룹을 만든다:
Rule Port Protocol Source Purpose SSH 22 TCP Your IP (or 0.0.0.0/0for testing only)원격 터미널 접근 HTTP 80 TCP 0.0.0.0/0웹 트래픽(HTTPS로 리다이렉트) HTTPS 443 TCP 0.0.0.0/0n8n UI용 보안 웹 트래픽 -
Storage – 기본 8 GiB gp3 볼륨이면 기본 설치에 충분하다.
-
Advanced details – User data 필드에 다음 섹션의 스크립트를 붙여넣는다.
-
요약을 검토하고 Launch instance를 클릭한다.
2. User Data 스크립트 (자동 설정)
다음 스크립트를 User data 텍스트 박스에 붙여넣는다. 시스템을 업데이트하고 Git, Docker, Docker Compose를 설치하며 Docker 권한을 설정한다.
#!/bin/bash
yum install -y git docker
# Install Docker Compose plugin (system-wide)
mkdir -p /usr/local/lib/docker/cli-plugins
curl -SL "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-$(uname -m)" \
-o /usr/local/lib/docker/cli-plugins/docker-compose
chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
# Enable and start Docker
systemctl enable docker
systemctl start docker
# Allow ec2-user to run Docker without sudo
usermod -aG docker ec2-user
인스턴스가 부팅될 때 스크립트가 자동으로 실행되어 여러 수작업 단계를 절약한다.
3. 인스턴스에 연결
- EC2 콘솔에서 실행 중인 인스턴스를 선택하고 Connect를 클릭한다.
- EC2 Instance Connect 탭을 선택하고 기본 사용자 이름
ec2-user를 유지한 뒤 Connect를 클릭한다. - 브라우저 기반 터미널이 열릴 것이다. Docker Compose가 정상적으로 설치됐는지 확인한다:
docker compose --version
버전 번호가 표시되면 환경이 준비된 것이다.
4. 사전 구성된 레포지토리로 n8n 배포
git clone https://github.com/coozgan/hosting-n8n-aws.git
cd hosting-n8n-aws
이 레포지토리는 프로덕션 수준의 n8n 배포를 다음과 같이 설정한다:
- n8n workers – 비동기 워크플로우 실행.
- Redis – 작업 큐 및 재시도 처리.
- PostgreSQL – 워크플로우, 실행 기록, 사용자 데이터 영구 저장.
- Caddy – 자동 SSL/TLS 인증서를 제공하는 리버스 프록시.
4.1 환경 변수 설정
cp .env-example .env
nano .env
다음 변수들을 추가(또는 수정)한다:
# Domain Configuration
DOMAIN=your-domain.com # 도메인이 없으면 localhost 사용
# n8n Encryption (강력한 랜덤 키 생성)
N8N_ENCRYPTION_KEY=YOUR_STRONG_KEY
# PostgreSQL Database
POSTGRES_PASSWORD=YOUR_POSTGRES_PASSWORD
# Timezone
GENERIC_TIMEZONE=America/New_York
선택 사항 – DuckDNS 도메인(맞춤 도메인 없이 테스트할 경우)
- https://www.duckdns.org 에서 서브도메인을 만든다.
curl ifconfig.me로 얻은 인스턴스의 공인 IP를 DuckDNS 레코드에 추가한다..env파일의DOMAIN을 해당 DuckDNS 서브도메인으로 설정한다.
Important:
N8N_ENCRYPTION_KEY와POSTGRES_PASSWORD는 안전하게 보관한다. 이를 잃어버리면 워크플로우나 데이터를 복구할 수 없다.
Ctrl+X → Y → Enter 로 저장하고 종료한다.
4.2 스택 시작
docker compose up -d
모든 컨테이너가 실행 중인지 확인한다:
docker compose ps
로그를 스트리밍하여 모든 것이 정상적으로 시작됐는지 확인한다:
docker compose logs -f
5. n8n UI에 접근
- 맞춤 도메인 사용 시:
https://your-domain.com - 도메인 없이 테스트할 경우:
http://
n8n 로그인 화면이 나타날 것이다. 첫 사용자 계정을 만든다.
축하한다! 이제 AWS에 기능하는 n8n 배포가 완성되었다.
6. 확장: 워커 추가
추가 워커 인스턴스를 만들려면 docker-compose.yml을 편집하고 아래 예시와 유사한 항목을 추가한다:
n8n-worker-2:
extends: n8n-worker
container_name: n8n-worker-2
# ...필요 시 추가 설정
n8n-worker-3:
extends: n8n-worker
container_name: n8n-worker-3
# ...필요 시 추가 설정
그런 다음 스택을 재시작한다:
docker compose up -d
7. 성능 최적화 팁
| 팁 | 설명 |
|---|---|
| 워커 수 조정 | 2~3개의 워커로 시작하고 docker stats 로 CPU/메모리 사용량을 모니터링한다. |
| 데이터베이스 정리 | compose 파일은 EXECUTIONS_DATA_PRUNE=true(기본 7일 보관)를 설정한다. 필요 시 EXECUTIONS_DATA_MAX_AGE 를 조정한다. |
| Redis 메모리 | Redis는 LRU 퇴출 정책을 가진 512 MB 로 제한된다. docker exec redis redis-cli info stats 로 모니터링한다. |
8. 보안 모범 사례
- 사용자 관리 –
N8N_USER_MANAGEMENT_DISABLED=false(기본값) 로 두고 팀원마다 별도 계정을 만든다. - SSH 접근 제한 – 보안 그룹을 수정해 SSH를 자신의 IP 주소에서만 허용한다.
- 비밀 정보 안전하게 보관 –
N8N_ENCRYPTION_KEY와POSTGRES_PASSWORD를 비밀번호 관리 도구나 AWS Secrets Manager에 저장한다.
자동화 즐기세요!