AWS EC2에 n8n 설치 및 HTTPS 연결

2025. 10. 20. 13:02·🗄️ Backend/AWS

오픈소스 자동화 도구 n8n을 AWS EC2에서 직접 구축하고,
도메인 + SSL(HTTPS)까지 완벽히 연결하는 방법을 정리했습니다.

💡 이 문서는 개인용/기업용 자동화 서버를 직접 운영하려는 분들을 위한 가이드입니다.


🧾 1️⃣ 개요

  • 환경: Ubuntu 22.04 LTS + Docker + Nginx + Certbot
  • 서버 타입: AWS EC2 (t3.micro~t3.medium 권장)
  • 비용: 약 10~12달러/월 (1.4만 원 내외)
  • 결과: https://<SUBDOMAIN>.<YOUR_DOMAIN> 형태의 n8n 워크스페이스 완성

☁️ 2️⃣ EC2 생성 및 기본 설정

1️⃣ 인스턴스 생성

  • AMI: Ubuntu 22.04 LTS
  • 인스턴스 유형: t3.micro
  • 스토리지: 20GB (gp3)
  • 보안 그룹(인바운드 규칙):
    • SSH (22) — 내 IP
    • HTTP (80) — 0.0.0.0/0
    • HTTPS (443) — 0.0.0.0/0
    • (테스트용) TCP 5678 — 내 IP만 허용

2️⃣ 서버 접속

ssh -i <YOUR_KEY>.pem ubuntu@<EC2_PUBLIC_IP>

🐋 3️⃣ Docker 설치

sudo apt update -y
sudo apt install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker

정상 확인

docker --version
# Docker version x.xx.x ...

⚙️ 4️⃣ n8n 컨테이너 실행 (임시 HTTP)

mkdir -p ~/n8n_data
sudo chown -R 1000:1000 ~/n8n_data

sudo docker run -d \
  --name n8n \
  -p 5678:5678 \
  -v ~/n8n_data:/home/node/.n8n \
  -e N8N_BASIC_AUTH_ACTIVE=true \
  -e N8N_BASIC_AUTH_USER=admin \
  -e N8N_BASIC_AUTH_PASSWORD=admin \
  -e N8N_SECURE_COOKIE=false \
  n8nio/n8n

✅ 정상 확인

sudo docker ps
# STATUS: Up ~ seconds → OK

브라우저에서 http://<EC2_PUBLIC_IP>:5678
→ “Set up owner account” 페이지가 보이면 성공


🌐 5️⃣ 도메인 연결

1️⃣ DNS 설정 (Route53 또는 Cloudflare 등)

A 레코드: <SUBDOMAIN>.<YOUR_DOMAIN> → <EC2_PUBLIC_IP>
TTL: 300

2️⃣ DNS 전파 확인

ping <SUBDOMAIN>.<YOUR_DOMAIN>

→ 결과에 EC2 IP 표시되면 OK
(ICMP 응답 없어도 IP만 맞으면 됨)


🧱 6️⃣ Nginx 리버스 프록시 설정

1️⃣ Nginx & Certbot 설치

sudo apt install -y nginx certbot python3-certbot-nginx

2️⃣ 설정 파일 생성

sudo vi /etc/nginx/sites-available/n8n

🔹 아래 내용 복사:

server {
    server_name <SUBDOMAIN>.<YOUR_DOMAIN>;

    listen 80;

    location / {
        proxy_pass http://localhost:5678;
        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;
    }
}

3️⃣ 활성화

sudo ln -sf /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl restart nginx

✅ 정상 확인
http://<SUBDOMAIN>.<YOUR_DOMAIN> → n8n 페이지 뜨면 성공!
(Welcome to nginx!가 나오면 설정 안 읽히는 상태)


🔒 7️⃣ SSL(HTTPS) 인증서 발급

sudo certbot --nginx -d <SUBDOMAIN>.<YOUR_DOMAIN>
  • 이메일 입력 → 약관 동의(Y)
  • 인증 완료 후 메시지:
  • Congratulations! You have successfully enabled HTTPS

✅ 이 문구가 나오면 SSL 발급 성공


🧩 8️⃣ Nginx SSL 설정 (최종 수정)

sudo vi /etc/nginx/sites-available/n8n

아래처럼 수정👇

server {
    server_name <SUBDOMAIN>.<YOUR_DOMAIN>;

    listen 80;
    listen 443 ssl;

    ssl_certificate /etc/letsencrypt/live/<SUBDOMAIN>.<YOUR_DOMAIN>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<SUBDOMAIN>.<YOUR_DOMAIN>/privkey.pem;

    location / {
        proxy_pass http://localhost:5678;
        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;
    }
}

✅ 중복 listen 80; 두 줄이면 반드시 한 줄 삭제!

적용:

sudo nginx -t
sudo systemctl restart nginx

🧭 9️⃣ HTTPS 적용 후 n8n 재실행

sudo docker stop n8n && sudo docker rm n8n

sudo docker run -d \
  --name n8n \
  -p 5678:5678 \
  -v ~/n8n_data:/home/node/.n8n \
  -e N8N_BASIC_AUTH_ACTIVE=true \
  -e N8N_BASIC_AUTH_USER=admin \
  -e N8N_BASIC_AUTH_PASSWORD=admin \
  -e WEBHOOK_URL=https://<SUBDOMAIN>.<YOUR_DOMAIN>/ \
  n8nio/n8n

✅ 성공 기준

SSL 발급 완료 https://<SUBDOMAIN>.<YOUR_DOMAIN> 접속 시 🔒 표시
nginx 정상 sudo nginx -t → OK
docker 정상 sudo docker ps → STATUS: Up
n8n 정상 “Set up owner account” 페이지 표시
보안 정리 5678 인바운드 규칙 삭제 완료

🧠 증상 / 원인 / 해결

duplicate listen 80 listen 80 중복 하나만 남기기
Welcome to nginx! default 활성화 /etc/nginx/sites-enabled/default 삭제
SSL 인증 실패 80/443 차단 or DNS 미전파 SG 개방 후 재시도
n8n 접속 안 됨 컨테이너 중지 sudo docker logs n8n 확인
쿠키 오류 HTTPS 미적용 N8N_SECURE_COOKIE=false or SSL 적용

💾 Linux 항목 / 명령어

SSL 자동 갱신 확인 `sudo systemctl list-timers
백업 ~/n8n_data 폴더 (S3 업로드 권장)
업데이트 sudo docker pull n8nio/n8n 후 재실행
시간대 설정 sudo timedatectl set-timezone Asia/Seoul

 

이제 https://<SUBDOMAIN>.<YOUR_DOMAIN> 접속 시
n8n 워크스페이스 로그인 페이지 가 뜨면 완벽히 구축된 상태입니다.

이 환경에서

  • Notion 자동 체크,
  • Supabase 연동,
  • Gmail 발송,
  • 스케줄 기반 자동화

같은 워크플로우를 자유롭게 구현할 수 있습니다 

간단하게 만든 테스트 워크플로우 입니다. 이런식으로 !


 

✅ 트러블슈팅

1️⃣ WebSocket & Proxy 관련 헤더 추가 (중요)

현재 Nginx 설정에

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;

이 세 줄이 없으면
n8n 편집 화면에서 “Connection lost” 메시지가 반복됩니다.
따라서 SSL 설정 완료 후 최종 Nginx 구성을 이렇게 바꿔야합니다.

server {
    server_name <SUBDOMAIN>.<YOUR_DOMAIN>;

    listen 80;
    listen 443 ssl;

    ssl_certificate /etc/letsencrypt/live/<SUBDOMAIN>.<YOUR_DOMAIN>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<SUBDOMAIN>.<YOUR_DOMAIN>/privkey.pem;

    location / {
        proxy_pass http://localhost:5678;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header 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;
        proxy_buffering off;
        proxy_read_timeout 3600;
        proxy_send_timeout 3600;
    }
}
  • n8n은 워크플로 편집 화면에서 WebSocket / SSE 기반 실시간 통신을 사용합니다.
  • 해당 헤더가 빠지면 브라우저가 서버 연결을 “끊김(Connection lost)”으로 인식합니다.

2️⃣ Docker 환경 변수 (보안 + 향후 호환성)

로그에 다음과 같은 경고가 있었습니다.

There are deprecations related to your environment variables...

이건 동작엔 문제 없지만, 아래처럼 하면 장기적으로 완벽한 운영환경이 됩니다.

sudo docker run -d \
  --name n8n \
  -p 5678:5678 \
  -v ~/n8n_data:/home/node/.n8n \
  -e N8N_BASIC_AUTH_ACTIVE=true \
  -e N8N_BASIC_AUTH_USER=admin \
  -e N8N_BASIC_AUTH_PASSWORD=admin \
  -e WEBHOOK_URL=https://<SUBDOMAIN>.<YOUR_DOMAIN>/ \
  -e N8N_TRUSTED_PROXIES=* \
  -e N8N_PROXY_HOPS=1 \
  -e N8N_PUSH_BACKEND=websocket \
  -e N8N_RUNNERS_ENABLED=true \
  -e DB_SQLITE_POOL_SIZE=5 \
  -e N8N_GIT_NODE_DISABLE_BARE_REPOS=true \
  n8nio/n8n

🔹 추가된 변수 의미

변수 설명

N8N_TRUSTED_PROXIES Nginx 뒤에서 올바른 클라이언트 IP 인식
N8N_PROXY_HOPS 프록시가 1단이라면 1
N8N_PUSH_BACKEND=websocket 실시간 연결 유지 (Connection lost 방지)
N8N_RUNNERS_ENABLED=true 향후 필수 기능 선적용
DB_SQLITE_POOL_SIZE=5 SQLite 성능 최적화
N8N_GIT_NODE_DISABLE_BARE_REPOS=true Git 보안 강화

3️⃣ 퍼미션 경고 수정 (선택)

로그에 다음과 같은 경고가 있었습니다.

Permissions 0644 for n8n settings file ... are too wide.

→ 권장 설정:

sudo chmod 600 ~/n8n_data/config

또는 환경변수에 추가:

-e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true

4️⃣ 자동 재시작 설정 (운영 안정화)

현재는 EC2 재부팅 시 n8n 컨테이너가 자동으로 안 켜집니다.
다음 옵션을 docker run 뒤에 붙이세요:

--restart unless-stopped

즉,

sudo docker run -d \
  --name n8n \
  --restart unless-stopped \
  ...

5️⃣ SSL 인증 자동 갱신 확인 문구 추가 (가이드용)

💡 SSL 자동 갱신 확인
sudo systemctl list-timers | grep certbot
→ 자동 스케줄러가 활성화되어 있으면 OK.
(보통 /lib/systemd/system/certbot.timer 에 등록됨)


6️⃣ 보안그룹 정리 단계 추가

✅ 보안 정리

  • 5678 포트는 외부 접근 차단 (내 IP만 허용 또는 완전 삭제)
  • 22번 SSH는 MyIP로 제한
  • HTTP/HTTPS(80/443)만 전체 공개

 

📌 참고

  • n8n 공식문서: https://docs.n8n.io
  • Let’s Encrypt 인증서 만료 주기: 90일
  • Cron 자동갱신: /etc/cron.d/certbot 자동 등록됨

 

'🗄️ Backend > AWS' 카테고리의 다른 글

AWS Lambda와 API Gateway를 활용한 서버리스 아키텍처 구축  (0) 2024.10.10
'🗄️ Backend/AWS' 카테고리의 다른 글
  • AWS Lambda와 API Gateway를 활용한 서버리스 아키텍처 구축
hjwjo
hjwjo
백엔드 및 풀스택 개발에 관심 있는 초보 개발자의 개발 블로그입니다.
  • hjwjo
    Jeongwoo's Devlog
    hjwjo
  • 전체
    오늘
    어제
    • Devlog
      • 🗄️ Backend
        • Java
        • Spring
        • JPA
        • SQL
        • JSP
        • AWS
        • GCP
        • Linux
        • GitHub
        • ML
        • Security
      • 🖥️ Frontend
        • React
        • CSS
      • 🏅 Project
        • Hackathon
        • Team Project
      • 📊 Algorithm
        • BOJ
      • 📜 Certs
        • ADsP
        • SQLD
        • 정보처리기사
      • 📖
        • JavaScript
      • 일상
        • 면접후기
  • 블로그 메뉴

    • 홈
    • Devlog
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    데이터베이스
    DML
    SQL
    정보처리기사
    스프링
    GCP
    AWS
    스프링부트
    백엔드
    http
    정처기
    자바
    java기초
    Spring
    백준
    jsp
    java
    springboot
    ADsP
    쿼리
  • 최근 댓글

  • 최근 글

hjwjo
AWS EC2에 n8n 설치 및 HTTPS 연결
상단으로

티스토리툴바