애플리케이션¶
애플리케이션 서비스는 호스트별 역할에 맞춰 실행됩니다. 기존 앱 대부분은
midgard에 있고 jamye-plz는 alfheim에서 실행됩니다. yggdrasil의 Caddy가
공개 트래픽을 tailnet으로 전달하고, 정적 블로그와 문서 사이트는 직접
서빙합니다.
Homepage (services/homepage.nix)¶
홈랩 대시보드. :8082에서 실행되며 https://home.ridewithmin.com으로
노출됩니다.
Dev with Min 블로그 (services/ingress.nix)¶
정적 Astro 개인 블로그. blog flake input에서 빌드하고 yggdrasil의 Caddy가
file_server로 Nix 스토어에서 직접 서빙하며
https://blog.ridewithmin.com으로 노출됩니다. 별도 서비스 프로세스가
없습니다.
문서 사이트 (services/ingress.nix)¶
정적 홈랩 문서 사이트. 이 flake의 docs 패키지에서 빌드하고 yggdrasil의
Caddy가 file_server로 Nix 스토어에서 직접 서빙하며
https://docs.ridewithmin.com으로 노출됩니다. 편집 워크플로는
문서 사이트 런북을 참고하세요.
Forgejo (services/forgejo.nix)¶
Git 호스팅. :3000에서 실행되며 https://git.ridewithmin.com으로
노출됩니다.
- 공개 회원가입 비활성화
- Forgejo SSH 비활성화 (HTTPS로만 push/pull)
Vaultwarden (services/vaultwarden.nix)¶
Bitwarden 호환 비밀번호 관리자. :8222에서 실행되며
https://vault.ridewithmin.com으로 노출됩니다.
- SQLite 백엔드
- 공개 가입 비활성화, 초대만 허용
- 관리자 토큰은
vaultwarden/admin_tokenSOPS 비밀에서vaultwarden.env템플릿으로 렌더링
jamye-plz (services/jamye-plz.nix)¶
지인 폐쇄 그룹용 full-stack 소셜 PWA. alfheim의 :8080에서 실행되며
https://jamye-plz.ridewithmin.com으로 노출됩니다.
- upstream
jamye-plzflake input에서 가져옵니다. - upstream
services.jamye-plzNixOS 모듈로 활성화합니다. - upstream 모듈이 frontend, backend API, 로컬 PostgreSQL 데이터베이스, alfheim-local Caddy를 관리합니다.
- OAuth/JWT 비밀은
secrets/jamye-plz.yaml에 있고sops.templates로jamye-plz.env를 렌더링합니다. - 공개 트래픽 경로: yggdrasil의 Cloudflare Tunnel → yggdrasil의 Caddy →
alfheim.tail6fc192.ts.net:8080의 full-stack 서비스 엔트리포인트
새 앱 추가 가이드라인¶
- 업스트림이 NixOS 모듈을 제공한다면 그 방식을 우선합니다. OCI 컨테이너는 Podman을 의도적으로 활성화한 호스트에서, 업스트림이 컨테이너로 더 잘 배포될 때만 사용합니다.
- 이미지 태그는 반드시 고정하고
latest는 금지합니다. - 새 공유 서비스는
services/아래 모듈로 추가하고flake.nix(공유) 또는hosts/<host>/default.nix(호스트 전용)에 연결합니다. - 내부 서비스 포트는 방화벽에서 열지 않습니다. 노출이 필요하면 인그레스 절차를 따릅니다.