🎯 이 글에서 다루는 내용#
Docker run 명령어 여러 개를 관리하다가 지쳐서 Docker Compose로 완전 전환한 과정을 정리했습니다:
- ✅ Docker run → Docker Compose 전환 - 통합 관리의 시작
- ✅ 폴더 구조 정리 - 흩어진 데이터를 한 곳으로
- ✅ n8n 워크플로우 자동화 도구 설치 - 자동화의 첫걸음
- ✅ IntelliJ Remote Development - 원격 서버도 로컬처럼
- ✅ 권한 에러와 Secure Cookie 해결 - 4시간의 삽질 기록
예상 소요시간: 1시간 | 난이도: 초급-중급 | 필요 도구: Docker, Docker Compose
😅 시작은 단순한 호기심이었는데…#
안녕하세요! CoderRed입니다 😊
Hugo 블로그 운영하면서 Docker 컨테이너가 하나둘 늘어나더니… 어느새 이런 상황이 되었어요:
|
|
“아… 명령어 기억 안 나면 어떡하지?” 😱
그때 떠오른 생각: “Docker Compose로 통합 관리하면 되잖아?”
그리고 김칫국 마시며 생각했죠: “n8n도 설치해서 자동화까지 해보자!”
(스포일러: 생각보다 삽질이 많았습니다 😅)
🔄 1단계: Docker run에서 Docker Compose로 대전환#
왜 Docker Compose로 바꿔야 하나?#
처음엔 이렇게 생각했어요:
“Docker run도
--restart unless-stopped
있으면 충분한데?”
현실은…
- 서버 재부팅 후: “어? 컨테이너 명령어가 뭐였지?”
- 설정 변경할 때: “긴 명령어 다시 입력… 😩”
- 백업할 때: “각각 따로 백업해야 하네?”
Docker Compose의 달콤한 유혹#
|
|
이제 이렇게만 하면 끝:
|
|
“이거야!” 하고 바로 시작했죠 🚀
📁 2단계: 흩어진 폴더 구조 정리#
Before (지저분) 😵#
~/
├── coderblog/
├── cusdis-data/
├── telegram-webhook/
├── n8n-data/
└── data/ # 이건 뭐지...?
After (깔끔) ✨#
~/docker-services/
├── telegram-webhook/ # 소스코드
├── cusdis-data/ # 댓글 DB
├── n8n-data/ # n8n 설정
├── docker-compose.yml # 통합 설정
└── .env # 비밀 정보
폴더 이동 과정#
|
|
🐳 3단계: docker-compose.yml 작성#
최종 통합 설정 파일#
|
|
.env 파일 (비밀 정보 분리)#
|
|
💥 4단계: 실행하면서 만난 문제들#
docker-compose 명령어가 없다고? 😱#
|
|
해결책: 최신 Docker는 하이픈 없이!
|
|
“아… 이제는 하이픈도 빼는구나” 😅
YAML 파일 경고#
WARN[0000] the attribute `version` is obsolete
해결책: version: '3.8'
라인 삭제! (최신 Docker는 필요 없음)
🚀 5단계: n8n 설치와 권한 지옥#
첫 번째 에러: Permission Denied#
Error: EACCES: permission denied, open '/home/node/.n8n/config'
n8n 컨테이너가 파일을 못 만든대요! 😤
시도 1: 폴더 권한 수정
|
|
시도 2: docker-compose.yml에 user 추가
|
|
드디어 해결! 🎉
두 번째 에러: Secure Cookie 문제#
브라우저에 이런 메시지가:
“Your n8n server is configured to use a secure cookie, however you are either visiting this via an insecure URL”
“아… HTTP로 접속해서 그런 거구나!” 💡
해결책: 그냥 HTTPS로 접속!
https://n8n.windahead.com # NPM으로 이미 설정되어 있었음!
(처음부터 HTTPS로 접속할 걸… 😅)
🎯 6단계: n8n 첫 설정#
가입 화면이 나타났다!#
최신 n8n은 사용자 관리 시스템이 기본이더라고요:
- 이메일로 가입 (첫 번째 가입자 = Owner)
- Basic Auth는 이제 무시됨
- 가입 후 추가 가입 차단 설정
|
|
🛠️ 보너스: IntelliJ Remote Development#
서버 파일 편집이 불편해서…#
vim이나 nano로 YAML 편집하다가 화가 나서 😤
IntelliJ Ultimate의 Remote Development 발견!
File → Remote Development → SSH → New Connection
Host: 서버IP
Port: 22222
Project directory: /home/username
이제 서버 파일도 로컬처럼 편집! 완전 꿀! 🍯
서버 캐시 정리 (보너스)#
Remote Development 쓰다 보니 캐시가 20GB… 😱
|
|
41GB → 4GB로 다이어트 성공! 💪
💡 이번에 배운 교훈들#
기술적 교훈#
Docker Compose가 진짜 편하다
- 설정 파일 하나로 모든 서비스 관리
- 백업도
docker-services
폴더만 압축하면 끝
폴더 구조 정리의 중요성
- 처음부터 잘 정리하자
- 데이터는 한 곳에 모아두기
권한 문제는 항상 발생한다
- Docker 볼륨 마운트 시
user
설정 중요 1000:1000
이 보통 해결책
- Docker 볼륨 마운트 시
삽질 방지 교훈#
HTTPS가 있으면 HTTPS로 접속하자
- Secure Cookie 에러로 30분 삽질… 😅
docker-compose vs docker compose
- 최신 Docker는 하이픈 없이!
가입 먼저, 보안 설정은 나중에
- n8n 가입 차단을 먼저 설정하면 본인도 못 들어감
🚀 앞으로의 계획#
이제 n8n이 설치되었으니:
- 블로그 자동 포스팅 워크플로우
- Gmail → Telegram 알림
- 서버 모니터링 자동화
- AI 연동 자동화
정말 재밌는 것들을 많이 해볼 수 있을 것 같아요! 🎉
📚 관련 포스트#
이제 모든 서비스가 docker-services 폴더 하나에서 관리됩니다!
|
|
정말 편해졌어요! 여러분도 Docker run 지옥에서 벗어나보세요! 😊
혹시 막히는 부분 있으면 댓글로 알려주세요. 제가 겪은 삽질이 도움이 되길 바라며… 🙏