콘텐츠로 이동

배포 & 변경 관리

수동 배포

# 단일 호스트
inv deploy --hosts psi

# 다중 호스트
inv deploy --hosts psi,rho,tau,eta

inv deploy는 SSH를 통해 원격 호스트에서 nixos-rebuild switch를 실행합니다.

자동 업그레이드

모든 호스트에 자동 업그레이드가 설정되어 있습니다:

  • 소스: github:SBEE-lab/infra
  • 업그레이드 체크: system.autoUpgrade가 매일 04:40 KST에 최신 커밋을 가져와 nixos-rebuild switch 실행
  • 재부팅 체크: 매월 마지막 토요일에 auto-reboot 서비스가 커널 업데이트 여부를 확인
  • 재부팅: 커널이 변경된 경우에만 24시간 후 자동 재부팅 (shutdown -r +1440)
  • 재부팅 지터: 최대 20분 지연 (호스트별 시점 분산)

사전 빌드 (Nixbot/niks3 캐시)

PR과 메인 브랜치 변경은 Nixbot이 빌드합니다. 성공한 결과는 niks3가 추적하고 Cloudflare R2에 저장합니다. 다른 호스트는 배포 시 https://cache.sjanglab.org substituter에서 이미 빌드된 결과를 가져옵니다.

flowchart LR
  pr["PR/메인 브랜치"] -- "Nixbot" --> psi["psi<br/>nix build"]
  psi -- "niks3 push" --> r2["Cloudflare R2<br/>cache.sjanglab.org"]
  r2 -- "substituter" --> rho["rho"]
  r2 -- "substituter" --> tau["tau"]
  r2 -- "substituter" --> eta["eta"]
  admin["관리자"] -- "inv deploy" --> rho & tau & eta

일반적인 배포 흐름은 PR에서 Nixbot 통과 확인 → merge → 배포입니다.

배포 전 확인

# 로컬에서 단일 호스트 빌드 테스트
nix build .#nixosConfigurations.psi.config.system.build.toplevel

주요 invoke 명령어

명령어 설명
inv deploy --hosts <host> 원격 배포
inv add-server --hostname <name> 새 서버 추가
inv generate-ssh-cert <host> [--aliases <dns,...>] SSH 인증서 생성. eta 재발급 시 --aliases jump.sjanglab.org 지정
inv generate-wireguard-key --hostname <host> WireGuard 키 생성
inv generate-password --user <name> 비밀번호 해시 생성
inv update-host-info [--hosts <host,...>] 호스트 하드웨어 보고서 갱신
inv update-lldp-info [--hosts <host,...>] LLDP 네트워크 그래프 갱신
inv update-network-topology NixOS 설정에서 논리 네트워크 토폴로지 갱신
inv expired-accounts 만료 계정 확인