Oracle Cloud에 n8n 배포
왜 클라우드에 올리게 됐을까?
나는 평소에 PC와 노트북을 오가며 n8n 작업을 하다 보니, 환경이 다 달라서 번거로웠다. 예를 들어 PC에서 만든 워크플로우를 노트북에 복사하거나 다시 셋팅하는 게 번거롭고, Webhook 주소도 바뀌어버리니 안정적인 운영이 힘들었다.
그래서 생각한 게 바로 클라우드 서버에 n8n을 올려버리는 것. 이렇게 하면 어떤 환경에서든 동일한 주소로 접속하고, 같은 환경에서 작업할 수 있게 된다.
[목표 및 기대 효과]
- 외부 접속 가능한 고정형 n8n 환경 구축
- Webhook 자동화, 캘린더 연동 등의 작업을 언제 어디서나 동일하게 유지
- 노트북/PC/모바일에서도 한 곳에 접속만 하면 되도록 구성
[환경 정보]
- 클라우드: Oracle Cloud Free Tier (ARM 인스턴스)
- OS: Ubuntu 22.04
- 설치 도구: Docker, Docker Compose
- 접속 도구: SSH
☁️ 2025년 기준 무료/저렴한 클라우드 서버 제공처 모음
🟢 1. Railway
- 무료 한도: 월 500시간 사용 (백엔드 컨테이너 1개 기준)
- 특징:
- GitHub 연동 → 자동 배포
- PostgreSQL도 무료 제공
- 웹 기반 Docker 배포 편리
- 링크: https://railway.app
💡 n8n을 Dockerfile로 배포하면 아주 쉽게 운영 가능!
🟢 2. Render
- 무료 한도: Web Service 1개 + 매일 750시간
- 특징:
- 배포 시 URL 자동 발급
- PostgreSQL도 무료 제공
- Static / Web Service / Cron jobs도 지원
- 링크: https://render.com
🟢 3. Fly.io
- 무료 한도:
- 월 3,000 VM시간 (1vCPU / 256MB RAM 기준)
- 월 160GB 전송
- 특징:
- 글로벌 위치 선택 가능 (서울 포함)
- CLI 설치 후 배포
- 링크: https://fly.io
🟢 4. GCP (Google Cloud Platform)
- 무료 한도 (항상 무료):
- f1-micro VM 1개 (미국 리전 한정)
- 30GB HDD, 1GB 네트워크 포함
- 추가 혜택: 최초 가입시 $300 크레딧 (12개월 내 사용)
- 링크: https://cloud.google.com/free
⚠️ 리전이 us-west, us-central 등일 때만 완전 무료
🟢 5. Oracle Cloud Free Tier
- 항상 무료 리소스:
- VM 2개 (1vCPU, 1GB RAM)
- 2개 Autonomous DB (ATP/ADW)
- 블록스토리지 100GB
- 특징:
- n8n 설치 시 유용한 사양
- 다소 복잡하지만 실서버 수준 가능
- 링크: https://www.oracle.com/cloud/free/
🟢 6. Glitch (개발용 서버)
- 무료 한도:
- 앱당 400시간/월
- 앱이 유휴 상태일 땐 슬립됨
- 특징:
- Node.js 기반, 실시간 편집 가능
- 링크: https://glitch.com
⚠️ 그 외 추천 안하는 곳
Heroku (무료 종료됨) | 2022년부로 무료 요금제 종료 |
Vercel / Netlify | 정적 페이지 중심으로 백엔드 서버 운영 어려움 |
AWS | 신규가입 $100 크레딧 이후 유료 전환 |
☁️ Oracle Cloud를 선택한 이유
GPT한테 물어보니 AWS, GCP, Azure도 있지만 Oracle Cloud는 상시 무료 티어로 1개의 VM을 제공한다고 했다.
- ✅ 월간 요금 없이 사용할 수 있는 범위 내에서 충분
- ✅ VM 인스턴스를 생성해서 24시간 작동 가능
- ✅ ARM 기반 인스턴스의 성능도 꽤 괜찮음
도메인을 구매하면 더 좋겠지만, 도메인은 비용이 발생하므로 ngrok을 활용해서 대체할 수 있는 방법을 찾고 있다.
>> 향후에는 ngrok 혹은 클라우드 DNS 등의 대안을 고려할 예정.
🧰 사전 준비
- Oracle Cloud에서 Ubuntu 22.04 인스턴스 생성 완료
- 퍼블릭 IP와 SSH Key 확보 (OCI 콘솔에서 확인)
- 포트 5678 (n8n 기본 포트) 방화벽 열려 있어야 함
Oracle Cloud 가입 및 Instance 생성
가입 과정은 유튜브 영상 참고: https://www.youtube.com/watch?v=AgJgEnQv6cw
- 회원가입
- 무료 티어로 로그인
- 인스턴스 생성 (VM.Standard.A1.Flex 선택)
- OS는 Ubuntu 22.04로 진행
- SSH 키 생성 후 등록 → 이 키를 통해 터미널에서 접속
- 퍼블릭 IP 확인
💻 Oracle Cloud에 n8n 설치하기
1. SSH 접속
# Public Key를 현재 폴더 안에 다운로드해서 진행하는게 편하다
<미리 만들어놓고 해당 폴더에 Key 넣기>
mkdir ~/n8n
cd ~/n8n
ssh -i <oracle-key.pem가 있는 경로> ubuntu@<Public-IP>
>> 접속후
ubuntu@your-instance-name:~$ <<< 터미널 창에 이렇게 시작하면 접속이 된거다
2. Docker 설치
# 하나씩 진행
sudo apt update
sudo apt install docker.io docker-compose -y
3. docker-compose.yml 작성
nano docker-compose.yml
https://cord-ai.tistory.com/209
리눅스 터미널 - nano
🧾 nano란?nano는 리눅스 터미널에서 실행되는 텍스트 편집기입니다.쉽게 말해, "메모장"의 터미널 버전이에요.언제 사용하나요?리눅스에서 파일을 만들거나 수정할 때 사용합니다. 예를 들어:nano
cord-ai.tistory.com
version: "3.7"
services:
n8n:
image: n8nio/n8n
restart: always
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true # 보안을 위해 기본 인증 설정 (선택)
- N8N_BASIC_AUTH_USER=admin # 본인이 원하는 아이디
- N8N_BASIC_AUTH_PASSWORD=pass # 본인이 원하는 패스워드
- N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
- N8N_DEFAULT_BINARY_DATA_MODE=filesystem
- N8N_SECURE_COOKIE=false
- GENERIC_TIMEZONE=Asia/Seoul
- N8N_PORT=5678
- N8N_HOST=<YOUR_PUBLIC_IP> # Oracle 인스턴스의 공인 IP 주소
volumes:
- ./n8n_data:/home/node/.n8n
.env 파일을 만들어서 관리하는 방법 (권장)
📝 .env 파일 생성
nano .env
예시 내용
- N8N_BASIC_AUTH_ACTIVE=true # 보안을 위해 기본 인증 설정 (선택)
- N8N_BASIC_AUTH_USER=admin # 본인이 원하는 아이디
- N8N_BASIC_AUTH_PASSWORD=pass # 본인이 원하는 패스워드
- N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
- N8N_DEFAULT_BINARY_DATA_MODE=filesystem
- N8N_SECURE_COOKIE=false
- GENERIC_TIMEZONE=Asia/Seoul
- N8N_PORT=5678
- N8N_HOST=<YOUR_PUBLIC_IP> # Oracle 인스턴스의 공인 IP 주소
저장: Ctrl + O → Enter → Ctrl + X
4. Docker Compose 실행
sudo docker compose up -d
or
sudo docker-compuse up -d
🔐 방화벽 설정 (5678 포트 허용)
- Oracle Cloud → Networking → VCN → Security Lists
- Ingress Rules에서 아래와 같이 추가:
- Source CIDR: 0.0.0.0/0
- Destination Port Range: 5678
- Protocol: TCP
✅ Oracle Cloud에서 포트 5678 허용 방법(보안 목록 설정)
1. Oracle Cloud 콘솔 접속
2. 왼쪽 상단 ☰ 메뉴 > Compute > 인스턴스(Instances) 이동
- 현재 n8n을 설치한 인스턴스를 클릭
3. 네트워크 > VNIC 세부정보(VNIC details) 클릭
- 인스턴스 상세 정보 하단에 위치함
4. 서브넷(Subnet) 클릭
- VNIC 상세 페이지에서 연결된 서브넷 링크 클릭
5. 보안(Security) 클릭
- 서브넷 페이지 하단에서 확인 가능
6. 보안 목록 이름 클릭
(예: Default Security List for ...)
7. Security rules 탭에서 인바운드 규칙 추가(Add Ingress Rules) 클릭
입력값:
Source CIDR | 0.0.0.0/0 (모든 IP 허용) |
IP Protocol | TCP |
Destination Port Range | 5678 |
- 설명(Description): Allow n8n Web UI
✅ 저장(Save) 클릭
접속 | URL조건 |
http://<Public IP>:5678 | 기본값. 인증서 없음 << 우린 이렇게 접속해야한다 |
https://<Public IP>:5678 | 본인이 SSL Reverse Proxy 설정한 경우에만 가능 (예: Nginx + Certbot 등) |
🔁 자동 실행 설정 (재부팅 시)
sudo nano /etc/systemd/system/n8n.service
[Unit]
Description=n8n Service
Requires=docker.service
After=docker.service
[Service]
WorkingDirectory=/home/ubuntu/n8n
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
RemainAfterExit=true
[Install]
WantedBy=multi-user.target

[문제 발생 및 해결 방법]
❗ docker compose 명령어 인식 안됨
- docker compose가 아니라 docker-compose 명령어로 설치되어 있었음 → sudo apt install docker-compose로 해결
❗ 포트 오픈했는데 접속 불가
sudo docker logs <컨테이너 이름>
EACCES: permission denied — 즉, 권한 오류가 날 수 있음.
n8n 컨테이너 내부에서 /home/node/.n8n/config 파일에 접근 권한이 없어서 발생합니다.
🔍 부가 설명 및 해결방법
- 에러 메시지에 반복적으로 나타난 permission denied, No encryption key found, command start not found 등은 모두 .n8n/config 접근 불가와 관련된 문제입니다.
- 컨테이너 내에서 실행되는 프로세스는 루트가 아니라 node 사용자로 실행되기 때문에, 마운트된 볼륨의 권한이 맞지 않으면 오류가 납니다.
1. 컨테이너 중지
docker compose down
⚠️ 종료를 권장하는 경우
- Docker 볼륨 마운트가 변경되었거나, docker-compose.yml을 수정한 후 재시작해야 할 때
- 설정 파일을 컨테이너가 처음 실행될 때만 읽는 경우 (n8n이 그럴 가능성 있음)
2. n8n_data 폴더의 권한 설정 변경
sudo chown -R 1000:1000 ./n8n_data
- 1000:1000은 n8n Docker 이미지에서 사용하는 기본 유저 (node)의 UID와 GID입니다.
- ./n8n_data는 현재 위치 기준이니 실제 경로에 따라 조정해 주세요.
- n8n_data는 Docker 컨테이너에서 /home/node/.n8n으로 마운트되는 경로입니다.
3. Docker Compose 재실행
❗Docker 데몬(서비스)에 접근할 권한이 없다는 Error 발생
1. sudo 붙여서 실행
docker-compose 명령 앞에 sudo를 붙여 실행해 보세요:
sudo docker-compose up -d
대부분의 경우 이렇게만 해도 권한 문제가 해결됩니다.
❗ n8n의 설정 파일(config) 퍼미션(권한)이 너무 넓게 열려 있어서 보안상 위험
- 0644 권한: 소유자는 읽고 쓸 수 있고, 그룹 및 기타 사용자는 읽기만 가능
- n8n은 이 설정 파일을 소유자만 접근 가능한 0600 권한으로 제한하기를 권장합니다.
권한 직접 변경 (가장 확실하고 간단함)
chmod 600 ./n8n_data/config
만약 경로가 다르면 실제 .n8n/config 파일이 있는 위치를 지정해 주세요.
❗웹 브라우저에서 접속 시 "Cannot GET" 오류
→ Docker Compose 실행후 바로 접속하면 해당 Error 발생. 몇초 지나면 접속된다(F5, 새로고침)
마무리 후기
이제는 노트북이든, 데스크탑이든 상관없이 Oracle Cloud 상에 있는 내 n8n 인스턴스에 접속해서 동일한 환경에서 작업할 수 있게 되었다. Webhook도 설정만 해두면 안정적이고, 언제 어디서든 워크플로우 테스트도 가능하다.
아직 도메인이나 SSL 같은 고급 설정은 안 했지만, 이 정도만으로도 충분히 유용하다.
오늘은 클라우드에 올리는 방법을 소개했지만, 보안 이슈가 굉장히 해결해야할게 많다. 앞으로 관련된 이슈들을 자주 보게될텐데, 해당 내용을 우선적으로 정리해보는 것이 우선이겠다.
다음 목표는:
- ngrok 또는 Cloudflare Tunnel로 도메인 연결(로컬에서 하는 것 아닌 이상은 도메인을 구매하는 수 밖에 없어보인다.)
- 보안 이슈 관련 내용 정리
https://cord-ai.tistory.com/211
뭐가 이렇게 인증 절차가 많은걸까?🥴
자동화의 첫 관문, 왜 이렇게 복잡한 거야?n8n에 Gmail이나 Google Calendar를 연결하려고 했을 때, 혹은 Oracle Cloud에 n8n을 배포하려고 했을 때 느꼈던 첫 감정은 딱 하나였다. "와, 왜 이렇게 해야 할 게
cord-ai.tistory.com