Critto 通常會在你的 Critto 帳號中執行。如果你想把所有內容留在自己擁有的電腦上,可以自行執行 Critto 伺服器:你的 critto、它們的記憶和你的聊天都會留在那台電腦上,Critto 桌面版和手機 App 會連線到該伺服器。
本指南適用於 Linux。你需要:
- 一台會持續開機的 64 位元 Linux 電腦(Intel/AMD 或 ARM,例如 Raspberry Pi 4/5):家用伺服器、迷你電腦或小型雲端伺服器;
- 約 1 GB 可用記憶體和幾 GB 磁碟空間;
- 管理員權限(
sudo)。
NixOS 可使用 NixOS 模組的 flake。Debian、Ubuntu、Fedora、RHEL 系統和 openSUSE 有正式套件並支援自動更新。其他系統則可使用容器映像或靜態版本。
NixOS
將 Critto flake 加入你的系統 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 配對你的 App(見步驟 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)。服務啟動時會讀取,絕不會複製到 store。 - 設定:
listen(預設127.0.0.1:8787)、publicUrl、webHost、openFirewall(預設關閉)、dataDir(預設/var/lib/critto),以及其他任何CRITTO_*變數的settings。den.backend可選擇小窩的執行位置(boat、local或none;見選用:小窩)。 - AI App:
aiPackages優先使用 nixpkgs 套件(例如pkgs.codex、需要allowUnfree的pkgs.claude-code)。nixpkgs 沒有的套件,請設定programs.nix-ld.enable = true;並執行sudo crittod setup ai(見步驟 3)。Pi 只需要將pkgs.nodejs_22加到aiPackages,然後執行sudo crittod setup ai pi。 - **遠端存取:**設定
services.tailscale.enable = true;,再執行sudo tailscale serve --bg 8787;或透過services.cloudflared設定將流量導向http://127.0.0.1:8787的 ingress 規則(見步驟 5)。 - systemd 會隔離此服務,但仍保留使用者命名空間(bubblewrap 和本機小窩需要),因此不要設定
security.allowUserNamespaces = false。
本指南其餘內容也適用於 NixOS;差別是更新要執行 nix flake update,而不是 apt 或 dnf。
1. 安裝
在伺服器上開啟終端機並執行:
curl -fsSL https://downloads.critto.app/install-server.sh | sh
這會加入 Critto 套件儲存庫、安裝 critto-server 套件、啟動伺服器並顯示配對碼。就這麼簡單:接著前往配對你的 App。
想比其他人更早取得新版本嗎?使用測試版通道:
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 volume,保險庫主金鑰放在獨立的 critto-keys volume,避免其中一份副本單獨解開另一份資料(見「備份」);AI App 放在 critto-ai。也可以將 Docker secret 掛載到 /etc/critto/vault.key。更新時執行 docker pull ghcr.io/nexferra-ltd/critto-server:latest,再使用相同的 volume 重新建立容器。
或使用靜態版本
每個版本也提供可在任何 Linux 上執行的單一檔案版本:https://downloads.critto.app/releases/<version>/critto-server-<version>-linux-x86_64.tar.gz(或 -aarch64)。解壓縮後執行 ./crittod serve。你必須自行讓它持續執行並保持更新,因此套件會比較方便。
2. 配對你的 App
伺服器只允許已配對的裝置連線。配對方式如下:
在伺服器上取得代碼(有效 10 分鐘,且只能使用一次):
sudo crittod pair在 Critto App 的登入畫面選擇 使用我自己的 Critto 伺服器。輸入伺服器位址和代碼。
- 如果就在伺服器上使用:
http://127.0.0.1:8787 - 其他裝置需要能連到的位址;請見從其他裝置連線。
- 如果就在伺服器上使用:
一台裝置配對後,就可以用它配對更多裝置:選擇「設定 → 裝置 → 配對手機」即可顯示 QR Code。QR Code 會帶入伺服器的監聽位址;如果裝置透過其他方式連線(通道、Proxy、網域),請將 CRITTO_PUBLIC_URL 設為該位址(見設定)。
**在同一台電腦上使用桌面 App?**桌面 App 通常會自行啟動一個私有的 Critto 伺服器。如果你已在這裡安裝伺服器,請改選 使用我自己的 Critto 伺服器,並輸入
http://127.0.0.1:8787,這樣兩邊就會使用相同的 critto。
3. 連結你的 AI
critto 會用你選擇的 AI 思考。你可以透過兩種方式連結 AI。
你的 AI 訂閱(ChatGPT、Claude、Grok…)
Critto 透過官方命令列 App 連線。你只需要在伺服器上安裝一次:
sudo crittod setup ai
選擇你使用的服務,也可以直接輸入名稱:
sudo crittod setup ai codex claude。
| App | 搭配使用 |
|---|---|
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 也曾因此停用帳號。 |
這些 App 會安裝在 /opt/critto-ai,不會自行更新。請不時執行 sudo crittod setup ai --update 進行更新。
接著在 Critto App 中開啟「連結」,並登入各項服務。登入資訊會儲存在伺服器上,而不是 App 裡。
自訂 AI:本機模型和 API 金鑰
開啟「設定 → 進階模式」,再選擇「設定 → 自訂 AI → 新增連結」。任何支援「OpenAI 相容」API 的服務都能使用。從「從範本開始」選擇預設項目,或自行填入位址:
| 服務 | 基礎網址 | 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 金鑰 |
選擇「測試連線」,挑選模型並儲存。之後就能為任何 critto 選用這個 AI。
若要讓另一台電腦上的 Ollama 接受網路連線,請以 OLLAMA_HOST=0.0.0.0 啟動。「localhost」永遠表示 Critto 伺服器所在的電腦。
4. 小窩(選用)
小窩是 critto 在雲端的專屬電腦,可用來處理較大的工作(建立內容、瀏覽網頁、使用 App)。自行架設的伺服器會透過你自己的 Boat 帳號執行小窩。請在 App 的「連結」中貼上 Boat API 金鑰,或將金鑰放進設定檔 BOAT_API_KEY 並重新啟動。
請注意:
- 小窩要運作,伺服器不必能從網際網路連入。伺服器會連到小窩,而不是反過來。
- 小窩工作需要可連上公開網際網路的 AI(你的訂閱或 OpenRouter 等服務)。在自家網路執行的 AI(Ollama、LM Studio)可以聊天,但雲端小窩無法連到它。
- 小窩時數會由 Boat 向你的帳號收費。
在自己的電腦上執行自己的小窩
沒有 Boat 帳號嗎?伺服器也可以在這台電腦上,為每個人以小型虛擬機器執行小窩(需要 /dev/kvm、每個執行中的小窩約 4 GB 記憶體,並且需要建置一次映像檔)。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 的位址。在 App 中使用該位址。只有你自己的裝置能連線。
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。每台裝置仍需配對碼。
使用你已經在執行的反向 Proxy
將它指向 http://127.0.0.1:8787,並允許 WebSocket。使用可自行處理 HTTPS 的 Caddy 時:
critto.example.com {
reverse_proxy 127.0.0.1:8787
}
只在家用網路使用
如果所有裝置都在家裡,可以讓伺服器直接監聽你的網路。設定 CRITTO_LISTEN=0.0.0.0:8787(見設定),並在 App 中使用 http://<server's IP address>:8787。這是未加密的 http,只能在你信任的網路上使用。
無論選擇哪種方式,都請將 CRITTO_PUBLIC_URL 設為該位址,讓配對 QR Code 指向正確位置。
6. 更新
伺服器會和系統其他部分一起更新:
- Debian / Ubuntu:
sudo apt update && sudo apt upgrade - Fedora / RHEL:
sudo dnf upgrade - openSUSE:
sudo zypper update
更新後服務會自行重新啟動。桌面和手機 App 需要另外更新。
7. 備份
所有內容都在 /var/lib/critto:你的 critto、記憶、聊天、檔案和 AI 登入資訊。設定在 /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…)。在 App 開啟進階模式,接著選擇「設定 → 備份 → 變更目標…」。加入備份金鑰,讓備份離開伺服器前先加密:
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 volume,NixOS 使用 services.critto.vaultKeyFile,預設為 /var/lib/critto-keys/vault.key,一律放在資料目錄之外)。主金鑰不會放進備份。它解鎖的各帳號金鑰清單(/var/lib/critto/vault/keys.db)會另行加密備份到 vault/,和其他備份放在一起,保留 30 天;但你必須提供復原金鑰:
sudo crittod vault recovery-keygen
將 CRITTO_VAULT_BACKUP_RECIPIENT=… 加到 /etc/critto/critto.env 並重新啟動。請將顯示的復原身分和 /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 不會自行定時關心你(已排程事項會等待)。若沒有 Critto Smarts,定時關心會使用 critto 自己的 AI 思考。 |
CRITTO_JOB_WORKERS |
同時執行的背景工作數量(定時關心、排程事項)。預設為 4。 |
常用指令:
| 指令 | |
|---|---|
sudo crittod pair |
為新裝置產生配對碼 |
sudo crittod setup ai |
安裝或更新 AI App |
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。
疑難排解
- **App 顯示無法連上伺服器。**在伺服器上檢查
systemctl status critto,並確認 App 使用的位址能從該裝置連線(在手機上,127.0.0.1代表手機本身)。 - **「配對碼無法使用。」**代碼有效 10 分鐘,而且只能使用一次。執行
sudo crittod pair產生新代碼。請加上sudo執行;否則你會取得另一台個人伺服器的代碼。 - **「連結」中沒有顯示 AI App。**再次執行
sudo crittod setup ai <name>;完成後會重新啟動伺服器。 - **其他問題。**通常
journalctl -u critto -n 100會指出問題所在。