| name | running-containers |
| description | Use for any Podman container operation or NixOS homeserver service infrastructure work.
Covers: container commands (list, logs, restart, OOM debugging), homeserver.* mkOption system,
service-lib.sh shared library, Caddy reverse proxy (HTTPS, domains), service update timers,
DB backup services (immich-db-backup), port mapping, and container resource limits in constants.nix.
Trigger: 'podman', '์ปจํ
์ด๋', 'container', 'OOM', 'homeserver ์ต์
', 'service-lib', 'ํฌํธ ๋งคํ',
'์๋น์ค ์
๋ฐ์ดํธ', '์
๋ฐ์ดํธ ํ์ด๋จธ', 'DB ๋ฐฑ์
', 'immich-db-backup', '๋ฆฌ์์ค ์ ํ', 'Caddy',
'๋ฆฌ๋ฒ์ค ํ๋ก์', 'HTTPS ์ธ์ฆ์', '๋ฒ์ ์ฒดํฌ', '์๋น์ค ์ํ', '์๋น์ค ํฌํธ'.
NOT for service-specific application workflows (use hosting-copyparty,
hosting-karakeep).
|
์ปจํ
์ด๋ ๊ด๋ฆฌ (Podman/ํ์๋ฒ)
Podman ์ปจํ
์ด๋ ๋ฐ ํ์๋ฒ ์๋น์ค (immich, uptime-kuma, copyparty, karakeep) ์ด์ ๊ฐ์ด๋.
Caddy HTTPS ๋ฆฌ๋ฒ์ค ํ๋ก์๋ฅผ ํตํด *.greenhead.dev ๋๋ฉ์ธ์ผ๋ก ์ ๊ทผํ๋ค.
๋ชจ๋ ๊ตฌ์กฐ (mkOption ๊ธฐ๋ฐ)
ํ์๋ฒ ์๋น์ค๋ homeserver.* ์ต์
์ผ๋ก ์ ์ธ์ ํ์ฑํํ๋ค:
# modules/nixos/configuration.nix โ ์ฃผ์ ์๋น์ค๋ง ๋ฐ์ท
homeserver.immich.enable = true; # ์ฌ์ง ๋ฐฑ์
homeserver.uptimeKuma.enable = true; # ๋ชจ๋ํฐ๋ง
homeserver.copyparty.enable = true; # ํ์ผ ์๋ฒ
homeserver.karakeep.enable = true; # ์น ์์นด์ด๋ฒ
homeserver.immichBackup.enable = true; # Immich DB ๋ฐฑ์
homeserver.reverseProxy.enable = true; # Caddy HTTPS ๋ฆฌ๋ฒ์ค ํ๋ก์
# ๋ถ๊ฐ ์๋น์ค: *Update, *Backup, *Cleanup, *Notify ๋ฑ๋ ๋์ผ ํจํด
ํ์ผ ๊ตฌ์กฐ
| ๊ฒฝ๋ก ํจํด | ์ญํ |
|---|
modules/nixos/options/homeserver.nix | mkOption ์ ์ + ์๋น์ค ๋ชจ๋ import |
modules/nixos/programs/docker/runtime.nix | Podman ๋ฐํ์ ๊ณตํต ์ค์ |
modules/nixos/programs/docker/<์๋น์ค>.nix | ๊ฐ๋ณ ์ปจํ
์ด๋ ์ ์ (immich, uptime-kuma, copyparty, karakeep ๋ฑ) |
modules/nixos/programs/<์๋น์ค>-update/ | ๋ฒ์ ์ฒดํฌ + ์
๋ฐ์ดํธ (immich, uptime-kuma, copyparty, karakeep) |
modules/nixos/programs/caddy.nix | Caddy HTTPS ๋ฆฌ๋ฒ์ค ํ๋ก์ |
modules/nixos/lib/service-lib.sh / .nix | ๊ณตํต ์
ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ + Nix wrapper |
modules/nixos/lib/mk-update-module.nix | ์
๋ฐ์ดํธ ๋ชจ๋ ์์ฑ ํฌํผ |
modules/nixos/lib/tailscale-wait.nix | Tailscale IP ๋๊ธฐ ์ ํธ๋ฆฌํฐ |
libraries/constants.nix | IP, ๊ฒฝ๋ก, ๋๋ฉ์ธ, ๋ฆฌ์์ค ์ ํ, UID ์์ |
์์ ์ฐธ์กฐ
Docker ์๋น์ค์์ ์ฌ์ฉํ๋ ์์ (libraries/constants.nix):
constants.network.minipcTailscaleIP - Tailscale IP
constants.paths.dockerData / mediaData - ๋ฐ์ดํฐ ๊ฒฝ๋ก
constants.containers.immich.* - Immich ๋ฆฌ์์ค ์ ํ
constants.ids.render - render ๊ทธ๋ฃน GID (ํ๋์จ์ด ๊ฐ์)
constants.domain.base / subdomains - ์ปค์คํ
๋๋ฉ์ธ (greenhead.dev)
HTTPS ์ ๊ทผ (Caddy ๋ฆฌ๋ฒ์ค ํ๋ก์)
| ์๋น์ค | ๋๋ฉ์ธ | localhost |
|---|
| Immich | https://immich.greenhead.dev | 127.0.0.1:2283 |
| Uptime Kuma | https://uptime-kuma.greenhead.dev | 127.0.0.1:3002 |
| Copyparty | https://copyparty.greenhead.dev | 127.0.0.1:3923 |
| Karakeep | https://archive.greenhead.dev | 127.0.0.1:3000 |
Caddy๊ฐ Cloudflare DNS-01 ACME๋ก Let's Encrypt ์ธ์ฆ์๋ฅผ ์๋ ๋ฐ๊ธํ๋ค.
Tailscale IP (100.79.80.95:443)์๋ง ๋ฐ์ธ๋ฉ๋์ด VPN ๋ด๋ถ ์ ์ฉ์ด๋ค.
๋ชจ๋ ์ปจํ
์ด๋๋ config.time.timeZone์ ์ฐธ์กฐํ๋ฉฐ, configuration.nix์ time.timeZone๋ง ์์ ํ๋ฉด ์๋ ์ ์ฉ๋๋ค.
Known Issues
- OCI ๋ฐฑ์๋ ๋ช
์ ํ์:
runtime.nix์ backend = "podman" ๋๋ฝ ์ Docker fallback ์๋ฌ
- immich ML OOM: CPU ๋ฒ์ ์ด๋ฏธ์ง ์ฌ์ฉ (
release, openvino ์๋)
- Tailscale IP ๋ฐ์ธ๋ฉ:
tailscale-wait.nix๋ก 60์ด ๋๊ธฐ. Immich/Copyparty/Uptime Kuma๋ 127.0.0.1 ๋ฐ์ธ๋ฉ (Caddy ํ๋ก์)
- Uptime Kuma
--network=host: localhost ์๋น์ค ๋ชจ๋ํฐ๋ง์ ์ํด ํธ์คํธ ๋คํธ์ํฌ ํ์
- Caddy HTTPS: Cloudflare DNS-01 ACME, Tailscale IP ์ ์ฉ ๋ฐ์ธ๋ฉ,
secrets/cloudflare-dns-api-token.age
- ๋ฐฉํ๋ฒฝ:
trustedInterfaces = [ "tailscale0" ] โ ๋ณด์์ ์๋น์ค ๋ฐ์ธ๋ฉ ์ฃผ์์ ์์กด
- Immich DB ๋น๋ฐ๋ฒํธ: agenix
secrets/immich-db-password.age, POSTGRES_PASSWORD_FILE ๋ณผ๋ฅจ ๋ง์ดํธ
๋น ๋ฅธ ์ฐธ์กฐ
Podman ๋ช
๋ น์ด
podman ps -a
podman logs <container-name>
podman restart <container-name>
systemctl status podman-<container-name>
์๋น์ค ํ์ฑํ/๋นํ์ฑํ
# modules/nixos/configuration.nix์์ ๋ณ๊ฒฝ ํ nrs ์คํ
ํตํฉ ์๋น์ค ์
๋ฐ์ดํธ ์์คํ
4๊ฐ ์ปจํ
์ด๋ ์๋น์ค๊ฐ service-lib.sh ๊ณตํต ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ณต์ ํ๋ ์
๋ฐ์ดํธ ์ธํ๋ผ:
| ์๋น์ค | ๋ฒ์ ์ฒดํฌ (์๋) | ์๋ ์
๋ฐ์ดํธ | ํ์ด๋จธ |
|---|
| Immich | immich-version-check | sudo immich-update | 03:00 |
| Uptime Kuma | uptime-kuma-version-check | sudo uptime-kuma-update | 03:30 |
| Copyparty | copyparty-version-check | sudo copyparty-update | 04:00 |
| Karakeep | karakeep-version-check | sudo karakeep-update --ack-bridge-risk | 06:00 |
๋ฐฑ์
ํ์ด๋จธ:
| ์๋น์ค | systemd ์๋น์ค | ํ์ด๋จธ | ๋ฐฑ์
์์น |
|---|
| Karakeep | karakeep-backup | 05:00 | HDD (/mnt/data/backups/karakeep) |
| Immich DB | immich-db-backup | 05:30 | HDD (/mnt/data/backups/immich) |
๊ณตํต ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์: send_notification, fetch_github_release, get_image_digest, check_watchdog, check_initial_run, record_success, http_health_check
์๋น์ค๋ณ Pushover ํ ํฐ ๋
๋ฆฝ ์ด์ (agenix: pushover-immich, pushover-uptime-kuma, pushover-copyparty, pushover-karakeep).
Immich: API ๋ฒ์ ์กฐํ ๊ฐ๋ฅ โ "ํ์ฌ v2.5.5 โ ์ต์ v2.6.0" ํํ ์๋ฆผ. ์์ธ: references/immich-update.md
Immich DB ๋ฐฑ์
: immich-db-backup ์๋น์ค๊ฐ ๋งค์ผ 05:30์ podman exec immich-postgres pg_dump -Fc๋ก ์ปค์คํ
ํฌ๋งท ๋ฐฑ์
์์ฑ. ๋์คํฌ ๊ณต๊ฐ ๊ฒ์ฌ, pg_restore --list ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฆ, ์์์ ํ์ผ ์ด๋, 30์ผ ๋ณด๊ด. ์คํจ ์ Pushover ์๋ฆผ (pushover-immich ์ฌ์ฌ์ฉ). sudo systemctl start immich-db-backup์ผ๋ก ์๋ ์คํ.
Uptime Kuma/Copyparty/Karakeep: ์ด๋ฏธ์ง์ ๋ฒ์ ๋ ์ด๋ธ ์์ โ GitHub latest ์ถ์ + ์ด๋ฏธ์ง digest ๋น๊ต ๋ฐฉ์. ์์ธ: references/service-update-system.md
Karakeep ์๋ ์
๋ฐ์ดํธ๋ --ack-bridge-risk ํ๋๊ทธ๊ฐ ํ์๋ค (๋ธ๋ฆฟ์ง/๋ก๊ทธ ์์กด์ฑ ์ธ์ง ๊ฐ์ ).
Karakeep ์ด๋ฒคํธ ์๋ฆผ: karakeep-notify๊ฐ ์นํ
โPushover ๋ธ๋ฆฌ์ง(socat)๋ก ์์นด์ด๋น ์ฑ๊ณต/์คํจ ์๋ฆผ์ ์ ์กํ๋ค.
FolderAction ์๋ ์
๋ก๋
macOS์์ ~/FolderActions/upload-immich/์ ํ์ผ์ ๋ฃ์ผ๋ฉด Immich์ ์๋ ์
๋ก๋. ์์ธ: references/folder-action.md
๋ชจ๋ฐ์ผ SSH ์ด๋ฏธ์ง ์ ๋ฌ
๋ชจ๋ฐ์ผ SSH ํ๊ฒฝ์์ Immich๋ฅผ ํ์ฉํ์ฌ AI ์์ด์ ํธ(Claude Code ยท Codex CLI ๋ฑ)์ ์ด๋ฏธ์ง ์ ๋ฌ. ์์ธ: references/mobile-ssh-image.md
์์ฃผ ๋ฐ์ํ๋ ๋ฌธ์
- OCI ๋ฐฑ์๋ ๋ฏธ์ค์ :
runtime.nix์ backend = "podman" ํ์ธ
- ML OOM: CPU ๋ฒ์ ์ด๋ฏธ์ง๋ก ๋ณ๊ฒฝ
- IP ๋ฐ์ธ๋ฉ ์คํจ:
tailscale-wait.nix๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ import ๋์๋์ง ํ์ธ
- DB ๋น๋ฐ๋ฒํธ ์ค๋ฅ:
secrets/immich-db-password.age ์กด์ฌ ํ์ธ, cd secrets && nix run github:ryantm/agenix -- -r ์ฌ์ํธํ
- Uptime Kuma์์ localhost ์๋น์ค ๋ชจ๋ํฐ๋ง ๋ถ๊ฐ:
--network=host ํ์ (๊ธฐ๋ณธ ๋ธ๋ฆฟ์ง์์๋ 127.0.0.1 ์ ๊ทผ ๋ถ๊ฐ)
- Caddy HTTPS ์ธ์ฆ์ ๋ฐ๊ธ ์คํจ: Cloudflare API ํ ํฐ ํ์ธ (
sudo cat /run/caddy/env), systemctl status caddy-env
๋ ํผ๋ฐ์ค