2026'da Mealie Nasıl Self-Host Edilir: Tarif İçe Aktarma, Kullanıcılar ve Yedekler
Docker, portlar, kalıcı veriler, TLS, güvenlik, yedekler ve üretim kullanımını engelleyen sorunları kapsayan pratik Mealie self-hosting rehberi. Adım adım.
En kısa Mealie demosu, bir process'in 9000 portunu dinlediğini kanıtlar. Üretim ortamı ise daha güçlü kanıtlar gerektirir. Container değiştirildikten sonra bile şu senaryoyu başarıyla tamamlamalıdır: bir tarif URL'sini içe aktarmak, görselini doğrulamak, tarifi bir yemek planına eklemek ve birkaç tariften alışveriş listesi oluşturmak.
Mealie belirli bir amaç için deploy edilir: tarifler, yemek planları ve alışveriş listeleri. En yaygın deployment tuzağı, /app/data kalıcı olmadığı için tarif görsellerinin kaybolmasıdır. Bu nedenle public URL yönetimi ve kalıcı state, görselin başlatılması kadar dikkat gerektirir.
Mealie runtime sınırını çizin
Sorumlu bir Mealie topology'sinin en küçük hâlinde 9000 portunda tek bir private listener, bir ingress route'u ve belgelenmiş bir state sınırı bulunur. Mealie'nin network contract'ı, çok kullanıcılı bir production deployment için Postgres ve davetler için SMTP gerektirir. Private endpoint'leri internal DNS üzerinde tutun, yalnızca gerekli outbound çağrılara izin verin ve Mealie'ye scope'u sınırlandırılmış bir service credential verin.
Temiz bir client'tan bir tarif URL'sini içe aktarmasını, görselini doğrulamasını, tarifi bir yemek planına eklemesini ve birkaç tariften alışveriş listesi oluşturmasını isteyerek topology'yi doğrulayın. Çalışma sırasında tarif içe aktarmalarını, görsel depolamayı, database sorgularını, background task'ları ve eş zamanlı household user'ları izleyin. Sonuç, bir sonraki iyileştirmenin bellek, storage, networking veya ayrı bir worker tarafında mı yapılması gerektiğini gösterir; rastgele container boyutlandırmasını teşvik etmez.
Capacity ve upgrade kontrolleri
Boşta çalışan bir health check, Mealie hakkında çok az şey söyler. Tarif içe aktarmalarını, görsel depolamayı, database sorgularını, background task'ları ve eş zamanlı household user'larını izleyin; ardından kullanıcıların yaşadığı belirtiye göre alarm üretin: “bir tarif URL'sini içe aktarma, görselini doğrulama, tarifi bir yemek planına ekleme ve birkaç tariften alışveriş listesi oluşturma” işleminin başarısız olması. Liveness kontrolünü local ve hafif tutun; readiness, restart storm'a neden olmadan migration veya initialization durumunu bildirsin.
Riskli upgrade alanı, database migration'larının ve ingredient-parser değişikliklerinin kayıtlı tarifleri etkileyebilmesidir; bu nedenle hem içe aktarmaları hem de mevcut kayıtları test edin. Release note'larını okuyun, state'in snapshot'ını alın, hedef sürümü restore edilmiş bir kopya üzerinde deploy edin ve acceptance işlemini tekrarlayın. /app/data kalıcı olmadığı için tarif görselleri kayboluyorsa state'i körlemesine silmek veya redirect eklemek yerine client request'i ilgili ilk application log'u ile ilişkilendirin.
Mealie release gate'i
Mealie için bir release candidate, sabit bir senaryoyu tamamlayarak trafiği hak eder: bir tarif URL'sini içe aktarmak, görselini doğrulamak, tarifi bir yemek planına eklemek ve birkaç tariften alışveriş listesi oluşturmak. Bu senaryo için image digest'ini, secret içermeyen etkin configuration'ı, public origin'i ve timestamp'leri kaydedin. Test verileri silinebilir olmalı, ancak kullanıcıların izlediği yolun aynısını çalıştıracak kadar gerçekçi olmalıdır.
Runtime'ı değiştirdikten sonra testi çalıştırın; ardından servisi database, tarif görselleri, asset'ler ve application setting'lerinden yeniden oluşturun. Recovery; tarifler, görseller, kullanıcılar, yemek planları ve alışveriş listeleri geri geldiğinde ve bilinen bir tarif doğru şekilde görüntülendiğinde başarılıdır. Tarif içe aktarmaları, görsel depolama, database sorguları, background task'lar ve eş zamanlı household user'ları için ölçülen kaynak kullanımını önceki release ile karşılaştırın ve promotion öncesinde anlamlı sapmaları araştırın.
Son olarak şu kontrollü arızayı çalıştırın: çok kullanıcılı bir production deployment için test identity'sinin Postgres'e ve davetler için SMTP'ye erişimini geçici olarak engelleyin. Mealie'nin hatayı açıklayıp açıklamadığını, mevcut state'e zarar verip vermediğini ve geçerli koşul geri geldiğinde çalışmaya devam edip etmediğini doğrulayın. Redact edilmiş bir log kesiti ile recovery süresini kaydedin. Bu kontroller birlikte yalnızca process uptime'ını değil, davranışı, kalıcılığı ve işletilebilirliği de kapsar.
Değiştirilebilir bir Mealie container'ı oluşturun
İlk Mealie invocation'ını, pull request içinde incelenebilecek kadar reproducible tutun.
docker run -d \
--name mealie \
--restart unless-stopped \
-p 127.0.0.1:9000:9000 \
-v mealie-data:/app/data \
-e BASE_URL=https://app.example.com \
ghcr.io/mealie-recipes/mealie:latest
Gerçek veriler mevcut olduktan sonra latest sürümüne güvenmeyin. Çalışan digest'i, container user'ını ve mount ownership bilgisini kaydedin. Production trafiğinin route'unu açmadan önce application log'unu eksiksiz bir test boyunca takip edin — bir tarif URL'sini içe aktarın, görselini doğrulayın, tarifi bir yemek planına ekleyin ve birkaç tariften alışveriş listesi oluşturun — ve varsa migration'ları not edin.
Mealie'deki tüm kalıcı byte'ları bulun
Tüm kalıcı artifact'leri envantere alın: database, tarif görselleri, asset'ler ve application setting'leri. Bootstrap işleminden önce /app/data'yı mount edin, zararsız örnek veriler yazın ve bu path'in gerçekten kalıcı olduğunu kanıtlamak için container'ı değiştirin. Yalnızca en büyük directory'yi değil, kayıtlı verilerin nasıl yorumlandığını değiştiren configuration'ı da dahil edin.
Retention politikasını belirleyin, backup'ları host dışına kopyalayın ve temiz bir ortamda restore çalıştırın. Mealie tatbikatı; tarifler, görseller, kullanıcılar, yemek planları ve alışveriş listeleri geri geldiğinde ve bilinen bir tarif doğru şekilde görüntülendiğinde tamamlanır. Snapshot'lar planın bir parçasıysa her mekanizmanın neleri kurtarabileceğini belgelemek için PITR ve snapshot rehberini kullanın.
HTTPS konusunda Mealie route'unu doğru yapılandırın
BASE_URL'i harici HTTPS origin'i olarak ayarlayın. Seçtiğiniz hostname'i container'ın 9000 portuna yönlendirin, original host ile HTTPS scheme bilgisini forward edin ve ikinci bir direct origin yayınlamaktan kaçının.
Mealie'yi temiz bir external client'tan test edin. Ingress arızasını, bilinen application sınırından ayırın — /app/data kalıcı olmadığı için tarif görselleri kaybolur. Certificate, DNS veya 502 hatası routing'e aittir; Mealie'ye ulaşan ve daha sonra başarısız olan bir request ise application state'ine, capacity'ye veya supporting requirement'ına aittir. Custom-domain TLS rehberi ilk grubu kapsar.
Mealie'nin sahip olduğu yetkileri azaltın
İlk login işleminden sonra anonymous visitor'ın, normal user'ın ve administrator'ın neler yapabildiğini ayrı ayrı gözden geçirin. Kaçınılması gereken Mealie arızası, sign-up'ı açık bırakmak veya ilk admin password'ünü değiştirmemektir. Amaç; ilk admin password'ünü değiştirmek, enrollment sona erdiğinde sign-up'ı kapatmak ve private household data'yı korumaktır.
BASE_URL bir configuration'dır, secret değildir; değerini açıkça belirtirken Mealie'nin kullandığı ayrı credential'ları koruyun. Dependency account'larını human account'larından ayrı tutun, mümkün olduğunda kullanılmayan egress'i engelleyin ve tarif içe aktarmalarının, görsel depolamanın, database sorgularının, background task'ların ve eş zamanlı household user'larının etkileyebileceği işi sınırlandırın.
Dockup deployment'ı yine de bir Mealie acceptance test'i gerektirir
Routing, certificate'lar, service replacement ve attached storage makul automation hedefleridir. Dockup bunları Mealie için yönetir; ayrıca ilgili managed database'i provision edebilir veya müşterinin kendi server'ında çalışan service'lere bağlanabilir.
Bunun icat etmemesi gereken şey Mealie trust policy'sidir. Deployment sonrasında BASE_URL'i harici HTTPS origin'i olarak ayarlayın, şu sınırı uygulayın — ilk admin password'ünü değiştirin, enrollment sona erdiğinde sign-up'ı kapatın ve private household data'yı koruyun — ve şu senaryonun sonucunu doğrulayın: bir tarif URL'sini içe aktarın, görselini doğrulayın, tarifi bir yemek planına ekleyin ve birkaç tariften alışveriş listesi oluşturun. Sonuç, application-specific acceptance test'i olan one-click infrastructure'dır.
Sık sorulan sorular
Production deployment için Mealie neye ihtiyaç duyar?
Mealie container'ını 9000 portu üzerinden tek bir HTTPS origin'inin arkasına route edin. Supporting network requirement, çok kullanıcılı bir production deployment için Postgres ve davetler için SMTP'dir. Bir tarif URL'sini içe aktaramıyor, görselini doğrulayamıyor, tarifi bir yemek planına ekleyemiyor ve birkaç tariften alışveriş listesi oluşturamıyorsanız Mealie'yi hazır kabul etmeyin.
Hangi Mealie verileri backup'a dahil edilmelidir?
/app/data'yı kalıcı hâle getirin ve database, tarif görselleri, asset'ler ile application setting'lerini aynı recovery manifest'ine dahil edin. Temiz bir Mealie restore işlemi yalnızca tarifler, görseller, kullanıcılar, yemek planları ve alışveriş listeleri geri geldiğinde ve bilinen bir tarif doğru şekilde görüntülendiğinde başarılıdır.
Reverse proxy arkasında Mealie için HTTPS gerekir mi?
Public Mealie origin'i için HTTPS kullanın ve 9000 portunu internal route üzerinde tutun. Mealie ayarını doğru uygulayın: BASE_URL'i harici HTTPS origin'i olarak ayarlayın. Mealie için HTTPS, credential'ları veya user content'ini transit sırasında korur ve origin'e duyarlı client davranışının tutarlı kalmasını sağlar.
Bir Mealie upgrade'i nasıl test edilmelidir?
Mevcut Mealie state'ini izole bir deployment'a restore edin, candidate version'ı uygulayın ve acceptance transaction'ını tekrarlayın. Database migration'ları ve ingredient-parser değişiklikleri kayıtlı tarifleri etkileyebileceğinden özellikle dikkatli olun; bu nedenle içe aktarmaları ve mevcut kayıtları test edin. Data migration ve rollback sınırları anlaşılana kadar önceki Mealie image'ını saklayın.
