diff --git a/hosts/heather/arion-compose.nix b/hosts/heather/arion-compose.nix index a7544f1..c9b03d1 100644 --- a/hosts/heather/arion-compose.nix +++ b/hosts/heather/arion-compose.nix @@ -33,6 +33,7 @@ teable-data = {}; teable-db = {}; teable-redis = {}; + teable-assets = {}; # jitsi-стек (когда добавим): # jitsi-prosody-config = {}; # jitsi-jvb-config = {}; @@ -91,30 +92,48 @@ # или секцией после forgejo. # === Teable (teable.iscg.dev) === - # Тяжёлый стек: app + postgres + redis. Добавить после forgejo. - # - # teable = { - # service.image = "teableio/teable:latest"; - # service.container_name = "teable"; - # service.restart = "unless-stopped"; - # service.ports = [ "127.0.0.1:2345:3000" ]; - # service.volumes = [ "teable-data:/app/data" ]; - # service.depends_on = [ "teable-db" "teable-redis" ]; - # # TODO: env (DATABASE_URL, REDIS_URL, SECRET_KEY, PUBLIC_ORIGIN, ...) - # }; - # teable-db = { - # service.image = "postgres:15-alpine"; - # service.container_name = "teable-db"; - # service.restart = "unless-stopped"; - # service.volumes = [ "teable-db:/var/lib/postgresql/data" ]; - # # TODO: POSTGRES_PASSWORD (sops) - # }; - # teable-redis = { - # service.image = "redis:alpine"; - # service.container_name = "teable-redis"; - # service.restart = "unless-stopped"; - # service.volumes = [ "teable-redis:/data" ]; - # }; + # Стек: app + postgres + redis. Данные перенесены с iscg-dev (2026-07-12): + # - postgres восстановлен из pg_dump (18M, consistent, без остановки источника) + # - .assets (3.2G, 4392 файлов) в named volume heather_teable-assets + # - teable-data (local-storage) пустой — наполняется при работе + # - redis пустой — кэш, перестраивается + # Секреты (POSTGRES_PASSWORD, SECRET_KEY) новые, в pass iscg.dev/teable/. + # НЕ пушить env-файл в forgejo — secrets. + teable = { + service.image = "teableio/teable:latest"; + service.container_name = "teable"; + service.restart = "unless-stopped"; + service.ports = [ "127.0.0.1:2345:3000" ]; + service.volumes = [ + "teable-data:/app/.local-storage" + "teable-assets:/app/.assets" + ]; + service.depends_on = [ "teable-db" "teable-redis" ]; + service.env_file = [ "/var/lib/teable-secrets/teable.env" ]; + service.environment = { + POSTGRES_HOST = "teable-db"; + POSTGRES_PORT = "5432"; + POSTGRES_DB = "teable"; + POSTGRES_USER = "teable"; + REDIS_URL = "redis://teable-redis:6379"; + PUBLIC_DOMAIN = "teable.iscg.dev"; + PUBLIC_ORIGIN = "https://teable.iscg.dev"; + }; + }; + teable-db = { + service.image = "postgres:15-alpine"; + service.container_name = "teable-db"; + service.restart = "unless-stopped"; + service.volumes = [ "teable-db:/var/lib/postgresql/data" ]; + service.env_file = [ "/var/lib/teable-secrets/teable.env" ]; + }; + teable-redis = { + service.image = "redis:alpine"; + service.container_name = "teable-redis"; + service.restart = "unless-stopped"; + service.command = "redis-server --appendonly yes"; + service.volumes = [ "teable-redis:/data" ]; + }; # === Silverbullet (note.iscg.dev) — ИСКЛЮЧЕНИЕ: bind mount === # Space = /srv/syncthing/herbarium (sync'ается syncthing на устройства).