BelgelerGeliştirici Kılavuzu10 Hizmet İçin Kapsamlı Docker Dağıtım Kılavuzu

🐳 Docker Compose ile Eksiksiz Dağıtım Rehberi

Loomix ekosisteminin tüm 10 servisini tek bir sanal sunucu (VPS) üzerinde en yüksek güvenlik ve kararlılıkla yayınlamak için adım adım pratik rehber.

1. Sunucu Ön Koşulları (Prerequisites)

Başlamadan önce Ubuntu 22.04 LTS veya 24.04 LTS çalıştıran bir VPS sunucu hazırlayın:

  • Minimum RAM: En az 4GB Swap alanı ile 4GB RAM (en iyi derleme performansı için 8GB önerilir).
  • İşlemci: En az 2 vCPU (hızlı Docker derlemeleri için 4 vCPU önerilir).

Docker Soket İzinleri

Docker ve Docker Compose kurulu olmalı, geçerli kullanıcı docker grubuna eklenmelidir.

Docker Soket İzinleri
bash
sudo usermod -aG docker $USER
newgrp docker # or log out and SSH back in
docker ps # should work without sudo

2. Proje Kodunu Sunucuya Aktarma

Proje dosyalarını sunucunuza aktarmak için iki yöntemden birini kullanabilirsiniz:

1. Yöntem: Git ile Doğrudan Klonlama (Önerilen)

Ortam Değişkenlerini Güvende Tutun

Git ile klonlama komutu:
bash
git clone https://github.com/<YOUR_GITHUB_USERNAME>/<YOUR_REPOSITORY_NAME>.git
cd <YOUR_REPOSITORY_NAME>

Özel Depodan SSH Anahtarlarıyla Klonlama

  • 1. Sunucuda SSH anahtar çifti üretin: ssh-keygen -t ed25519
  • 2. Genel anahtarı görüntüleyin ve kopyalayın: cat ~/.ssh/id_ed25519.pub
  • 3. GitHub deponuzun Deploy Keys bölümüne bu anahtarı ekleyin.
  • 4. Depoyu SSH üzerinden doğrudan klonlayın.
SSH ile klonlama komutu:
bash
git clone git@github.com:<YOUR_GITHUB_USERNAME>/<YOUR_REPOSITORY_NAME>.git
cd <YOUR_REPOSITORY_NAME>

Kişisel Erişim Belirteci (PAT) ile Klonlama

PAT ile klonlama komutu:
bash
git clone https://<YOUR_GITHUB_USERNAME>:<PERSONAL_ACCESS_TOKEN>@github.com/<YOUR_GITHUB_USERNAME>/<YOUR_REPOSITORY_NAME>.git
cd <YOUR_REPOSITORY_NAME>

2. Yöntem: Arşiv Dosyasını (ZIP / Tarball) Yükleme

Arşiv dosyasını indirdiyseniz, rsync veya scp ile sunucuya yükleyebilirsiniz:

SCP / rsync ile yükleme komutu:
bash
rsync -avz --exclude 'node_modules' --exclude '.git' --exclude '.next' ./ user@your_vps_ip:/root/next-strapi-medusa

3. Hızlı Otomatik Kurulum Sihirbazı (Quick Wizard)

Kurulumu zahmetsiz hale getirmek için Swap alanını yapılandıran, portları denetleyen ve konteynerleri adım adım kuran server-setup.sh betiğini hazırladık:

Kurulum sihirbazını başlatma komutu:
bash
chmod +x server-setup.sh
bash server-setup.sh
Profesyonel İpucu:
Sihirbaz sunucu kaynaklarını denetler ve tüm şifreleri otomatik olarak üretip .env dosyanıza kaydeder.

4. Dağıtım Profilini Seçme (Deployment Profiles)

Sistem yerel geliştirmeden büyük ölçekli üretime kadar 3 farklı dağıtım profilini destekler:

Özel Bir Alan Adına (Domain) İhtiyacınız Var mı?
Evet, Profil B ve C'de Let's Encrypt üzerinden ücretsiz otomatik SSL sertifikaları almak için gerçek bir alan adı önerilir.
Çoğu Sunucu İçin Önerilen

Tek bir VPS sunucu üzerinde tüm servisleri alt alan adlarıyla çalıştırır; Caddy ile otomatik SSL sağlar.

Profil B Kurulum Adımları:

  • 1. DNS A kayıtlarınızı sunucunuzun IP adresine yönlendirin.
  • 2. server-setup.sh çalışırken Profil B'yi seçin.
  • 3. Ana alan adınızı (örn: alanadiniz.com) girin.
  • 4. Caddy tüm 10 servis için otomatik SSL sertifikası temin eder.
  • 5. Tüm yönetim panelleri HTTPS üzerinden anında kullanıma hazır olur.
.env (Profil B Alıntısı)
env
# Profile B: VM / LAN HTTPS (.local hostnames) - Recommended ★
STOREFRONT_PUBLIC_URL=https://store.local
MEDUSA_BACKEND_PUBLIC_URL=https://api.local
STRAPI_PUBLIC_URL=https://admin.local
MEILISEARCH_PUBLIC_URL=https://search.local
MINIO_PUBLIC_URL=https://api.local/minio/mystore
GOOGLE_CALLBACK_URL=https://store.local/ir/account/auth/callback
STOREFRONT_URL=http://storefront:8000
MEDUSA_NODE_ENV=production
MEDUSA_ALLOW_HTTP_COOKIES=false
CLOUDFLARE_TUNNEL_TOKEN=
Profil B Yönetim Bağlantıları:
• Mağaza: https://alanadiniz.com
• Medusa: https://api.alanadiniz.com/app
• Strapi: https://admin.alanadiniz.com/admin
• Umami: https://analytics.alanadiniz.com
• OpenObserve: https://monitor.alanadiniz.com

Cloudflare Edge Hardening Güvenlik Rehberi

DNS'i Cloudflare'a Yönlendirmeden Önce:

Yönlendirme döngülerini (Redirect Loops) önlemek için Cloudflare SSL ayarını Full (Strict) olarak ayarlayın.

2. Servisler Çalıştıktan Sonra (Dağıtım Sonrası Güvenlik Sıkılaştırma):

SSL/TLS Şifreleme Modu: Full (Strict) olarak ayarlayın.
Edge Sertifikaları: Always Use HTTPS, Automatic HTTPS Rewrites seçeneklerini etkinleştirin ve Minimum TLS Sürümünü TLS 1.2 (veya 1.3) yapın.
DNS Proxying: CDN hızlandırması ve kaynak sunucuyu DDoS saldırılarından gizlemek için tüm DNS kayıtlarını turuncu buluta (Proxied) geçirin.
Güvenlik / WAF: Bot Fight Mode özelliğini etkinleştirin.
Ağ (Network): WebSockets ve gRPC protokollerinin açık olduğundan emin olun.
Önbellekleme: Caching > Configuration altında dinamik sepet ve stok güncellemelerini anında korumak için Browser Cache TTL değerinin Respect Existing Headers olarak ayarlandığını doğrulayın.

HTTP Basic Auth ve Caddy Edge Koruması:

Strapi Yönetici Paneli (admin.yourdomain.com/admin* ve /): Kaba kuvvet saldırılarını önlemek için HTTP Basic Auth ile korunur. Genel API rotaları (/api/*) ve yüklenen medyalar (/uploads/*), Mağaza Arayüzü ve Medusa'nın 401 hatası almadan veri çekebilmesi için açık kalır.
OpenObserve Paneli (monitor.yourdomain.com): OpenObserve dahili kimlik bilgilerinin yanı sıra çift katmanlı uç savunma için HTTP Basic Auth ile korunur.

.env dosyasındaki BASIC_AUTH_HASH için güvenli bir bcrypt özeti oluşturmak için:

Caddy Bcrypt Parola Özeti (Hash) Oluşturma
bash
docker run --rm caddy:latest caddy hash-password --plaintext "your_secret_password"

Dağıtım Profillerine Göre URL ve Port Matrisi

ServisProfil A (Yerel)Profil B (Tek VPS)Profil C (Kurumsal)
Next.js Mağazahttp://<VM_IP>:8000https://store.localhttps://yourdomain.com
Medusa Arka Ucuhttp://<VM_IP>:9000/apphttps://api.local/apphttps://api.yourdomain.com/app
Strapi CMS Panelihttp://<VM_IP>:1337/adminhttps://admin.local/adminhttps://admin.yourdomain.com/admin
Umami Analitikhttp://<VM_IP>:3005https://analytics.localhttps://analytics.yourdomain.com
OpenObserve İzlemehttp://<VM_IP>:5080https://monitor.localhttps://monitor.yourdomain.com
Arama Motoru (Meilisearch)127.0.0.1:7700https://search.localhttps://search.yourdomain.com

.env dosyasındaki her Genel URL'nin Anlamı:

  • STOREFRONT_PUBLIC_URL: Next.js mağazası (Docker içinde 8000 portu veya genel alan adı).
  • MEDUSA_BACKEND_PUBLIC_URL: Medusa API ve Yönetici Paneli (/app).
  • STRAPI_PUBLIC_URL: Strapi CMS (/admin); önizleme bağlantıları STOREFRONT_PUBLIC_URL kullanır.
  • MEILISEARCH_PUBLIC_URL: İstemci tarafı anlık aramalar için genel arama URL'si (Profil A: http://127.0.0.1:7700, Profil B: https://search.local, Profil C: https://search.alanadiniz.com).
  • MINIO_PUBLIC_URL: Medya dosyaları için genel önek (Profil A: http://IP:9001/mystore, Profil B/C: https://api.*/minio/mystore).
  • STOREFRONT_URL: Yalnızca Docker ağı içinde (http://storefront:8000), Medusa -> Storefront önbellek temizleme (revalidation) için dahili adres.

Faz 1'den ÖNCE Ayarlanması Gerekenler:

Gizli Anahtarlar (openssl rand -hex 32): POSTGRES_PASSWORD, MEILI_MASTER_KEY, tüm STRAPI_* anahtarları, MEDUSA_JWT_SECRET, MEDUSA_COOKIE_SECRET, REVALIDATE_SECRET, UMAMI_APP_SECRET.
Yönetici Giriş Bilgileri: MEDUSA_ADMIN_EMAIL, MEDUSA_ADMIN_PASSWORD, MINIO_ROOT_USER, MINIO_ROOT_PASSWORD, UMAMI_USERNAME, UMAMI_PASSWORD.
Genel URL'ler: Yukarıdaki Profil A, B veya C seçeneklerinden birini belirleyin.

İlgili faza kadar boş bırakılacak değişkenler:

• Faz 4: STRAPI_API_TOKEN_FOR_MEDUSA, STRAPI_API_TOKEN_FOR_FRONT
• Faz 6: MEDUSA_PUBLISHABLE_KEY
• Faz 7: MEILI_SEARCH_KEY
• Faz 8: UMAMI_WEBSITE_ID

Medusa Yönetici Paneli Kuralı: Docker içinde her zaman MEDUSA_NODE_ENV=production olarak bırakın. Asla development yapmayın — yönetici arayüzü prodüksiyon olarak derlenmiştir ve geliştirme modu beyaz ekrana yol açar.

5. GitHub Actions CI/CD ile Otomatik Dağıtım

Proje, kod depoya gönderildiğinde otomatik olarak Docker konteynerlerini oluşturan ve sunucunuza dağıtan hazır iş akışları içerir:

  1. Sunucu IP'sini ve SSH anahtarınızı GitHub Depo Sırlarına (Repository Secrets) ekleyin.
  2. Ana dala (main branch) her kod gönderildiğinde Next.js ve Medusa konteynerleri otomatik derlenir.
  3. Sunucuya sinyal gönderilerek kesintisiz (Zero-Downtime) güncelleme tamamlanır.
  4. 4. (Özel Depo) repo, workflow ve read:packages izinlerine sahip bir GitHub Kişisel Erişim Belirteci (Classic PAT) oluşturun ve sunucunuzda GitHub Container Registry'ye giriş yapın:
VPS Üzerinde Docker Registry Girişi
bash
echo "<YOUR_PAT>" | docker login ghcr.io -u <YOUR_GITHUB_USERNAME> --password-stdin

10 Aşamalı Dağıtım Süreci (Phases 1-10)

AşamaBaşlatılan ServislerProfil AProfil B / C (Yerel Ağ ve Prodüksiyon)
Aşama 1:Veritabanları ve Altyapı (Postgres, Redis, MinIO, Meilisearch)
Aşama 2:Caddy Ters Proxy ve Otomatik SSL (Profil B'de hosts yapılandırması)⏭ Atla (Profil A için gerekli değildir)✅ Faz 1'in hemen ardından, Strapi'den önce
Aşama 3:Strapi CMS Motoru (GHCR'den imaj çekme)
Aşama 4:Strapi API Belirteçleri -> .env dosyasına kaydetme
Aşama 5:Medusa 2.0 Ticaret Motoru (GHCR'den imaj çekme)
Aşama 6:Medusa Yayınlanabilir Anahtarı -> .env dosyasına kaydetme
Aşama 7:Meilisearch Yalnızca Arama Anahtarı -> .env dosyasına kaydetme
Aşama 8:Umami Analitik Paneli (Mağaza arayüzünden önce)İsteğe bağlı
Aşama 9:Next.js Mağaza Arayüzü (GitHub Actions Otomatik Derleme ve Dağıtım)
Aşama 10:Gözlemlenebilirlik ve Log Sistemi (OpenObserve, Vector, cAdvisor)İsteğe bağlıÖnerilen

Aşama 1: Veritabanlarının Başlatılması (PostgreSQL & Redis)

Medusa, Strapi ve Umami için izole veritabanlarına sahip PostgreSQL ve oturumlar için Redis başlatılır.

Aşama 1 komutu:
bash
docker compose up -d postgres redis meilisearch minio minio-setup

Tüm servisler sağlıklı (healthy) duruma gelene kadar bekleyin: docker compose ps

Aşama 2: Caddy Ağ Geçidi ve Otomatik SSL Sertifikaları

Tüm alan adları için otomatik Let's Encrypt SSL sertifikası sağlayan ters proxy servisi Caddy çalıştırılır.

Aşama 2 komutu:
bash
docker compose up -d caddy
docker compose logs -f caddy

Profil B Windows hosts Dosyası Yapılandırması:

C:\Windows\System32\drivers\etc\hosts dosyasını Yönetici olarak Not Defteri ile açın ve şunu ekleyin:
192.168.1.103 store.local api.local admin.local analytics.local monitor.local
(192.168.1.103 adresini kendi sanal sunucu IP'niz ile değiştirin. Meilisearch eklemeyin — dahili kalmalıdır).

Aşama 3: Strapi CMS v5 Başlatılması

Strapi CMS konteyneri indirilir, veritabanına bağlanır ve 1337 portu hazır olana kadar beklenir.

Aşama 3 komutu:
bash
docker compose pull strapi
docker compose up -d strapi
docker compose logs -f strapi

Sunucunun 1337 portunu dinlemeye başlamasını bekleyin (ilk başlatmada 1-3 dakika sürer). Strapi Yönetici Panelini açın (Profil B: https://admin.local/admin, Profil A: http://<VM_IP>:1337/admin) ve yönetici hesabınızı oluşturun.

Aşama 4: Strapi API Anahtarlarının Çıkarılması ve .env'ye Yazılması

Next.js ön yüzünün ana sayfa bloklarını okuyabilmesi için gerekli API belirteci otomatik üretilip .env'ye eklenir.

  1. strapi-token-init.js betiği çalışarak yönetici belirtecini çıkarır.
  2. STRAPI_API_TOKEN değişkeni .env dosyasına kaydedilir.
  3. 3. Mağaza Arayüzü İçin (STRAPI_API_TOKEN_FOR_FRONT): Read-Only belirtecine tıklayın, Regenerate butonuna basın ve değeri .env dosyasındaki STRAPI_API_TOKEN_FOR_FRONT değişkenine kopyalayın.

Aşama 5: MedusaJS v2 Ticaret Motorunun Başlatılması

Medusa konteyneri çalıştırılır, veritabanı şemaları taşınır ve ilk süper yönetici hesabı oluşturulur.

Aşama 5 komutu:
bash
docker compose pull medusa
docker compose up -d medusa
docker compose logs -f medusa

İlk çalıştırmadaki otomatik adımlar: Veritabanı geçişleri db:migrate (2–5 dakika sürer) -> yönetici kullanıcısı oluşturma -> 9000 portunda API hazır. Medusa Yönetici Panelini https://api.local/app (Profil B) veya http://<VM_IP>:9000/app (Profil A) adresinde açıp MEDUSA_ADMIN_EMAIL ve MEDUSA_ADMIN_PASSWORD ile giriş yapın.

Aşama 6: Medusa Satış Kanalları ve Yayınlanabilir API Anahtarları

Ön yüzün ürünleri ve sepetleri yönetebilmesi için yayınlanabilir anahtar üretilir ve varsayılan satış kanalına bağlanır.

  1. Yönetici kullanıcısı tanımlanır ve yetkilendirilir.
  2. Publishable anahtarı NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY değişkenine atanır.
  3. 3. ÇOK ÖNEMLİ: Oluşturulan anahtarı açın > Sales Channels sekmesine gidin > anahtarı Default Sales Channel ile ilişkilendirin. Bu adım olmadan ürünler mağaza arayüzünde görünmez.

Aşama 7: Meilisearch Arama Motorunun Kurulması

Ürünlerin ve kategorilerin milisaniyeler içinde aranabilmesi için Meilisearch konteyneri başlatılır.

Aşama 7 komutu:
bash
curl -H "Authorization: Bearer <MEILI_MASTER_KEY>" http://127.0.0.1:7700/keys

Default Search API Key değerini kopyalayıp .env dosyasında MEILI_SEARCH_KEY değişkenine ekleyin (kurulum sihirbazı bunu otomatik olarak ayıklar).

Aşama 8: Umami Analitik Sisteminin Başlatılması

Çerezsiz çalışan bağımsız analitik platformu Umami çalıştırılır ve web sitesi kimliği oluşturulur.

Aşama 8 komutu:
bash
docker compose up -d umami

Umami panelini açın (Profil B: https://analytics.local, Profil A: http://<VM_IP>:3005). Giriş yapın (admin / umami), Settings > Websites > Add website bölümüne gidin ve üretilen Website ID değerini .env dosyasındaki UMAMI_WEBSITE_ID alanına yapıştırın.

Aşama 9: Next.js 16 Mağaza Ön Yüzünün Dağıtımı

Ön yüz konteyneri çekilir, hazır olan tüm servislere bağlanır ve ana sayfa erişilebilir hale getirilir.

1. Derleme Değişkenleri ve API Anahtarları:

Medusa ve Strapi yolları derleme aşamasında konteynere aktarılır.

1. STOREFRONT_BUILD_ARGS (Derleme Zamanı Değişkenleri)

Next.js derleme değişkenlerinizi içerir. Yukarıdaki şablonu kopyalayın ve önceki aşamalarda oluşturulan anahtarları buraya doldurun.

Derleme Değişkenleri (Build Args):
env
MEDUSA_BACKEND_URL=http://medusa:9000
NEXT_PUBLIC_MEDUSA_BACKEND_URL=https://api.yourdomain.com
NEXT_PUBLIC_STRAPI_URL=https://admin.yourdomain.com
NEXT_PUBLIC_BASE_URL=https://store.yourdomain.com
NEXT_PUBLIC_MEILISEARCH_HOST=https://search.yourdomain.com
NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY=pk_...
NEXT_PUBLIC_MEILISEARCH_SEARCH_KEY=...
NEXT_PUBLIC_UMAMI_WEBSITE_ID=...
NEXT_PUBLIC_DEFAULT_REGION=US
DEFAULT_LOCALE=en-US
NEXT_PUBLIC_MEILISEARCH_INDEX_NAME=products
NEXT_PUBLIC_ENABLE_IRAN_FEATURES=false

2. REGISTRY_URL

Bileşen kayıt defterinin URL adresi. Varsayılan: Genel Loomix Blocks kayıt defteri:
https://raw.githubusercontent.com/landa33/loom-blocks-registry/main/src/modules

3. GITHUB_PAT (İsteğe Bağlı)

GitHub Kişisel Erişim Belirteci (Classic). repo, workflow ve read:packages izinleri gerektirir. GHCR konteyner indirmeleri, CI/CD tetikleme ve özel bileşen kayıt defteri erişimi için kullanılır.

4. DEPLOY_PATH

Linux VPS sunucunuzdaki proje dizininin mutlak yolu (örneğin /root/loomix-commerce). Self-Hosted Runner'ın Docker Compose projesini bulması için zorunludur.

2. Küçük Boyutlu Standalone Derleme:

Next.js Standalone çıktısı ile konteyner boyutu 150MB'ın altına indirilir.

3. Ağ ve Hazır Olma Denetimi:

Port 8000 denetlenir ve Caddy ters proxy ağına bağlanır.

4. Üretim Ön Yüzünün Başlatılması:

Ön yüzü çalıştırma komutu:
bash
docker compose pull storefront
docker compose up -d storefront

Aşama 10: Gözlemlenebilirlik ve Günlük İzleme (OpenObserve & Vector)

Sistem günlüklerini toplamak ve bellek/işlemci durumunu izlemek için Vector ve OpenObserve başlatılır.

Aşama 10 komutu:
bash
docker compose up -d openobserve vector cadvisor docker-stats-exporter

OpenObserve Merkezi Kontrol Paneli:

https://monitor.alanadiniz.com (Profil C), https://monitor.local (Profil B) veya http://<VM_IP>:5080 (Profil A) adresini açın. OpenObserve root kimlik bilgilerinizle giriş yapın.

Toplanan Telemetri ve Log Akışları:

docker_logs: Tüm mikro servisler için birleştirilmiş konteyner günlükleri ve anında hata arama imkanı.

caddy_access: Caddy JSON loglarından Vector aracılığıyla doğrudan aktarılan canlı HTTP web trafiği, IP adresleri, HTTP durum kodları (2xx/4xx/5xx) ve istek rotaları.

docker_stats: cAdvisor üzerinden konteyner başına gerçek zamanlı bellek kullanımı %, CPU % ve ağ G/Ç (I/O) verileri.

host_metrics: Sunucu genelinde CPU yükü, RAM kullanımı ve disk G/Ç metrikleri.

Telegram Anlık Hata Bildirimleri:

OpenObserve panelinde Reliability > Destinations yolunu izleyerek Telegram bot webhook'unuzu (https://api.telegram.org/bot<TOKEN>/sendMessage) bağlayın, ardından gerçek zamanlı uyarılar için Reliability > Alerts altında uyarı kuralları oluşturun.

6. Medusa ve Strapi Arasında İlk Veri Eşitlemesi

Medusa'daki ürünleri ve kategorileri okuyarak Strapi'de karşılık gelen blokları oluşturan otomatik senkronizasyon.

İlk Senkronizasyonu Çalıştırma:

Varsayılan ana sayfayı oluşturmak için Strapi konteynerinde aşağıdaki komutu yürütün:

2. Loomix Blok Bileşen Senkronizasyonu (sync-loom-component.js)

Strapi Storefront Management menüsünde, + Add to Storefront (Queue) veya Remove Style (Queue) butonlarına tıklamak bileşen değişikliklerini sync-history.json kuyruğuna ekler. Update Storefront butonuna tıklandığında ayar önayarları otomatik eşitlenir ve güncellenmiş mağaza arayüzünü derleyip dağıtmak üzere GitHub Actions tetiklenir.

Üretim Ortamı Senkronizasyon Değişkenleri:

Bu değişkenleri website-admin/.env ve sunucunun kök .env dosyasına ekleyin. Belirtecin 'repo' ve 'workflow' yetkilerine sahip olduğundan emin olun:

GitHub CI/CD Senkronizasyon Değişkenleri
env
GITHUB_DEPLOY_TOKEN=ghp_your_personal_access_token # Requires 'repo' and 'workflow' scopes
GITHUB_DEPLOY_REPO=your_username/your_repo_name

7. Dağıtım Profilleri Arasında Geçiş Yapma

Profil A'dan Profil B'ye geçmek veya alan adlarını değiştirmek için aşağıdaki adımları izleyin:

Değişiklik TürüYeniden Başlatılacak Servisler
.env dosyasındaki Genel URL'lerStrapi, Medusa, Storefront (önce GitHub Action derlemesini tetikleyin, ardından imajları çekin)
MEDUSA_ALLOW_HTTP_COOKIES ayarıYalnızca Medusa konteyneri
Caddy Ekleme (A'dan B'ye geçiş)Caddy'yi başlatın (docker compose up -d caddy) ve yeni imajları çekin
hosts dosyası (Profil B)Sunucuda hiçbir şey gerekmez — yalnızca yerel Windows hosts dosyasını düzenleyin
Profil Değiştirme Örneği
bash
# 1. Edit .env — switch to Profile B URLs, set MEDUSA_ALLOW_HTTP_COOKIES=false
nano .env
# 2. Add hosts entry on Windows
# 3. Start Caddy
docker compose up -d caddy
# 4. Pull new images:
docker compose pull strapi medusa && docker compose up -d strapi medusa

8. Servisleri En Son Sürüme Güncelleme

Veritabanındaki verileri kaybetmeden tüm konteynerleri güncellemek için server-update.sh betiğini çalıştırın.

9. Hızlı Yönetim ve Bakım Komutları

Günlükleri izlemek, servisleri yeniden başlatmak ve yedek almak için yararlı Docker komutları:

Periyodik Bakım Komutları:
bash
./setup.sh # On Linux / macOS
.\setup.bat # On Windows

10. Dahili Ağ ve Port Haritası

Servisler Arası Dahili Köprü Ağı (Internal Bridge Network):

  • Mağaza Arayüzü (Storefront): :8000
  • Medusa API + Yönetici: :9000
  • Strapi CMS: :1337
  • Meilisearch: :7700
  • MinIO Konsolu: :9001
  • Umami Analitik: :3005
  • OpenObserve İzleme: :5080

Caddy Tarafından İşlenen Alan Adları:

  • https://store.local -> storefront:8000
  • https://api.local -> medusa:9000
  • https://admin.local -> strapi:1337
  • https://analytics.local -> umami:3000
  • https://monitor.local -> openobserve:5080
  • https://api.local/minio/ -> minio:9000

İzole loomix-network Konteyner Ağı:

Konteynerler birbirleriyle standart servis adlarıyla haberleşir (örneğin http://storefront:8000, http://medusa:9000, http://meilisearch:7700). Meilisearch yalnızca dahili kullanıma açıktır ve asla dışarıya sunulmamalıdır.

Temel Yönetim Komutları Özeti

Tüm servislerin anlık günlüklerini izleyin:
bash
docker compose ps
Belirli bir servisi yeniden başlatın:
bash
docker compose logs -f medusa
docker compose logs -f strapi
docker compose logs -f storefront
docker compose logs -f openobserve
Tüm ekosistemi durdurun:
bash
docker builder prune -f
docker system prune -f
Tam Yeniden Başlatma (veritabanı hacimleri korunur)
bash
docker compose down
docker compose up -d