Uygulama
Neyi çalıştırmalıyım?
Yalnızca tarayıcı kurulumundan kendi sunucunda barındırılan bir eve kadar nelerin çalıştırılacağı
Bu sayfa, İngilizce belgeden makine çevirisiyle çevrildi.
Dört basamak. Her biri yeni bir yetenek ekler ve çalıştırman gereken yeni bir şey getirir. En alttan başla ve ihtiyacın olanı elde eder etmez dur: çoğu kişi basamak 0 veya 1'de durur.
| Basamak | Elde ettiğin | Çalıştırdığın | Compose dosyası |
|---|---|---|---|
| 0 | Tabak takibi + yapay zeka taramaları | Hiçbir şey | yok |
| 1 | Aynısı, kendi makinende | Durumsuz tek bir konteyner | docker/compose.yml |
| 2 | İki cihazda günlüğün ve yönetilen bir kurulumda bir hane ya da kuruluş için paylaşılan yapay zeka faturası | + bir veritabanı ve bir gizli anahtar | docker/topologies/compose.core.yml |
| 3 | Kendi donanımında taramalar | + bir model çalışma zamanı | docker/topologies/compose.inference.yml |
| 4 | Hepsi | Hepsi | docker/topologies/compose.full.yml |
Her compose dosyası satır satır açıklanmıştır; compose tarafındaki aynı harita için bkz. docker/topologies/README.md.
Her basamakta uygulama sunucusu, kullanan kişiler için LowCarbCheck gıda veri tabanından gıda adlarını da arar. Yalnızca adları gönderir, hiçbir zaman bir fotoğraf veya günlük kaydı göndermez. 1. basamaktan itibaren bunu senin sunucun yapar; birden fazla kişi tarama yapıyorsa sunucuya ücretsiz bir anahtar ver. Bkz. architecture.md.
Aşağıdaki her komut Podman altında podman compose olarak da çalışır. Ubuntu üzerinde bu alt komut, yanında podman-compose paketinin kurulu olmasını gerektirir. Bkz. podman.md.
Basamak 0: hiçbir şey çalıştırma
https://openplate.lowcarbcheck.org gibi mevcut bir örneği aç ve kendi sağlayıcı anahtarını Ayarlar → Yapay Zeka içine yapıştır. Kayıt olma işlemi yoktur. Günlüğün o tarayıcının depolama alanında tutulur ve örneğin sunucusuna asla ulaşmaz; bu nedenle "başkasının örneğini kullanmak", bu ifadenin ima ettiğinden çok daha azını o işletmene verir; bkz. architecture.md. Taradığın veya aradığın gıdaların adları, gıda veri tabanına giderken bu sunucudan geçer.
Bu basamakta senin çalıştıracağın hiçbir şey yoktur. Günlüğü tarayıcı tutar, tarayıcı sağlayıcıyı içine yapıştırdığın anahtarla çağırır ve işleticinin sunucusu yalnızca sayfayı gönderir.
Diyagram kaynağı
flowchart LR
host["Someone else's instance"] -->|"HTML and JS"| browser["Your browser"]
browser --- diary["Diary in this browser"]
browser -->|"photo and your key"| cloud["Cloud AI provider"]Kendi yapay zeka kullanımının maliyeti karşılığında, bir dakikada ürünün tamamını Kazancın:. Hiçbir şey İşlettiğin bileşenler:.
Açıkça belirtmek gerekirse, herkese açık bir demo örneği için çalışma süresi taahhüdü verilmez ve buradaki hiçbir veri senin için yedeklenmez. Günlüğün o tarayıcıda tutulur ve tarayıcıyı temizlediğinde silinir. Düzenli olarak Profil → Verilerin üzerinden JSON dışa aktarımı al veya basamak 1'e geç.
Basamak 1: uygulama kendi sunucunda
mkdir -p ~/openplate && cd ~/openplate
curl -O https://raw.githubusercontent.com/LowCarbCheck/openplate/main/docker/compose.yml
docker compose -f compose.yml up -dO makinedehttp://localhost:3000olarak veya HTTPS üzerinden aç. Başka bir cihazdanhttp://<its address>:3000günlüğü gösterir. Uygulama kurulumu, çevrimdışı kullanım ve tek tıkla OpenRouter bağlantısı orada çalışmaz. Bkz. self-hosting.md.
Basamak 1 tek bir sunucuyu değiştirir. Sayfa senin çalıştırdığın bir konteynerden sunulur, fotoğraf yolu ise yukarıdakinin birebir aynısıdır.
Diyagram kaynağı
flowchart LR
app["openplate app, your box"] -->|"HTML and JS"| browser["Your browser"]
browser --- diary["Diary in this browser"]
browser -->|"photo and your key"| cloud["Cloud AI provider"]Uygulamayı başkasının örneğine bağımlı kalmadan, kendi denetimindeki bir donanımda, istediğin zaman güncelleyerek Kazancın:. Tek bir konteyner İşlettiğin bileşenler:. Veritabanı yok, .env adımı yok, üretilecek bir gizli anahtar yok, güncelleme sırasında taşınacak hiçbir veri yok. Çökerse hiçbir şey kaybolmaz, çünkü hiçbir veri saklamaz. Compose dosyası: docker/compose.yml.
Önerilen durma noktası burasıdır. Bundan sonraki her basamak gerçek operasyonel yük getirir.
Kılavuzun tamamı self-hosting.md içindedir. PWA kurulumu, tek tıkla OpenRouter bağlantısı ve 2. basamaktan itibaren giriş yapmak için ihtiyaç duyduğun HTTPS'yi kapsar.
Basamak 2: eşitleme ekle
Tek bir günlüğü cihazların arasında Kazancın:. Bunu dürüstçe anlatmanın yolu şudur: birbiriyle uyumlu kalan bir telefon ve bir dizüstü bilgisayar, yani bir kişi, iki cihaz. Aileler ikinci kullanım senaryosudur ve daha zayıf kalır: eşitleme hesap bazındadır, bu yüzden aynı hesabı paylaşan iki kişi ayrı birer günlük almak yerine tek bir günlüğü paylaşır. Ayrı günlükler isteyen iki kişinin iki hesaba ya da doğrudan basamak 1 düzeyinde iki cihaza ihtiyacı vardır, eşitlemeye hiç gerek kalmaz.
Basamak 2, arkasında bir veritabanı bulunan ikinci bir sunucu ekler. Her cihaz aynı şifrelenmiş veriyi gönderip diğer cihazınkini çeker, fotoğraf ise sağlayıcıya gitmek üzere cihazdan çıkmaya devam eder.
Diyagram kaynağı
flowchart LR
app["openplate app"] -->|"HTML and JS"| phone["Phone"]
app -->|"HTML and JS"| laptop["Laptop"]
phone -->|"ciphertext"| sync["openplate-core"]
laptop -->|"ciphertext"| sync
sync --> db[("Postgres")]
phone -->|"photo and your key"| cloud["Cloud AI provider"]
laptop -->|"photo and your key"| cloudUygulama, bir hesap servisi ve bir Postgres İşlettiğin bileşenler:. Bu ciddi bir adımdır: bir hesap servisinin yedeklenmeye değer bir veritabanı, korunmaya değer bir SERVER_SECRET ve kendi erişimini kaybedebilecek kullanıcıları vardır. İnternete açmadan önce openplate-core'un README dosyası belgesini oku. Compose dosyası: docker/topologies/compose.core.yml.
mkdir -p ~/openplate && cd ~/openplate
curl -O https://raw.githubusercontent.com/LowCarbCheck/openplate/main/docker/topologies/compose.core.yml
echo "SERVER_SECRET=$(openssl rand -hex 32)" >> .env
echo "ADMIN_TOKEN=$(openssl rand -hex 32)" >> .env
echo "PUBLIC_APP_URL=https://openplate.example.com" >> .env
echo "PUBLIC_SYNC_URL=https://sync.example.com" >> .env
echo "TRUST_PROXY=1" >> .env # 1 behind one reverse proxy, 0 with none
docker compose -f compose.core.yml up -dHesaplar güvenli bir sayfaya ihtiyaç duyar. Giriş yapma, kayıt olma ve davet açma işlemleri düzhttp://<LAN address>üzerinde başarısız olur. Bir alan adıyla veya alan adı olmayan bir ev ağında HTTPS kullan, ya da test için bir ssh tüneli üzerindenlocalhostadresine bağlan. Kimse kendi başına kayıt olamaz. İlk daveti İlk hesabı oluştur belgesinde gösterildiği gibi sunucudaADMIN_TOKENile üretirsin. Alan adı olmayan bir ev ağı HTTPS bağlantısını Yerel sertifikalı Caddy üzerinden alır.
Servis her girdiyi şifreli metin olarak saklar ve parolanı asla almaz. Her hesabın kurtarma kodunu kendi sırrı altında mühürlü olarak tutar, böylece unutulan bir parola bir bağlantıyla (e-posta yoluyla veya e-posta olmayan bir örnekte senin tarafınsan verilerek) sıfırlanır ve günlük geri gelir. Bu aynı zamanda servis işleticisinin prensipte üzerindeki bir günlüğü açabileceği anlamına da gelir. sync.md bu dengeyi tüm ayrıntılarıyla belirtir, eşitleme kurulumunu bitirmeden önce uygulama da bunu yapar.
Bunu etkinleştirirsen sunucu, paylaşılan bir yapay zeka faturasını da karşılayabilir. INSTANCE_MODE=managed ayarını yaparsan örnek, bir yöneticinin bir hane veya kuruluş için çalıştırdığı bir örneğe dönüşür: yöneticiler kişileri /admin üzerinden (veya yönetici API'si ile) davet eder, her hesap için günlük bir kota belirler ve oturum açılmış her tarama çekirdek sunucunun kendi yapay zeka vekili üzerinden çalışır: ayrı bir hizmet yok, ayrı bir davet linki yok. E-posta isteğe bağlıdır: /admin, e-posta gönderilsin ya da gönderilmesin, daveti her zaman bir yöneticinin kopyalayıp gönderebileceği bir link olarak gösterir. Sağlayıcı alt anahtarları yerine bunu açmanın ne zaman mantıklı olduğu konusunda configuration.md#managed-instances ve family-setup.md bölümlerine bak.
Yönetilen bir örnekte aynı sunucu tarama işlemini de üstlenir. Oturum açmış bir üye fotoğrafı yapay zeka vekiline gönderir, sunucu bunu o hesabın günlük kotasından düşer ve isteği operatörün yönlendirdiği yere iletir.
Diyagram kaynağı
flowchart LR
browser["Member's browser"] -->|"ciphertext"| sync["openplate-core, managed"]
browser -->|"photo"| sync
sync --- quota["Daily allowance per account"]
sync -->|"photo"| upstream["Cloud provider, or inference"]Üyelerin birbirini davet etmesine izin ver, ancak sayıyı düşük tut. Yönetilen bir örnekte, çekirdek sunucuda MEMBER_INVITE_DAILY_AI_LIMIT ve MEMBER_INVITE_ALLOWANCE_DAYS ayarlarını yap. Bu, sıradan bir üyenin önce sana sormadan birini davet etmesini sağlar. Sağlayıcı anahtarının parasını sen ödüyorsan, MEMBER_INVITE_LIFETIME_CAP=2 ayarını da yap. Varsayılan değer 5'tir, bu da yapay zeka faturasının paylaşıldığı bir örnek için uygundur. Bu değeri 2 yapmak bir partner ve bir arkadaş için yeterlidir ve büyümeyi izlenebilecek kadar yavaş tutar. configuration.md#member-invites bölümüne bak.
3. Basamak: kendi barındırdığın çıkarımı ekle
3. basamak taramayı kendi donanımında çalıştırır. Tarayıcı fotoğrafları doğrudan çıkarım konteynerine gönderir. Tarayıcıların bu konteynerin adresini çözebilmelidir. Model her yiyeceği tanımlar ve gram cinsinden ağırlığını tahmin eder. openplate-inference, makro değerlerini yapılandırdığın yiyecek kaynağından okur.
Diyagram kaynağı
flowchart LR
app["openplate app"] -->|"HTML and JS"| browser["Your browser"]
browser --- diary["Diary in this browser"]
browser -->|"photo, browser reachable address"| inf["openplate-inference"]
inf --- weights["Model runtime and weights"]
inf --- usda["Configured food data, USDA by default"]Kazancın: bir bulut yapay zeka hesabı, tarama başına ücret veya dışa giden fotoğraf trafiği olmadan yerel tabak taramaları. Konteyner imajı varsayılan olarak bir USDA FoodData Central özeti içerir, böylece openplate-inference makroları uydurmak yerine oradan arar. İşlettiğin bileşenler: bir model çalışma zamanı ve birkaç gigabaytlık ağırlık, artı uç noktasını tarayıcılarından erişilebilir kılmak için gereken her şey (fotoğraf cihaz → uç nokta şeklinde gider, bu yüzden burada bir compose ana makine adı işe yaramaz). Compose dosyası: docker/topologies/compose.inference.yml.
mkdir -p ~/openplate && cd ~/openplate
curl -O https://raw.githubusercontent.com/LowCarbCheck/openplate/main/docker/topologies/compose.inference.yml
echo "INFERENCE_API_KEY=opk_$(openssl rand -hex 24)" >> .env
echo "PUBLIC_APP_URL=http://192.168.1.20:3000" >> .env
echo "PUBLIC_INFERENCE_URL=http://192.168.1.20:8300/v1" >> .env
echo "TRUST_PROXY=0" >> .env # 0 with no reverse proxy, 1 behind one
docker compose -f compose.inference.yml up -d192.168.1.20 yerine sunucunun adresini yaz. Uygulama bir ters vekil sunucu arkasında HTTPS üzerinden çalışmaya başladığında, çıkarım adresi de https:// kullanmalıdır ve TRUST_PROXY, 1 olarak ayarlanmalıdır. self-hosting.md süreci adım adım anlatır.
Bu basamak iki tür kişi içindir:
- Donanıma bizzat sahipsin. Bir GPU makinesi veya makul düzeyde güçlü bir CPU makinesi.
- Zaten bir model çalışma zamanı çalıştırıyorsun. Halihazırda çalışan bir llama.cpp, Ollama veya GPU üzerinde vLLM kurulumun varsa,
MODEL_PROFILE=externalveMODEL_RUNTIME_URLdeğerlerini ayarla: bu durumda openplate-inference hiçbir şey indirmez, ikinci bir model başlatmaz ve sadece elindekini sarar. Önce destek matrisi içeriğini kontrol et; vLLM'in CPU derlemesi bunu çalıştıramaz.
Donanım gerçekleri. Küçük lite profili 2.0 GiB ağırlığa sahiptir ve yalnızca CPU bulunan bir makinede AVX2 destekli 8+ modern çekirdek ve 4 GB boş RAM ister; daha büyük quality profili ise 5.8 GiB ağırlığa ve 5.8 GiB VRAM tabanına ihtiyaç duyar. CPU taramaları saniyeler ile dakikalar arasında sürer ve eşzamanlılıkla aktarım hızı artmaz: kapasiteyi makine seri çalışıyormuş gibi planla. Profil başına ölçülen sayılar openplate-inference içindeki docs/hardware.md içinde yer alıyor. Bir şey satın almadan önce bunu oku.
Çalışmaya başladığında, her kişiye bir anahtar verebilirsin (Ayarlar → Yapay Zeka → OpenAI uyumlu) veya her ziyaretçinin tek dokunuşla bağlanabilmesi için DEFAULT_INFERENCE_BASE_URL ve benzerlerini ayarlayabilirsin; ancak DEFAULT_INFERENCE_API_KEY değerinin sayfaya gömüleceğini ve uygulamayı açabilen herkes tarafından okunabileceğini unutma. configuration.md bölümüne bak.
Çekirdek sunucu ve çıkarım farklı katmanlardır
Birbirleriyle karıştırılmaları kolaydır ve birlikte çalışırlar.
- openplate-inference hesaplama katmanıdır. bu tabakta ne var sorusunu yanıtlar. Bir model çalışma zamanı ile ağırlıkları barındırır ve donanıma ihtiyaç duyar.
- Yönetilen bir kurulumdaki openplate-core, çoklu kiracılık katmanıdır. kimin harcama yapmasına izin var, ne kadar harcayabilir ve bu yetkiyi nasıl geri alırım sorusunu yanıtlar. Model barındırmaz ve her şeyi iletir.
Yönetilen bir örneğin yapay zeka vekilini çıkarım makinene yönlendirirsen (çıkarım hizmetinin API_KEYS değerlerinden biri UPSTREAM_API_KEY olacak şekilde, openplate-core'un UPSTREAM_BASE_URL ayarı) her ikisine de sahip olursun: kendi donanımında, önünde hesap başına kotalar bulunan taramalar. Bunun yerine onu bir bulut sağlayıcısına yönlendirirsen, donanım olmadan paylaşılan harcama elde edersin. Her iki durumda da aynı çekirdek sunucu günlüğü de taşır: senkronizasyon ve yapay zeka vekili artık iki değil, tek bir hizmettir (architecture.md).
4. basamak: her şey
4. basamak, yukarıdaki iki basamağın bir araya getirilmiş halidir. Üzerinde yeni hiçbir şey yoktur.
Diyagram kaynağı
flowchart LR
app["openplate app"] -->|"HTML and JS"| phone["Phone"]
app -->|"HTML and JS"| laptop["Laptop"]
phone -->|"ciphertext"| sync["openplate-core"]
laptop -->|"ciphertext"| sync
sync --> db[("Postgres")]
phone -->|"photo"| inf["openplate-inference"]
laptop -->|"photo"| infKazancın: basamak 2 ve basamak 3 birlikte (günlüğün her cihazda, kendi donanımında taranır, hiçbir üçüncü tarafa hiçbir şey gitmez). İşlettiğin bileşenler: tamamı. Uygulama, çekirdek sunucu, Postgres, model çalışma zamanı ve bunlardan ikisi için tarayıcıdan erişilebilir adresler. Compose dosyası: docker/topologies/compose.full.yml. Başlığı .env satırlarını listeler: basamak 2 ve basamak 3'ün birlikte olanları.
Podman bunu aynı şekilde çalıştırır: podman compose -f compose.full.yml up -d.
Bu basamakta öğrenilecek yeni bir şey yoktur. Aynı SERVER_SECRET, aynı yedekleme zorunluluğu ve aynı asgari donanım gereksinimi ile yukarıdaki ikisinin birleşimidir.
Bir sunucu yerine faturayı paylaşmak
Bu merdiveni tırmanma nedenin "hanemin birden fazla yapay zeka anahtarına ihtiyacı var" idiyse, ilk yanıt kesinlikle bir basamak değildir. Bu, sağlayıcı tarafında, kişi başına anahtarlar ve kişi başına harcama sınırlarıyla çözülür ve fazladan hiçbir yazılım gerektirmez. family-setup.md adımları içerir ve sağlayıcın limitli alt anahtarlar vermediğinde, yedek plan olarak yönetilen bir çekirdek sunucu sunar (INSTANCE_MODE=managed ile basamak 2).