- apisix.nix가 템플릿 + 런타임 sed 치환 구조로 변경됨 - admin key는 agenix로 암호화되어 git에 평문 없음 - /run/apisix/config.yaml(tmpfs)에 렌더링 후 컨테이너 마운트 - 회전 절차 문서화
9.1 KiB
title, updated, aliases, tags
| title | updated | aliases | tags | ||||||
|---|---|---|---|---|---|---|---|---|---|
| zlambda (Linode 도쿄, NixOS) | 2026-04-08 |
|
|
이름 변경 안내: 이 노드는 2026-04-08까지
sandbox-tokyo로 불렸으나 OS hostname / Tailscale machine name / git 레포가 모두zlambda로 통일되었습니다. 옛 이름sandbox-tokyo는 Mac ssh config 및 본 문서 alias로만 남아 있습니다.
개요
Linode Tokyo VM (라벨 zlambda, id 47271589)을 2026-04-08 Debian 12 → NixOS 25.05 (Warbler) 로 교체. nixos-anywhere로 무관리 원격 설치.
이전에 운영하던 netbis DR APISIX, microsocks, tlsproxy, vault-prod, wg-easy 등은 제거됨. 이후 같은 날 APISIX + etcd를 NixOS virtualisation.oci-containers로 재선언하여 기동 완료 (apisix.nix). 라우트/SSL은 아직 비어 있음.
접속
| 방법 | 명령 |
|---|---|
| Tailscale (정식) | ssh root@zlambda (100.78.51.18) |
| Tailscale (alias) | ssh root@sandbox-tokyo ← Mac ssh config alias로만 동작 |
| 공인 IP | ssh root@139.162.71.52 |
| LISH 콘솔 | ssh -tt netbis@lish-tokyo2.linode.com zlambda (Linode profile.authorized_keys에 kaffa-Macmini RSA 등록 필요) |
Linode 설정
| 항목 | 값 |
|---|---|
| 라벨 | zlambda |
| ID | 47271589 |
| 타입 | g6-standard-1 (1 vCPU, 2GB RAM, 50GB SSD) |
| 리전 | ap-northeast (Tokyo, lish-tokyo2) |
| 공인 IP | 139.162.71.52 |
| Configuration profile | "NixOS Direct Disk" (id 99124808) |
| Kernel | linode/direct-disk ← Linode emulated GRUB은 NixOS grub.cfg를 못 읽어서 변경 |
| 디스크 sda | 121448048, ext4, 50688 MB → / |
| 디스크 sdb | 121448049, swap, 512 MB → swap |
| Linode Firewall | id 691875 "zlambda" — TCP22(any), TCP80/443(Cloudflare), UDP41641(any), ICMP(any), default DROP |
| Linode API token | Vault secret/cloud/linode (netbis 계정용) |
디스크 레이아웃
sda (49.5G)
├── sda1 (1M) BIOS boot partition (EF02)
└── sda2 (49.5G) ext4, mountpoint /
sdb (512M)
└── sdb1 (510M) swap
GRUB은 BIOS-GPT 방식, sda MBR + BIOS boot partition + /boot inside / fs.
NixOS Configuration
Gitea 저장소: https://gitea.inouter.com/kaffa/nixos-infra (private)
nixos-infra/
├── README.md
├── .gitignore
├── flake.nix # disko + nixpkgs 25.05
├── flake.lock # 잠긴 input 버전
├── configuration.nix # 메인 설정
└── hardware-configuration.nix # nixos-anywhere가 자동 생성
clone 위치:
- kaffa-macmini:
~/nixos-infra/(작성/수정용, push 권한). remote는 토큰 임베드 https URL - zlambda:
/root/nixos-infra/(실제 빌드/적용용). remote는 SSH (git@gitea.inouter.com:kaffa/nixos-infra.git), gitea repo deploy key 등록됨 (/root/.ssh/gitea_nixos_infra, read-only, fingerprintSHA256:Amz8LUDKHU59qxyMS48hfoP+KxRE/o6CITfkXzkAFNU) - macbookair: 아직 clone 안 함 (필요 시
git clone https://gitea.inouter.com/kaffa/nixos-infra.git)
향후 두 번째 NixOS 노드 추가 시 hosts/<name>/ 구조로 재편 예정 (README.md 참조).
flake input:
- nixpkgs:
github:NixOS/nixpkgs/nixos-25.05 - disko:
github:nix-community/disko
활성화된 모듈/서비스:
networking.hostName = "zlambda"services.openssh(PermitRootLogin prohibit-password, PasswordAuth off)services.tailscale.enable = truevirtualisation.docker.enable = true(autoPrune 켜짐)virtualisation.oci-containers.backend = "docker"(apisix.nix모듈에서 apisix + apisix-etcd 선언)nix.settings.experimental-features = [ "nix-command" "flakes" ]- 패키지: vim git curl wget htop tmux jq rsync
- TZ: Asia/Tokyo, locale en_US.UTF-8
networking.firewall.enable = false(Linode firewall에 일임)system.stateVersion = "25.05"
apisix.nix 모듈 요약:
- 컨테이너: apisix(172.22.222.20), apisix-etcd(172.22.222.3), docker network
apisix-net(172.22.222.0/24) - 포트: 80→9080, 443→9443, 9180(admin)
- 데이터: etcd는
/var/lib/apisix/etcdbind mount, apisix 로그는 named volumeapisix-logs - config.yaml은 템플릿(Nix store) + 런타임 렌더링(
apisix-render-config.service) →/run/apisix/config.yaml후 read-only bind mount. admin key는 자리표시자__ADMIN_KEY__로 들어있고 render 서비스가 agenix 복호화 값으로 sed 치환. - systemd 의존성:
init-apisix-net.service(oneshot network 생성) →docker-apisix-etcd;apisix-render-config.service(oneshot) +init-apisix-net.service→docker-apisix - 시크릿: agenix(
secrets/apisix-admin-key.age) → activation 시/run/agenix/apisix-admin-key로 복호화. zlambda host ed25519 키와 kaffa 사용자 ed25519 키 두 개로 암호화됨. - 상세 운영: netbis
커널 / sysctl 튜닝 (2026-04-08 추가):
boot.kernelModules = [ "br_netfilter" ](docker bridge sysctl 활성화용)- 네트워크: BBR + fq qdisc, somaxconn 4096, tcp_fin_timeout 15, tcp_tw_reuse, tcp_keepalive 600/30/6, netdev_max_backlog 16384, tcp_max_syn_backlog 8192
- 포워딩: ip_forward, IPv6 forwarding, bridge-nf-call-{ip,ip6}tables (docker)
- 메모리: vm.swappiness=10, vm.overcommit_memory=1, vm.dirty_ratio=10/5
- 파일/inotify: file-max=1048576, inotify watches=524288, instances=8192, queued_events=65536
- 콘솔: kernel.printk = "3 4 1 3"
GRUB 설정: disko의 EF02 파티션이 자동으로 grub.devices를 채워주므로 boot.loader.grub.devices는 명시하지 않음 (명시하면 mirroredBoots 중복 오류 남).
재배포/변경 방법
1. 호스트에서 직접 rebuild (권장, 가장 빠름)
# kaffa-macmini에서 변경
cd ~/nixos-infra
$EDITOR configuration.nix
git add -A && git commit -m "..." && git push
# zlambda에서 적용 (deploy key 자동 인증)
ssh root@zlambda
cd /root/nixos-infra
git pull
nixos-rebuild switch --flake .#zlambda
2. macOS에서 원격 rebuild는 권장하지 않음
macOS는 aarch64-darwin이라 x86_64-linux용 nixos-rebuild 래퍼를 native build 못 함. 시도하면 cross-build 단계에서 실패하거나 한참 걸림. 대신 호스트에서 직접 rebuild 권장. 필요 시 kaffa-macmini에 linux-builder VM을 켜면 가능.
3. nixos-anywhere로 처음부터 재설치 (디스크 wipe)
cd ~/nixos-infra
nix run github:nix-community/nixos-anywhere -- \
--flake .#zlambda --build-on remote \
root@139.162.71.52
설치 과정 메모 (2026-04-08)
- 상황: 누군가 nixos-anywhere를 시도하다가 14시간째 nixos-installer에 멈춰 있었음. 이전 Debian 디스크는 wipe되어 있었고, 원본 데이터는 모두 손실.
- 첫 시도 실패: installer 환경에서 sda(512MB)/sdb(50GB) 순서가 뒤바뀜 + 1.9GB RAM에 swap 없이 nixos-install 실행 → OOM-lock으로 SSH banner도 응답 안 함.
- 회복: Linode
POST /linode/instances/{id}/rebuild로 Debian 12 클린 설치 → 디스크 순서 정상화(sda=50G, sdb=512M). - nixos-anywhere 실행:
--build-on remote --generate-hardware-config로 자동 진행. 첫 실행에서 disko + grubmirroredBoots중복 오류 →boot.loader.grub.devices를 빼고 disko의 자동 설정을 사용하도록 수정 후 재실행 성공. - 부팅 안 됨: Linode 프로필 kernel이
linode/grub2(Linode emulated GRUB)였는데, NixOS grub.cfg 경로를 인식 못해서grub>프롬프트에 멈춤. LISH 콘솔로 확인. - 해결: Configuration profile kernel을
linode/direct-disk로 변경 후 reboot → 정상 부팅. - Tailscale: API key로 ephemeral auth key 발급(
POST /api/v2/tailnet/-/keys) →tailscale up --authkey. 옛 device(100.79.87.48)는 offline이라 새 device가sandbox-tokyo-1로 가입됨 → 옛 device 삭제(API DELETE) + rename으로sandbox-tokyo이름 회수.
후속 변경 (2026-04-08, 같은 날)
- Gitea 리포지토리 kaffa/nixos-infra (private) 생성 →
kaffa-macmini ~/nixos-infra/와zlambda /root/nixos-infra/양쪽에 clone. zlambda는 deploy key (read-only SSH) 사용. - macbookair ed25519 키(
SHA256:kdYCep0k22+QxnOq...)를users.users.root.openssh.authorizedKeys.keys에 영구 등록 → macbookair에서 직접ssh root@zlambda가능. - 호스트네임
sandbox-tokyo→zlambda: NixOS configuration.nix의networking.hostName,/etc/hostname, kernel hostname, Tailscale device name(API rename, deviceId6511000756301111) 모두 통일. macbookair~/.ssh/config에Host zlambda sandbox-tokyoalias 양쪽 유지. - 커널 / sysctl 튜닝: BBR + fq qdisc, conntrack/inotify/file 한도 증가, swappiness 등. 위 "활성화된 모듈/서비스" 섹션 참조.
알려진 후속 작업
- Gitea 리포지토리로 푸시 →
kaffa/nixos-infra(private) - zlambda에 deploy key 설정 (gitea repo deploy key id 1, fingerprint
SHA256:Amz8LUDKHU59qxyMS48hfoP+KxRE/o6CITfkXzkAFNU) - macbookair ed25519 등록 + 호스트네임 zlambda 통일
- 커널/sysctl 튜닝
- vault SSH CA에 새 호스트키 등록 (vault.md 참조)
- 필요 시 netbis APISIX/etcd Docker compose 재배포
- 필요 시 searxng용 tlsproxy/microsocks 재배포