Critto는 보통 내 Critto 계정에 있어요. 모든 정보를 내가 소유한 컴퓨터에 보관하고 싶다면 Critto 서버를 직접 운영할 수 있어요. 크리토와 기억, 대화가 그 컴퓨터에 보관되고 Critto 데스크톱 및 휴대폰 앱이 서버에 연결돼요.
이 안내는 Linux용이에요. 필요한 항목:
- 계속 켜 둘 64비트 Linux 컴퓨터(Intel/AMD 또는 ARM, 예: Raspberry Pi 4/5). 홈 서버, 미니 PC 또는 소형 클라우드 서버를 쓸 수 있어요.
- 여유 메모리 약 1GB와 디스크 공간 몇 GB
- 관리자 권한(
sudo)
NixOS에는 NixOS 모듈이 포함된 flake가 제공돼요. Debian, Ubuntu, Fedora, RHEL 계열 시스템과 openSUSE에는 자동 업데이트가 가능한 패키지를 제공해요. 그 외에는 컨테이너 이미지나 정적 빌드를 사용할 수 있어요.
NixOS
시스템 flake에 Critto flake를 추가하세요.
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
critto.url = "https://downloads.critto.app/nix/critto.tar.gz";
critto.inputs.nixpkgs.follows = "nixpkgs";
};
outputs = { nixpkgs, critto, ... }: {
nixosConfigurations.myserver = nixpkgs.lib.nixosSystem {
system = "x86_64-linux"; # or aarch64-linux
modules = [
./configuration.nix
critto.nixosModules.default
({ pkgs, ... }: {
services.critto = {
enable = true;
# Secrets (Boat key, backup key) stay out of the Nix store:
environmentFile = "/etc/critto/secrets.env";
# AI apps for your subscriptions (you sign in from the app):
aiPackages = [ pkgs.codex pkgs.nodejs_22 ];
# publicUrl = "https://critto.example.com";
};
})
];
};
};
}
그런 다음 sudo nixos-rebuild switch --flake .#myserver를 실행하고 sudo crittod pair로 앱을 페어링하세요(2단계).
- 업데이트:
nix flake update critto를 실행한 다음 다시 빌드하세요. 패키지는 서명된 사전 빌드 릴리스예요(정적 바이너리라 glibc 문제가 없어요). 베타 채널을 사용하려면services.critto.package = critto.packages.${system}.crittod-beta;를 설정하세요. - 비밀 정보:
BOAT_API_KEY=…와CRITTO_BACKUP_KEY=…를environmentFile에 넣으세요(root 소유, 권한 600. agenix와 sops-nix도 쓸 수 있어요). 서비스 시작 시 읽으며 Nix 저장소에 복사되지 않아요. - 설정:
listen(기본값127.0.0.1:8787),publicUrl,webHost,openFirewall(기본값 끔),dataDir(기본값/var/lib/critto), 다른CRITTO_*변수용settings가 있어요.den.backend에서 아지트 실행 위치를 선택해요(boat,local,none; 아지트 참조). - AI 앱:
aiPackages에서 nixpkgs 패키지를 우선 사용하세요(예:pkgs.codex,allowUnfree가 필요한pkgs.claude-code). nixpkgs에 없는 앱은programs.nix-ld.enable = true;를 설정한 뒤sudo crittod setup ai를 실행하세요(3단계). Pi는aiPackages에pkgs.nodejs_22만 있으면 돼요. 그런 다음sudo crittod setup ai pi를 실행하세요. - 원격 접속:
services.tailscale.enable = true;를 설정한 뒤sudo tailscale serve --bg 8787을 실행하세요. 또는http://127.0.0.1:8787을 가리키는 ingress 규칙과 함께services.cloudflared를 사용하세요(5단계 참조). - systemd가 서비스를 격리하지만 사용자 네임스페이스는 사용할 수 있게 둬요(bubblewrap과 로컬 아지트에 필요). 따라서
security.allowUserNamespaces = false로 설정하지 마세요.
업데이트에 apt나 dnf 대신 nix flake update를 사용한다는 점을 제외하면 이 안내의 나머지 내용은 NixOS에도 적용돼요.
1. 설치
서버에서 터미널을 열고 다음을 실행하세요.
curl -fsSL https://downloads.critto.app/install-server.sh | sh
Critto 패키지 저장소를 추가하고 critto-server 패키지를 설치한 다음 서버를 시작하고 페어링 코드를 표시해요. 설치가 끝났어요. 앱 페어링으로 건너뛰세요.
다른 사람보다 먼저 새 버전을 써 보고 싶나요? 베타 채널을 사용하세요.
curl -fsSL https://downloads.critto.app/install-server.sh | CRITTO_CHANNEL=beta sh
먼저 설치 프로그램 확인하기(선택 사항)
스크립트는 Critto 릴리스 키로 서명돼요. 실행 전에 확인하려면 다음을 실행하세요.
curl -fsSLO https://downloads.critto.app/install-server.sh
curl -fsSLO https://downloads.critto.app/install-server.sh.minisig
minisign -Vm install-server.sh -P RWTRac/2j5M3cvVpvtz0flaOy7sH5PFSc4LwbB7PxG0OMO2h8APoZtLG
sh install-server.sh
(minisign은 대부분 배포판의 패키지에 포함돼요.) install-server.sh.sha256에서 일반 체크섬도 확인할 수 있어요. 패키지에도 서명이 있으며 패키지 관리자가 설치와 업데이트 때마다 확인해요.
저장소 직접 설정하기
Debian / Ubuntu:
sudo install -d -m 755 /etc/apt/keyrings
sudo curl -fsSLo /etc/apt/keyrings/critto.gpg https://downloads.critto.app/keys/critto-archive-keyring.gpg
cat <<EOF | sudo tee /etc/apt/sources.list.d/critto.sources
Types: deb
URIs: https://downloads.critto.app/apt
Suites: stable
Components: main
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/critto.gpg
EOF
sudo apt update && sudo apt install critto-server
Fedora / RHEL / Rocky / Alma:
sudo rpm --import https://downloads.critto.app/keys/critto-archive-keyring.asc
cat <<EOF | sudo tee /etc/yum.repos.d/critto.repo
[critto]
name=Critto
baseurl=https://downloads.critto.app/rpm/stable
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://downloads.critto.app/keys/critto-archive-keyring.asc
EOF
sudo dnf install critto-server
키 지문은 C78E FB7F 67CC 8184 1F70 EE3D D121 DC94 C534 50E3예요(“Critto Packages packages@critto.app”).
Docker / Podman 사용하기
docker run -d --name critto --restart unless-stopped \
-p 127.0.0.1:8787:8787 \
-v critto-data:/var/lib/critto -v critto-keys:/etc/critto -v critto-ai:/opt/critto-ai \
ghcr.io/nexferra-ltd/critto-server:latest
docker exec critto crittod pair
컨테이너에는 특별한 권한이 필요하지 않아요. 데이터는 critto-data 볼륨에, 금고의 마스터 키는 critto-keys에 저장돼요(데이터와 분리되어 있어 둘 중 하나만으로는 다른 쪽을 열 수 없어요. 백업을 참조하세요). AI 앱은 critto-ai에 저장돼요. /etc/critto/vault.key에 연결한 Docker secret을 사용해도 돼요. docker pull ghcr.io/nexferra-ltd/critto-server:latest로 업데이트한 다음 같은 볼륨을 사용해 컨테이너를 다시 만드세요.
정적 빌드 사용하기
모든 릴리스에는 모든 Linux에서 실행되는 단일 파일 빌드도 있어요.
https://downloads.critto.app/releases/<version>/critto-server-<version>-linux-x86_64.tar.gz
(또는 -aarch64) 파일의 압축을 풀고 ./crittod serve를 실행하세요. 직접 계속 실행 상태를 유지하고 업데이트해야 하므로 패키지를 사용하는 편이 더 쉬워요.
2. 앱 페어링
서버는 페어링한 기기만 허용해요. 기기를 페어링하려면:
서버에서 코드를 받으세요(10분 동안 유효하며 한 번만 사용할 수 있어요).
sudo crittod pairCritto 앱 로그인 화면에서 내 Critto 서버 사용을 선택하세요. 서버 주소와 코드를 입력하세요.
- 서버 자체에서는
http://127.0.0.1:8787 - 다른 기기에서는 접속 가능한 주소가 필요해요. 다른 기기에서 접속하기를 참조하세요.
- 서버 자체에서는
한 기기를 페어링하면 그 기기에서 다른 기기도 페어링할 수 있어요. 설정 → 기기 → 휴대폰 페어링을 누르면 QR 코드가 표시돼요. QR 코드에는 서버가 수신 대기하는 주소가 담겨 있어요. 터널, 프록시, 도메인 등 다른 방법으로 기기가 접속한다면 해당 주소를 CRITTO_PUBLIC_URL에 설정하세요(설정 참조).
같은 컴퓨터에서 데스크톱 앱을 사용하나요? 데스크톱 앱은 보통 자체 Critto 서버를 비공개로 시작해요. 여기에 서버를 설치했다면
http://127.0.0.1:8787로 내 Critto 서버 사용을 선택하세요. 두 앱이 같은 크리토를 사용하게 돼요.
3. AI 연결
크리토는 내가 고른 AI를 사용해요. AI를 연결하는 방법은 두 가지예요.
AI 구독(ChatGPT, Claude, Grok…)
Critto는 공식 명령줄 앱을 통해 AI에 연결해요. 서버에 한 번 설치하면 돼요.
sudo crittod setup ai
사용하는 앱을 고르거나 이름을 직접 지정하세요.
sudo crittod setup ai codex claude.
| 앱 | 함께 사용할 플랜 |
|---|---|
codex |
ChatGPT 플랜(Plus, Pro, Business…) |
claude |
Claude 플랜(Pro, Max…) |
grok |
SuperGrok / X Premium |
muse |
Meta AI(Node.js 20+ 필요, 설치 프로그램이 가능하면 추가해요) |
antigravity |
Google Antigravity. 먼저 표시되는 경고를 읽으세요. Google 약관은 다른 소프트웨어가 Antigravity 로그인 정보를 사용하는 것을 허용하지 않으며, Google은 이로 인해 계정을 정지한 적이 있어요. |
앱은 /opt/critto-ai에 설치되며 자동으로 업데이트되지 않아요. 가끔 sudo crittod setup ai --update를 실행해 업데이트하세요.
그런 다음 Critto 앱에서 연결을 열고 각 AI에 로그인하세요. 로그인 정보는 앱이 아니라 서버에 저장돼요.
커스텀 AI: 로컬 모델과 API 키
설정 → 고급 모드를 켠 다음 설정 → 커스텀 AI → 연결 추가로 이동하세요. “OpenAI 호환” API를 지원하는 서비스는 무엇이든 사용할 수 있어요. 시작 항목에서 프리셋을 고르거나 주소를 직접 입력하세요.
| 서비스 | 기본 URL | API 키 |
|---|---|---|
| 서버의 Ollama | http://localhost:11434/v1 |
없음 |
| 서버의 LM Studio | http://localhost:1234/v1 |
없음 |
| 집의 다른 컴퓨터에서 실행하는 Ollama | http://192.168.1.20:11434/v1 |
없음 |
| OpenRouter | https://openrouter.ai/api/v1 |
내 OpenRouter 키 |
연결 테스트를 누르고 모델을 선택해 저장하세요. 이제 모든 크리토에서 해당 AI를 선택할 수 있어요.
다른 컴퓨터에서 Ollama를 실행한다면 네트워크 연결을 허용하도록 OLLAMA_HOST=0.0.0.0으로 시작하세요. “localhost”는 항상 Critto 서버가 실행되는 컴퓨터를 뜻해요.
4. 아지트(선택 사항)
아지트는 크리토가 더 큰 작업(만들기, 웹 탐색, 앱 사용)을 하는 클라우드 컴퓨터예요. 직접 호스팅 서버는 내 Boat 계정에 아지트를 실행해요. 앱의 연결에 Boat API 키를 붙여 넣거나 설정 파일에 BOAT_API_KEY를 입력하고 서버를 다시 시작하세요.
알아 두면 좋아요.
- 아지트가 작동하는 데 서버가 인터넷에서 접속 가능할 필요는 없어요. 서버가 아지트에 연결하며, 반대 방향은 아니에요.
- 아지트 작업에는 인터넷에서 접속할 수 있는 AI 주소가 필요해요(구독 서비스 또는 OpenRouter 같은 서비스). 내 네트워크에서 실행하는 AI(Ollama, LM Studio)는 대화할 수 있지만 클라우드의 아지트에서 접속할 수 없어요.
- 아지트 사용 시간은 내 Boat 계정으로 청구돼요.
내 컴퓨터에서 직접 실행하는 아지트
Boat 계정이 없나요? 서버에서 사용자별 아지트를 이 컴퓨터의 작은 가상 머신으로 실행할 수도 있어요(실행 중인 아지트마다 /dev/kvm, 약 4GB 메모리, 최초 1회 이미지 빌드가 필요해요). NixOS에서는:
services.critto.den.backend = "local";
그 외 시스템에서는 /etc/critto/critto.env에 CRITTO_DEN_BACKEND=local을 설정하세요. 요구 사항, 크기, 아지트가 접속할 수 있는 대상, 이미지 빌드 방법은 전체 안내인 내 컴퓨터에서 직접 실행하는 아지트에 있어요.
5. 다른 기기에서 접속하기
기본 설정에서는 서버가 자기 컴퓨터(127.0.0.1:8787)에서만 연결을 기다려요. 안전한 기본 설정이에요. 어디서든 휴대폰이나 노트북을 사용하려면 다음 방법 중 하나를 고르세요. 처음 두 방법은 공유기 포트를 열지 않고 보안 https:// 주소를 제공해요.
Tailscale(개인용으로 가장 간편)
서버와 기기에 Tailscale을 설치하고 같은 계정으로 로그인한 다음 서버에서 실행하세요.
sudo tailscale serve --bg 8787
https://myserver.tail1234.ts.net 같은 주소가 표시돼요. 앱에 이 주소를 입력하세요. 내 기기만 접속할 수 있어요.
Cloudflare Tunnel(내 도메인의 공개 주소)
Cloudflare에 도메인이 있다면 cloudflared를 설치한 다음 실행하세요.
cloudflared tunnel login
cloudflared tunnel create critto
cloudflared tunnel route dns critto critto.example.com
cat > ~/.cloudflared/config.yml <<EOF
tunnel: critto
credentials-file: $HOME/.cloudflared/$(cloudflared tunnel list | awk '/critto/{print $1}').json
ingress:
- hostname: critto.example.com
service: http://127.0.0.1:8787
- service: http_status:404
EOF
sudo cloudflared service install
이제 서버는 https://critto.example.com에서 접속할 수 있어요. 기기마다 페어링 코드는 여전히 필요해요.
이미 운영 중인 리버스 프록시
WebSocket을 허용하고 http://127.0.0.1:8787을 가리키도록 설정하세요. HTTPS를 자체 처리하는 Caddy를 사용하는 경우:
critto.example.com {
reverse_proxy 127.0.0.1:8787
}
홈 네트워크에서만 접속
모든 기기가 집에 있다면 서버가 네트워크에서 직접 연결을 기다리도록 설정할 수 있어요. CRITTO_LISTEN=0.0.0.0:8787을 설정하고(설정 참조) 앱에서 http://<server's IP address>:8787을 사용하세요. 일반 http 연결이므로 신뢰할 수 있는 네트워크에서만 사용하세요.
어떤 방법을 고르든 페어링 QR 코드에 해당 주소가 들어가도록 CRITTO_PUBLIC_URL을 그 주소로 설정하세요.
6. 업데이트
서버는 시스템의 나머지 부분과 함께 업데이트돼요.
- Debian / Ubuntu:
sudo apt update && sudo apt upgrade - Fedora / RHEL:
sudo dnf upgrade - openSUSE:
sudo zypper update
업데이트 후 서비스는 자동으로 다시 시작돼요. 데스크톱 및 휴대폰 앱은 별도로 업데이트돼요.
7. 백업
크리토, 기억, 대화, 파일, AI 로그인 정보는 모두 /var/lib/critto에 있어요. 설정은 /etc/critto/critto.env에 있어요.
직접 복사하기. 일관된 사본을 만들려면 서버를 중지하세요.
sudo systemctl stop critto
sudo tar czf critto-backup-$(date +%F).tar.gz --exclude=/etc/critto/vault.key /var/lib/critto /etc/critto
sudo systemctl start critto
서버가 실행 중일 때 데이터베이스의 최신 사본을 /var/lib/critto/backups/latest.db에 보관해요.
외부 저장소 백업(S3, Cloudflare R2, Backblaze B2…). 앱에서 고급 모드를 켠 다음 **설정 → 백업 → 대상 변경…**을 선택하세요. 백업 키를 추가해 서버 밖으로 보내기 전에 암호화하세요.
sudo crittod backup keygen
CRITTO_BACKUP_KEY=… 줄을 /etc/critto/critto.env에 복사하고, 안전한 오프라인 장소에도 따로 보관한 다음(키가 없으면 백업을 복원할 수 없어요) 서버를 다시 시작하세요: sudo systemctl restart critto.
외부 백업은 계속 진행돼요.
- 데이터베이스 변경 사항은 10초마다 업로드돼요.
- 사용자 파일은 10분마다 업로드돼요.
- 전체 사본은 매일 업로드돼요.
지난 7일 중 어느 시점이든 저장소에서 바로 복원할 수 있어요.
sudo systemctl stop critto
sudo -u critto crittod backup list
sudo -u critto crittod backup pitr --to /var/lib/critto/restore --at "2026-10-02 14:30"
sudo -u critto mv /var/lib/critto/restore/critto.db /var/lib/critto/critto.db
sudo systemctl start critto
(--at은 UTC예요. 최신 상태로 복원하려면 생략하세요. 복원된 users/ 폴더도 같은 위치에 있어요.)
다운로드한 백업 파일 하나(일일 스냅샷)만 복원하려면 critto 사용자가 읽을 수 있는 위치(예: /var/lib/critto)에 둔 다음:
sudo systemctl stop critto
sudo crittod backup restore --from /path/to/downloaded-backup --to /var/lib/critto/restored.db
sudo -u critto mv /var/lib/critto/restored.db /var/lib/critto/critto.db
sudo systemctl start critto
금고 키. 저장한 키와 비밀번호는 /etc/critto/vault.key의 마스터 키로 암호화돼요(설치 시 생성되며 critto 사용자만 읽을 수 있어요. Docker에서는 critto-keys 볼륨, NixOS에서는 기본값 /var/lib/critto-keys/vault.key인 services.critto.vaultKeyFile을 사용해요. 항상 데이터와 분리해 보관하세요). 이 키는 백업에 포함되지 않아요. 키로 잠금 해제하는 계정별 키 목록(/var/lib/critto/vault/keys.db)은 vault/ 아래에 별도로 암호화해 백업하며 30일 동안 보관해요. 복구 키를 설정한 경우에만 이 백업이 만들어져요.
sudo crittod vault recovery-keygen
출력된 CRITTO_VAULT_BACKUP_RECIPIENT=… 줄을 /etc/critto/critto.env에 넣고 서버를 다시 시작하세요. 출력된 복구 ID와 /etc/critto/vault.key 사본을 모두 비밀번호 관리자 등 오프라인 장소에 보관하세요. 서버에는 두지 마세요. 서버를 잃어버린 뒤 복원하려면 vault.key를 되돌려 놓고 vault/latest.db.age를 다운로드한 다음:
sudo -u critto crittod vault restore --identity /path/to/recovery.txt /path/to/latest.db.age
설정
서버는 /etc/critto/critto.env를 읽어요. 모든 옵션에 설명이 있어요. sudo nano /etc/critto/critto.env로 편집한 다음 sudo systemctl restart critto를 실행하세요. 자주 쓰는 설정:
| 설정 | 기능 |
|---|---|
CRITTO_LISTEN |
서버가 연결을 기다릴 주소. 기본값 127.0.0.1:8787(이 컴퓨터에서만 접속) |
CRITTO_PUBLIC_URL |
기기에서 사용할 주소(예: https://critto.example.com) |
BOAT_API_KEY |
아지트에 사용할 Boat 키 |
CRITTO_BACKUP_KEY |
외부 백업 암호화 |
CRITTO_ANTIGRAVITY=0 |
Antigravity 숨기기 |
CRITTO_PROACTIVE=0 |
크리토가 먼저 안부를 묻지 않아요(예약한 작업은 대기해요). Critto Smarts를 쓰지 않으면 안부 확인은 각 크리토의 AI를 사용해요. |
CRITTO_JOB_WORKERS |
동시에 실행할 백그라운드 작업(안부 확인, 예약 작업)의 수. 기본값은 4예요. |
유용한 명령:
| 명령 | |
|---|---|
sudo crittod pair |
새 기기의 페어링 코드 발급 |
sudo crittod setup ai |
AI 앱 설치 또는 업데이트 |
sudo crittod users |
이 서버의 계정 목록 |
systemctl status critto |
실행 상태 확인 |
journalctl -u critto -f |
로그 확인 |
curl http://127.0.0.1:8787/health |
간단한 상태 확인 |
아지트가 처음 데스크톱 소프트웨어를 필요로 할 때까지 /health에는 "desktop": "on-demand"가 표시돼요. 정상이니 걱정하지 마세요. 그때 서버가 소프트웨어를 다운로드해요.
제거
- Debian / Ubuntu:
sudo apt purge critto-server - Fedora / RHEL:
sudo dnf remove critto-server - Docker:
docker rm -f critto(데이터도 삭제하려면docker volume rm critto-data critto-keys critto-ai추가)
서버가 중지되고 패키지가 제거돼요. 다른 Critto 패키지가 남아 있지 않으면 저장소도 제거돼요. 나중에 다시 사용할 수 있도록 /var/lib/critto의 데이터는 보관돼요. 모두 삭제하려면:
sudo rm -rf /var/lib/critto /etc/critto /opt/critto-ai
sudo userdel critto
설치할 때 패키지가 저장소를 추가하지 않게 하려면 설치 전에 echo CRITTO_REPO=no | sudo tee /etc/default/critto를 실행하세요.
문제 해결
- 앱에서 서버에 접속할 수 없다고 해요. 서버에서
systemctl status critto를 확인하고, 앱에 입력한 주소에 기기가 접속할 수 있는지 확인하세요(휴대폰에서127.0.0.1은 휴대폰 자신을 가리켜요). - “페어링 코드가 작동하지 않아요.” 코드는 10분 동안 유효하며 한 번만 사용할 수 있어요.
sudo crittod pair로 새 코드를 만드세요.sudo로 실행해야 해요. 그렇지 않으면 다른 개인 서버용 코드가 발급돼요. - 연결에 AI 앱이 표시되지 않아요.
sudo crittod setup ai <name>을 다시 실행하세요. 완료되면 서버가 다시 시작돼요. - 다른 문제예요.
journalctl -u critto -n 100에서 대개 원인을 확인할 수 있어요.