SSD Nodes Learn Hosting plans →
가이드 Matt Connor작성자 Matt Connor · 업데이트됨 2026-08-13

Telegram AI 비서 Iva 자체 호스팅 구축 방법

포트 개방이나 도메인 없이 Telegram AI 비서 Iva를 VPS에 설치하는 방법을 알아봅니다. systemd 서비스 등록부터 Obsidian과 연동된 마크다운 데이터 백업까지, 보안을 유지하며 개인용 AI 비서를 운영하는 전체 과정을 상세히 설명합니다.

구축할 시스템

Iva는 자체 호스팅하는 Telegram AI 비서입니다. 이 서비스는 인바운드 포트를 열거나 도메인을 연결할 필요가 없는 몇 안 되는 서비스 중 하나입니다. 외부에서 접근하는 포트가 없으므로 인증서도 필요하지 않습니다. 서비스가 Telegram으로 먼저 연결을 시도하고 해당 연결을 유지한 채 메시지를 읽어오는 방식입니다. 그 외의 모든 기능은 이 하나의 아웃바운드 연결에서 파생됩니다.

Iva는 MIT 라이선스를 따르며 Node로 작성되었습니다. Iva가 기억하는 내용은 Obsidian으로 직접 열 수 있는 일반 마크다운 파일 폴더에 저장되므로, 앱 없이도 기록을 읽을 수 있습니다. 이 가이드는 2026년 8월 6일에 릴리스된 v0.3.13 버전을 기준으로 작성되었습니다.

대부분의 자체 호스팅 소프트웨어는 DNS 레코드와 Certbot으로 발급받은 Let's Encrypt 인증서를 필요로 합니다. Iva는 이 과정을 완전히 생략하므로, SSH만 허용하는 방화벽 뒤의 작은 VPS만으로도 완벽한 배포가 가능합니다.

Iva가 포트를 개방할 필요가 없는 이유

iva-telegram-poll.service는 롱 폴링(long polling) 브리지입니다. 이 브리지는 Telegram의 getUpdates API를 호출하고 응답을 기다리는 방식이므로, 모든 연결은 사용자의 서버에서 시작됩니다. Telegram이 역으로 연결을 시도하지 않으므로, 리버스 프록시를 설정하거나 인증서 갱신을 신경 쓸 필요가 없습니다.

에이전트 자체는 127.0.0.1 포트 8723에서만 수신 대기합니다. 프로젝트 문서에서는 이 포트를 외부로 노출하지 말 것을 명시하고 있으며, 앞에 리버스 프록시를 배치할 경우 반드시 Bearer 토큰 요구 사항을 유지해야 합니다. 설치 후 바인딩 주소를 확인하십시오.

sudo ss -tlnp | grep 8723

주소는 반드시 127.0.0.1:8723로 표시되어야 합니다. 0.0.0.0:8723와 같은 와일드카드 주소는 에이전트의 HTTP 경로가 인터넷에서 접근 가능하다는 의미이므로, 봇에 개인적인 데이터를 전송하기 전에 이를 수정해야 합니다.

따라서 방화벽은 닫힌 상태를 유지하십시오. ufw enable을 활성화하기 전에 SSH를 허용해야 합니다. 그렇지 않으면 현재 작업 중인 SSH 세션이 끊기게 됩니다.

sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status

한 줄 설치 스크립트의 실제 동작

프로젝트 메인 페이지에서 제공하는 한 줄 명령어는 GitHub의 스크립트를 bash로 바로 전달하여 실행합니다. 이 스크립트는 단순히 프로그램 하나만 설치하는 것이 아니므로, 실행 전 반드시 내용을 확인하십시오.

curl -fsSL https://raw.githubusercontent.com/smixs/iva/main/install.sh -o iva-install.sh
less iva-install.sh
  • 감지된 패키지 관리자를 사용하여 시스템 패키지를 설치합니다: git, gh, python3, ffmpeg, pandoc, poppler-utils.
  • 시스템 RAM이 1.5 GB 미만이고 스왑이 설정되어 있지 않은 경우, 빌드 과정에서 프로세스가 종료되는 것을 방지하기 위해 /swapfile에 2 GB 크기의 스왑 파일을 생성합니다.
  • nvm을 설치한 뒤, Iva가 구동되는 최소 버전인 Node 24를 설치합니다.
  • Python 패키지 관리자인 uv~/.local/bin에 설치합니다.
  • 저장소를 ~/iva으로 복제하고 npm ci을 실행합니다.
  • 두 개의 전역 npm 패키지인 agent-browser(이후 Chromium을 다운로드함)와 @googleworkspace/cli을 설치합니다.
  • 설정 마법사를 실행하고 프로젝트를 빌드하며 볼트를 생성합니다.
  • iva 명령어를 ~/.local/bin에 기록하고 systemd 사용자 유닛을 설치합니다.

한 줄의 명령어로 상당히 많은 소프트웨어가 설치됩니다. README에서 root가 아닌 일반 사용자로 설치하라고 안내하는 이유도 여기에 있습니다. 에이전트의 셸 도구는 나중에 설치자가 가졌던 권한으로 실행되기 때문입니다. 스크립트는 패키지 설치와 스왑 파일 생성 시에만 sudo을 호출하며, 이미 root 권한인 경우에는 명령어를 직접 실행하는 도우미를 통해 수행합니다.

설치 전 전용 사용자 생성

Iva를 위한 별도의 계정을 생성하십시오. 에이전트는 컨테이너나 샌드박스 없이 Node의 child_process을 통해 호스트에서 셸 명령을 실행하므로, 해당 계정이 보안 경계 역할을 합니다.

sudo adduser --disabled-password --gecos "" iva
sudo usermod -aG sudo iva
sudo install -d -m 700 -o iva -g iva /home/iva/.ssh
sudo cp ~/.ssh/authorized_keys /home/iva/.ssh/authorized_keys
sudo chown iva:iva /home/iva/.ssh/authorized_keys
sudo chmod 600 /home/iva/.ssh/authorized_keys
sudo loginctl enable-linger iva

enable-linger은 Iva가 systemd 사용자 유닛으로 실행되기 때문에 중요합니다. Linger를 설정하지 않으면 사용자의 마지막 세션이 종료되는 즉시 systemd가 해당 사용자의 서비스를 중단하므로, SSH 연결을 끊을 때 어시스턴트도 함께 종료됩니다. 이 규칙은 직접 작성하는 모든 systemd 서비스 및 타이머에도 동일하게 적용됩니다.

해당 계정은 설치 프로그램이 패키지를 추가하는 동안에만 sudo 권한이 필요합니다. 설치가 완료되면 이 권한을 회수하십시오.

sudo deluser iva sudo

해당 사용자로 직접 SSH에 로그인하십시오. sudo -iu iva으로 진입한 셸에는 DBUS_SESSION_BUS_ADDRESS이나 XDG_RUNTIME_DIR가 설정되어 있지 않으므로, 모든 systemctl --user 명령은 Failed to connect to bus 오류와 함께 실패합니다. 이러한 경계를 설정하는 것은 최소 권한 사용자로 서비스를 실행하는 것과 동일한 작업입니다.

bash로 파이프하지 않고 특정 릴리스 고정하여 설치하기

설치 프로그램에는 유용한 기능이 있습니다. 스크립트는 무언가를 복제하기 전에, 스크립트가 위치한 디렉터리에 "eve"을 포함하는 package.json가 이미 존재하는지 확인합니다. 존재한다면 해당 체크아웃을 빌드하고 복제 과정을 건너뜁니다. 따라서 사용자가 직접 버전을 선택할 수 있습니다.

git clone --branch v0.3.13 https://github.com/smixs/iva.git ~/iva
cd ~/iva
git log -1 --oneline
bash install.sh

이제 어떤 코드가 실행 중인지 알 수 있습니다. 스크립트가 특정 시간에 main을 복제할 때, 그 시점의 상태가 무엇인지 알 수 없는 것과는 다릅니다. Iva는 2026년 8월 4일에서 6일 사이에 5개의 릴리스를 배포했으므로, 오늘 아침의 main과 오늘 오후의 main는 동일한 프로그램이 아닙니다.

태그 체크아웃은 git을 detached HEAD 상태로 둡니다. 정상적으로 실행되지만 한계를 이해해야 합니다. iva update은 체크아웃을 업데이트 브랜치로 이동시키므로, 고정(pin)은 영구적인 동결이 아니라 알려진 시작 지점일 뿐입니다. iva version은 패키지 버전과 git 커밋을 출력하므로, 현재 위치를 언제든 확인할 수 있습니다.

의도적으로 이후 릴리스로 이동하려면 태그를 나열하고, IVA_TAG를 선택한 태그로 설정한 뒤, 체크아웃 내부에서 설치 프로그램을 다시 실행하십시오.

cd ~/iva
git fetch --tags
git tag --list 'v*' | sort -V | tail -5
IVA_TAG=v0.3.13
git checkout "$IVA_TAG"
bash install.sh --skip-setup
iva restart

--skip-setup은 이미 작동 중인 .env 위에서 마법사(wizard)가 다시 실행되는 것을 방지합니다.

5단계 마법사 설정 및 필요한 키

  1. 모델 공급자 및 모델. MODEL_PROVIDERopencode, ollama, openrouter 또는 codex를 허용합니다. 마법사는 키를 실시간으로 검증하고 현재 플랜에서 제공하는 모델 목록을 표시합니다.
  2. 음성 및 검색. 음성 메모를 받아쓰기하려면 Deepgram 키가 필요합니다. 웹 검색 키(Tavily, Exa, Parallel 또는 Brave)는 선택 사항입니다.
  3. @BotFather로부터 받은 Telegram 봇 토큰. getMe 엔드포인트를 통해 확인합니다.
  4. 접근 제어. 봇에게 메시지를 보내면 마법사가 getUpdates에서 사용자의 숫자 ID를 읽어옵니다.
  5. 시스템 설정. IANA 시간대, 볼트 디렉터리, 로컬 포트(기본값 8723)를 설정합니다.

이 중 두 가지는 "한 줄 명령"이라는 표현 뒤에 숨겨진 의존성입니다. Iva는 자체 모델을 포함하지 않으므로, 응답을 생성하려면 유료 모델 플랜이나 API 키가 필요합니다. 또한 자체적으로 오디오를 받아쓰지 않으므로 음성 메모를 처리하려면 별도의 서비스가 필요합니다. Deepgram의 nova-3 모델과 DEEPGRAM_LANGUAGE=multi 설정을 사용하면 언어를 감지할 수 있으며, 신규 Deepgram 계정은 개인적인 용도로 수개월간 사용할 수 있는 초기 크레딧을 제공합니다. 텍스트 기능은 모델 키만으로 작동하며, 음성 기능만 Deepgram에 의존합니다.

마법사가 생성한 설정을 확인하십시오.

grep -E '^(MODEL_PROVIDER|TELEGRAM_ALLOWED_USER_IDS|ASSISTANT_VAULT_DIR|IVA_PORT)=' ~/iva/.env
ls -l ~/iva/.env

ls-rw-------, 모드 0600으로 출력되어야 합니다. 해당 파일에 방금 입력한 모든 키가 저장되기 때문입니다. TELEGRAM_ALLOWED_USER_IDS에는 사용자의 숫자 ID가 포함되어야 합니다. 허용 목록은 기본적으로 차단(fail closed) 방식이므로, 값이 비어 있으면 Iva는 누구에게도 응답하지 않습니다.

모델은 프로세스 시작 시 한 번만 읽어옵니다. MODEL_PROVIDER을 편집하거나 .env의 모델 이름을 변경해도 iva restart를 실행하기 전까지는 아무런 변화가 없습니다. openrouter에서 모델 이름은 단순한 이름이 아니라 anthropic/claude-sonnet-4.5과 같은 공급자 슬러그 형식이어야 합니다. codex에는 API 키가 전혀 필요하지 않으며, iva login이 기존 ChatGPT 구독 계정으로 로그인합니다.

Iva의 월간 운영 비용은 얼마입니까

ChartMonthly cost of a self-hosted Iva, published list prices, August 2026
The data behind this chart
[
  {
    "plan": "Small VPS, always on",
    "usd_per_month": 5
  },
  {
    "plan": "OpenCode Go model plan",
    "usd_per_month": 5
  },
  {
    "plan": "Ollama Cloud model plan",
    "usd_per_month": 20
  },
  {
    "plan": "Deepgram voice, starter credits",
    "usd_per_month": 0
  },
  {
    "plan": "Tavily web search, free tier",
    "usd_per_month": 0
  },
  {
    "plan": "Cheapest complete setup",
    "usd_per_month": 10
  }
]

아래 가격은 2026년 8월 기준 공개된 정가이며, 실제 측정값이 아닙니다. 소형 VPS 5 달러와 OpenCode Go 플랜 5 달러를 조합하는 것이 가장 저렴한 전체 구성이며, 월 약 10 달러가 소요됩니다. Ollama Cloud는 또 다른 정액제 옵션으로 20 달러이며, 최첨단 모델 사용료는 플랜 비용에 추가로 청구됩니다. 음성 기능은 Deepgram 스타터 크레딧이 소진될 때까지 0 달러의 비용이 발생합니다.

OpenRouter는 종량제 방식이므로 이 목록에 포함되지 않으며, 사용량에 따라 요금이 결정됩니다. 이 옵션은 주의가 필요합니다. 매 대화마다 131072 토큰의 컨텍스트 윈도우를 사용하는 어시스턴트는 정액제 플랜보다 비용이 빠르게 증가할 수 있습니다. 컨텍스트 윈도우 변수는 모델의 실제 크기에 맞춰 설정하십시오. 과도하게 설정된 값은 토큰 낭비만 초래합니다.

두 개의 서비스와 두 개의 타이머

  • iva.service는 에이전트 자체를 실행합니다.
  • iva-telegram-poll.service는 Telegram과 통신하는 롱 폴링 브리지를 실행합니다.
  • iva-memory-doctor.timer은 05:00에 실행되어 볼트에 대한 야간 유지보수 작업을 수행합니다.
  • iva-update-check.timer은 10:00에 실행되어 더 최신 릴리스가 있는지 확인합니다.
  • iva-telegram-userbot.service은 선택 사항인 Telethon 프록시를 설정한 경우에만 존재합니다.
iva status
systemctl --user status iva.service iva-telegram-poll.service
systemctl --user list-timers
iva logs poll

iva status는 두 서비스와 두 개의 감시 타이머 상태를 모두 보고합니다. systemctl --user list-timers은 각 타이머의 다음 실행 시간을 출력하며, 이를 통해 메모리 닥터가 오늘 밤 실제로 실행될지 확인할 수 있습니다. 두 서비스 모두 active (running) 상태여야 합니다. 만약 서비스가 반복적으로 재시작된다면 journalctl --user -u iva.service -n 100를 통해 원인을 파악할 수 있습니다.

디버깅 시에는 이 분리된 구조를 이해하는 것이 중요합니다. 에이전트가 중단된 상태에서도 브리지는 살아있어 폴링을 수행할 수 있으며, 이 경우 Telegram은 메시지를 수신하지만 응답을 받지 못하게 됩니다. iva logs poll은 브리지의 로그를, iva logs는 에이전트의 로그를 추적하므로, 두 로그를 통해 어느 쪽에서 문제가 발생했는지 확인할 수 있습니다.

Obsidian 볼트의 위치 및 백업 방법

ASSISTANT_VAULT_DIR는 기본적으로 설치 디렉터리 내의 vault을 사용하므로, 메모리는 ~/iva/vault에 위치합니다. 이는 코드와 분리된 독립적인 git 저장소이며, 덕분에 노트를 건드리지 않고도 Iva를 업데이트할 수 있습니다.

  • vault/CORE.md은 영구적인 사실과 상시 환경 설정을 담고 있으며, 1200자로 제한되고 모든 시스템 프롬프트에 포함됩니다.
  • vault/daily/YYYY-MM-DD.md는 당일의 기록이며, 추가만 가능한(append-only) 방식으로 관리됩니다.
  • vault/cards/은 연락처, 프로젝트, 결정 사항, 아이디어, 노트에 대한 카드 유형을 보관합니다.
  • vault/summaries/daily/, weekly/, monthly/yearly/는 롤업(rollup) 데이터를 보관합니다.
  • vault/attachments/는 날짜별 파일을 보관하며, vault/.graph/은 링크 그래프를 보관합니다.
  • vault/schema.json은 카드 유형과 소멸 규칙을 정의합니다.

롤업은 프로세스 내부에서 일정에 따라 실행됩니다. 매일 04:00에 실행되는 일일 작업은 어제의 기록을 카드와 요약본으로 변환하고 CORE.md을 다시 작성하며, 이후 주간, 월간, 연간 작업이 이를 차례로 압축합니다. 05:00에는 메모리 닥터가 모델을 사용하지 않는 결정론적 작업을 수행합니다. 이 작업은 스키마를 강제하고, 링크 그래프를 재구축하며, 인덱스를 재생성한 뒤 커밋하고 푸시합니다.

이 푸시 작업이 곧 백업이며, 많은 사용자가 간과하는 단계입니다. 볼트에 git 원격 저장소가 설정되어 있지 않으면, 닥터는 gh를 통해 비공개 GitHub 저장소 생성을 시도하며, 이를 위해서는 인증된 GitHub CLI가 필요합니다.

gh auth login
systemctl --user start iva-memory-doctor.service
cd ~/iva/vault && git log --oneline -3

오늘 날짜의 커밋이 있다는 것은 작업이 정상적으로 실행되어 볼트가 커밋되었음을 의미합니다. 로그에 gh not available 경고가 나타난다면 그 반대입니다. 즉, 볼트는 유지 관리되고 있지만 서버 밖으로 나가지 않으므로, VPS가 손상되면 메모리도 함께 사라집니다.

직접 제어할 수 있는 사본을 별도로 보관하십시오.

tar czf ~/iva-vault-backup.tgz -C ~/iva vault

scp을 사용하여 해당 파일을 서버 외부로 복사한 뒤, 서버에서 삭제하십시오. Obsidian에서 메모리를 읽으려면 Obsidian의 경로를 볼트 저장소의 복제본으로 지정하면 됩니다. 위키링크(Wikilinks)와 백링크(backlinks)는 그대로 작동하며, 그래프 뷰도 정상적으로 표시됩니다. 카드를 편집하거나 CORE.md를 수동으로 수정하는 것은 안전합니다. MOC.md.graph/는 야간 작업 시 재생성되므로 수정하지 마십시오.

볼트를 삶의 기록으로 다루기

해당 디렉터리는 귀하가 대여한 머신에서 귀하가 무엇을 말했고, 누구를 만났으며, 어떤 결정을 내렸는지에 대한 날짜별 기록입니다. 여기에는 두 가지 사실이 따릅니다.

셀프 호스팅은 저장소만 옮길 뿐 처리를 옮기는 것은 아닙니다. 모든 대화는 모델 제공업체로 전송되며, 모든 음성 메모는 Deepgram으로 전송됩니다. 볼트는 귀하의 것이지만, 요청 내용은 해당 서비스를 제공하는 기업으로부터 비공개로 유지되지 않습니다. 자체 VPS에서 Mem0 메모리 서버를 운영하는 것과 같이 메모리 계층을 직접 실행하는 경우도 마찬가지입니다. 저장소는 로컬에 있지만 모델 호출은 여전히 외부로 나갑니다. 제3자에게 노출하기에 너무 민감한 주제라면 채팅에 포함하지 마십시오.

해당 계정의 권한 범위는 볼트 전체입니다. Iva의 도구는 Docker나 샌드박스 없이 Node의 fschild_process을 통해 호스트 네이티브로 실행되므로, 탈취된 대화는 서비스 사용자가 가진 모든 권한을 갖게 됩니다. 이것이 설치 후 계정에 sudo이 포함되지 않는 이유이며, 허용 목록(allowlist)이 겉보기보다 더 많은 주의를 기울여야 하는 이유입니다. 허용 목록은 누구의 메시지가 서버에서 명령으로 실행될지를 결정하는 관문이기 때문입니다. 아무것도 개방하지 않고 주머니 속의 비서를 사용하고 싶다면, 휴대폰에서 자체 호스팅된 Hermes 에이전트에 접속하는 것과 동일한 패턴을 사용하십시오. 이 경우 채팅 클라이언트가 공개 엔드포인트가 수행할 역할을 대신하게 됩니다.

발생하는 문제와 표시되는 메시지

Build killed, exit 137. 커널의 OOM(Out of Memory) 킬러가 빌드 프로세스를 종료했습니다. 설치 프로그램은 RAM이 1.5 GB 미만이고 스왑이 없을 때만 스왑을 추가하므로, 직접 스왑을 추가한 뒤 설치 프로그램을 다시 실행하십시오.

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
free -h

Failed to connect to bus. 셸에 사용자 세션 버스가 없을 때 모든 systemctl --user 명령은 이 메시지를 출력하며, sudo -iu iva은 바로 이 상태를 유발합니다. 해당 사용자로 일반 SSH 세션을 열거나, 명령 실행 전에 XDG_RUNTIME_DIR=/run/user/$(id -u iva)을 export하십시오.

봇이 응답하지 않음. TELEGRAM_ALLOWED_USER_IDS가 비어 있고 허용 목록(allowlist)은 기본적으로 차단 상태입니다. 봇에게 메시지를 보내면 봇이 사용자의 숫자 ID를 회신합니다. 해당 ID를 .env에 입력하고 iva restart를 실행하십시오.

iva config 직후 봇이 침묵함. 마법사가 ASSISTANT_HOST을 업데이트하지 않고 IVA_PORT을 이동시킬 수 있으며, 이 경우 브리지가 응답이 없는 포트에 연결됩니다. 두 줄을 비교한 뒤 재시작하십시오.

grep -E '^(IVA_PORT|ASSISTANT_HOST)=' ~/iva/.env
iva restart

음성 메시지에 응답이 없음. Telegram Bot API는 20 MB가 넘는 파일 다운로드를 거부하므로, 브리지가 긴 오디오를 수신하지 못해 Deepgram으로 보낼 데이터가 없는 상태입니다. 파일을 전송하기 전에 분할하십시오.

ffmpeg -i long.ogg -f segment -segment_time 600 -c copy part-%02d.ogg

턴(turn)이 멈추고 응답하지 않음. 멈춘 워크플로 상태는 재시작 후에도 유지되며 스스로 다시 대기열에 추가되므로, 단순히 재시작하는 것만으로는 해결되지 않습니다. iva reset은 해당 상태를 격리하고 두 서비스를 모두 재시작합니다. 채팅에서 /new를 입력하면 새로운 대화가 시작됩니다.

Ubuntu 24.04에서 Chromium 실패. Ubuntu 24.04는 AppArmor를 통해 권한 없는 사용자 네임스페이스를 차단하므로, Chromium 자체 샌드박스가 시작되지 않아 agent-browser이 실패합니다. 설치 프로그램은 ~/.agent-browser/config.json"--no-sandbox"을 기록하여 이 문제를 우회합니다. 이 설정이 존재함을 인지하십시오. 이는 브라우저의 격리 수준을 낮추며, 해당 계정이 Iva 외에 다른 데이터를 소유해서는 안 되는 또 다른 이유입니다.

FAQ

Iva를 직접 호스팅하려면 도메인이나 열린 포트가 필요한가요?

아니요. Iva는 롱 폴링(long polling) 방식으로 Telegram과 통신합니다. iva-telegram-poll.servicegetUpdates를 호출하고 응답을 기다리는 방식이므로, 모든 연결은 서버에서 외부로 나가는 아웃바운드 연결입니다. 외부에서 서버로 들어오는 연결은 필요 없으므로 DNS 레코드나 인증서도 필요하지 않습니다. 에이전트의 HTTP 포트인 8723은 127.0.0.1에 바인딩되며, 프로젝트 문서에서는 이 포트를 외부로 노출하지 말 것을 권장합니다. SSH만 허용하고 나머지는 모두 차단하는 방화벽 설정이 올바른 구성입니다.

Iva를 매달 운영하는 데 드는 비용은 얼마인가요?

2026년 8월 공시 가격 기준으로, 소형 VPS 비용 5 달러와 가장 저렴한 정액제 요금제 5 달러를 합치면 월 10 미국 달러 정도가 소요됩니다. Ollama Cloud를 사용하면 20 달러가 들며, 최신 모델(frontier models) 사용료가 추가로 청구됩니다. Deepgram 스타터 크레딧으로 초기 음성 인식 비용을 충당할 수 있으며, 웹 검색 티어는 무료 사용량을 제공합니다. OpenRouter는 종량제이므로 고정된 월 비용이 없습니다.

Iva는 데이터를 어디에 보관하며, 어떻게 백업하나요?

기본적으로 ASSISTANT_VAULT_DIR에 설정된 ~/iva/vault에 보관됩니다. 이는 일반 마크다운 파일로 구성된 별도의 비공개 git 저장소이며, CORE.md, daily/YYYY-MM-DD.md, cards/, summaries/ 파일이 포함됩니다. 05:00에 실행되는 메모리 닥터(memory doctor)가 변경 사항을 커밋하고 푸시하지만, 이는 저장소에 원격(remote) 설정이 되어 있을 때만 유효합니다. 따라서 gh auth login를 실행하거나 설정 과정에서 직접 원격 저장소를 추가하십시오. 또한 tar czf ~/iva-vault-backup.tgz -C ~/iva vault을 사용하여 오프라인 복사본을 유지하고 해당 파일을 서버 외부로 옮겨두는 것이 좋습니다.

Iva를 직접 호스팅하면 데이터는 비공개로 유지되나요?

저장소는 사용자의 소유이지만, 처리 과정은 그렇지 않습니다. 볼트(vault)는 사용자가 푸시하기 전까지는 디스크에 남아 있으며, .env는 서비스 사용자가 소유한 0600 모드로 설정됩니다. 모델 호출과 음성 변환은 클라우드 API를 사용하므로, 해당 메시지는 모델 제공업체와 Deepgram을 거쳐 전송됩니다. Iva는 MIT 라이선스를 따르므로 전송되는 내용을 정확히 확인하고 수정할 수 있습니다. Telegram 허용 목록은 기본적으로 차단(fail closed) 정책을 따르므로, TELEGRAM_ALLOWED_USER_IDS가 비어 있으면 사용자를 포함한 누구의 접근도 허용하지 않습니다.

Iva는 어떤 모델 제공업체를 지원하나요?

MODEL_PROVIDERopencode(OpenCode Go), ollama(Ollama Cloud), openroutercodex을 지원합니다. OpenRouter는 anthropic/claude-sonnet-4.5과 같은 벤더 슬러그를 사용하며 가장 폭넓은 모델 선택지를 제공합니다. codexiva login을 통해 기존 ChatGPT 구독 계정으로 로그인하며 API 키를 사용하지 않습니다. 제공업체를 설정하고 모델의 실제 크기에 맞춰 컨텍스트 윈도우를 설정한 뒤 iva restart를 실행하십시오. 모델 정보는 프로세스 시작 시 한 번만 읽어오기 때문입니다.