권한 책임 분리 (Least-Privilege)
운영 도메인별 전용 계정 7종 + 래퍼 명령(svcctl·deployctl·edgectl·logctl)으로 root 없이 작업. sudoers 화이트리스트·rootless docker로 자격증명 유출 시 폭발 반경 최소화.
▌ homelab ops · self-hosted · production-grade
단일 베어메탈 호스트 위에서 37개 컨테이너·14+ 서비스를 돌리며, 권한 격리·중앙 시크릿·관측성·자동 백업·ChatOps·GitOps를 하나의 일관된 운영 체계로 묶었습니다.
취미로 시작했지만, "흩어진 서비스 모음"이 아니라 운영 가능한 시스템이 되도록 설계·문서화·자동화에 공을 들였습니다.
외부 트래픽은 포트 노출 없이 터널로만 들어오고, 내부는 역할별로 분리됩니다.
※ 아래 인프라 살펴보기의 화면은 민감정보를 가린 큐레이션 캡처입니다. 원본 대시보드·자격증명은 비공개로 관리합니다.
"여러 도구를 쓴다"가 아니라, 각 축마다 원칙과 안전장치를 둡니다.
운영 도메인별 전용 계정 7종 + 래퍼 명령(svcctl·deployctl·edgectl·logctl)으로 root 없이 작업. sudoers 화이트리스트·rootless docker로 자격증명 유출 시 폭발 반경 최소화.
Infisical 셀프호스팅 + Machine Identity. 코드·레포에 평문 비밀 0, 백업 자격증명은 런타임 주입으로 디스크/로그 미경유.
Prometheus·Grafana·Loki·Promtail·cAdvisor·node-exporter·Dozzle. 메트릭+로그 일원화, 90일 로그 보존, 컨테이너별 자원 추적.
Discord 봇으로 폰에서 운영 — 통합 대시보드·능동 알림·버튼 제어·로그 검색. 사용자/채널 화이트리스트 + 모든 동작 감사 로그.
restic 증분·암호화 → GCS 오프사이트. 구성요소별 부분 실패 격리(하나 실패해도 나머지 진행), Healthchecks.io로 침묵 실패 감지.
GitHub Actions → 래퍼 기반 무권한 배포(deployctl), GHCR 이미지 풀 모델. 배포 주체에 docker 그룹(=root 동등)을 주지 않음.
ufw + fail2ban, SSH 키 전용, Cloudflare Tunnel로 포트 비노출, 응답 보안 헤더(HSTS·nosniff·X-Frame). 정기 보안 감사 백로그 운영.
단일 관리 레포에 compose·스크립트·런북 통합. 복구 절차·핸드오프 컨텍스트·작업 로그를 꾸준히 기록해 "재구축 가능한 서버"를 지향.
직접 만든 자동화와 실제 운영 화면을 하나씩 소개합니다.
지표를 그냥 나열하지 않고 🟢🟡🔴 판정 + 직전 대비 증감 + 에러 최다 컨테이너를 함께 보냅니다. "숫자만 보고 뭐가 문제인지 모르는" 알림 피로를 없애는 게 목표.
SSH 없이 폰에서 서버를 운영합니다. 컨테이너 상태·로그 검색·재시작·디스크 회수까지 버튼 탭으로, 위험 동작은 화이트리스트 + 2단계 확인.
/dashboard 호스트 자원 + 컨테이너 통합 뷰/digest 지난 24h 요약 · /cleanup 안전 디스크 회수
여러 DB·파일을 백업할 때 하나가 실패해도 전체가 멈추지 않게 구성요소를 독립적으로 처리하고, 스냅샷은 무조건 수행합니다. 결과는 구성요소별 ✅/❌ + 종합 판정으로 통지.
서버는 인바운드 포트를 하나도 열지 않습니다. 아웃바운드 터널로만 트래픽이 들어오고, 보안 인사이트·캐시율·트래픽까지 한 대시보드에서 봅니다.
컨테이너 38개의 로그를 SSH 없이 웹에서 바로 검색합니다. 장애가 나면 "어느 컨테이너가, 언제부터, 무슨 로그를" 순으로 빠르게 좁혀갑니다.
Prometheus·cAdvisor·node-exporter로 모은 지표를 한 화면에서 봅니다. 순간 스파이크와 추세를 구분해 진짜 이상 신호만 남깁니다.
Dev/Staging/Production 환경을 분리한 셀프호스팅 시크릿 매니저. 코드·레포에는 평문 비밀이 하나도 없습니다.
백업 스크립트가 성공했다고 알리지도 않고 조용히 안 도는 "침묵 실패"를 외부에서 잡습니다. 정해진 시간에 핑이 안 오면 그 자체가 경보입니다.
서버 안이 아니라 바깥에서 도메인이 살아있는지 5분마다 확인합니다. 네트워크·DNS·터널까지 포함한, 사용자가 실제로 보는 상태를 잽니다.
대시보드부터 로그 검색·재시작·위험 동작까지 — 뭘 칠 수 있는지 봇이 스스로 안내합니다. 새 기기에서도 명령어를 외울 필요가 없습니다.