{"id":4530,"date":"2026-02-05T19:15:51","date_gmt":"2026-02-05T16:15:51","guid":{"rendered":"https:\/\/www.dchost.com\/blog\/kucuk-saas-uygulamalari-icin-docker-compose-ile-production-vps-mimarisi\/"},"modified":"2026-02-05T19:15:51","modified_gmt":"2026-02-05T16:15:51","slug":"kucuk-saas-uygulamalari-icin-docker-compose-ile-production-vps-mimarisi","status":"publish","type":"post","link":"https:\/\/www.dchost.com\/blog\/kucuk-saas-uygulamalari-icin-docker-compose-ile-production-vps-mimarisi\/","title":{"rendered":"K\u00fc\u00e7\u00fck SaaS Uygulamalar\u0131 \u0130\u00e7in Docker Compose ile Production VPS Mimarisi"},"content":{"rendered":"<div class=\"dchost-blog-content-wrapper\"><div id=\"toc_container\" class=\"toc_transparent no_bullets\"><p class=\"toc_title\">\u0130&ccedil;indekiler<\/p><ul class=\"toc_list\"><li><a href=\"#Neden_Kucuk_SaaS_Projeleri_Icin_Docker_Compose_Tek_VPS_Ikilisi_Cok_Mantikli\"><span class=\"toc_number toc_depth_1\">1<\/span> Neden K\u00fc\u00e7\u00fck SaaS Projeleri \u0130\u00e7in Docker Compose + Tek VPS \u0130kilisi \u00c7ok Mant\u0131kl\u0131?<\/a><\/li><li><a href=\"#Tek_VPS_Docker_Compose_Mimarisi_Ne_Zaman_Dogru_Secim\"><span class=\"toc_number toc_depth_1\">2<\/span> Tek VPS + Docker Compose Mimarisi Ne Zaman Do\u011fru Se\u00e7im?<\/a><ul><li><a href=\"#Bu_mimarinin_guclu_oldugu_senaryolar\"><span class=\"toc_number toc_depth_2\">2.1<\/span> Bu mimarinin g\u00fc\u00e7l\u00fc oldu\u011fu senaryolar<\/a><\/li><li><a href=\"#Artilari\"><span class=\"toc_number toc_depth_2\">2.2<\/span> Art\u0131lar\u0131<\/a><\/li><li><a href=\"#Sinirlari_ve_buyume_yolu\"><span class=\"toc_number toc_depth_2\">2.3<\/span> S\u0131n\u0131rlar\u0131 ve b\u00fcy\u00fcme yolu<\/a><\/li><\/ul><\/li><li><a href=\"#Production_Icin_Temel_Bilesenler_Hangi_Servisler_Olmali\"><span class=\"toc_number toc_depth_1\">3<\/span> Production \u0130\u00e7in Temel Bile\u015fenler: Hangi Servisler Olmal\u0131?<\/a><ul><li><a href=\"#Ornek_klasor_yapisi\"><span class=\"toc_number toc_depth_2\">3.1<\/span> \u00d6rnek klas\u00f6r yap\u0131s\u0131<\/a><\/li><\/ul><\/li><li><a href=\"#Ornek_Docker_Compose_Dosyasi_Parca_Parca_Inceleyelim\"><span class=\"toc_number toc_depth_1\">4<\/span> \u00d6rnek Docker Compose Dosyas\u0131: Par\u00e7a Par\u00e7a \u0130nceleyelim<\/a><ul><li><a href=\"#Temel_Compose_iskeleti\"><span class=\"toc_number toc_depth_2\">4.1<\/span> Temel Compose iskeleti<\/a><\/li><\/ul><\/li><li><a href=\"#Reverse_Proxy_ve_SSL_Otomasyonu_Nginx_ile_Uretim_Hazir_HTTPS\"><span class=\"toc_number toc_depth_1\">5<\/span> Reverse Proxy ve SSL Otomasyonu: Nginx ile \u00dcretim Haz\u0131r HTTPS<\/a><ul><li><a href=\"#Basit_Nginx_reverse_proxy_konfigurasyonu\"><span class=\"toc_number toc_depth_2\">5.1<\/span> Basit Nginx reverse proxy konfig\u00fcrasyonu<\/a><\/li><li><a href=\"#Lets_Encrypt_ile_otomatik_SSL_sertifikasi\"><span class=\"toc_number toc_depth_2\">5.2<\/span> Let\u2019s Encrypt ile otomatik SSL sertifikas\u0131<\/a><\/li><\/ul><\/li><li><a href=\"#env_Gizli_Anahtarlar_ve_Konfigurasyon_Yonetimi\"><span class=\"toc_number toc_depth_1\">6<\/span> .env, Gizli Anahtarlar ve Konfig\u00fcrasyon Y\u00f6netimi<\/a><ul><li><a href=\"#env_dosyasi_icin_temel_prensipler\"><span class=\"toc_number toc_depth_2\">6.1<\/span> .env dosyas\u0131 i\u00e7in temel prensipler<\/a><\/li><li><a href=\"#config-as-code_yaklasimi\"><span class=\"toc_number toc_depth_2\">6.2<\/span> config-as-code yakla\u015f\u0131m\u0131<\/a><\/li><\/ul><\/li><li><a href=\"#Veri_ve_Yedekleme_Sadece_Volume_Tutmak_Yedek_Degildir\"><span class=\"toc_number toc_depth_1\">7<\/span> Veri ve Yedekleme: Sadece Volume Tutmak Yedek De\u011fildir<\/a><ul><li><a href=\"#Ne_yedeklemelisiniz\"><span class=\"toc_number toc_depth_2\">7.1<\/span> Ne yedeklemelisiniz?<\/a><\/li><li><a href=\"#3-2-1_yedekleme_kuralini_SaaSe_uyarlamak\"><span class=\"toc_number toc_depth_2\">7.2<\/span> 3-2-1 yedekleme kural\u0131n\u0131 SaaS\u2019e uyarlamak<\/a><\/li><li><a href=\"#Basit_backup_konteyneri_ornegi\"><span class=\"toc_number toc_depth_2\">7.3<\/span> Basit backup konteyneri \u00f6rne\u011fi<\/a><\/li><li><a href=\"#Uzak_yedege_senkronizasyon\"><span class=\"toc_number toc_depth_2\">7.4<\/span> Uzak yede\u011fe senkronizasyon<\/a><\/li><\/ul><\/li><li><a href=\"#Guncelleme_Olceklendirme_ve_Operasyonel_Pratikler\"><span class=\"toc_number toc_depth_1\">8<\/span> G\u00fcncelleme, \u00d6l\u00e7eklendirme ve Operasyonel Pratikler<\/a><ul><li><a href=\"#Uygulamayi_guncellerken_kesintiyi_azaltmak\"><span class=\"toc_number toc_depth_2\">8.1<\/span> Uygulamay\u0131 g\u00fcncellerken kesintiyi azaltmak<\/a><\/li><li><a href=\"#Loglama_ve_izleme\"><span class=\"toc_number toc_depth_2\">8.2<\/span> Loglama ve izleme<\/a><\/li><li><a href=\"#Kaynak_planlama_ve_dikeycapraz_olceklendirme\"><span class=\"toc_number toc_depth_2\">8.3<\/span> Kaynak planlama ve dikey\/\u00e7apraz \u00f6l\u00e7eklendirme<\/a><\/li><\/ul><\/li><li><a href=\"#DCHost_Uzerinde_Bu_Mimarinin_Pratik_Avantajlari\"><span class=\"toc_number toc_depth_1\">9<\/span> DCHost \u00dczerinde Bu Mimarinin Pratik Avantajlar\u0131<\/a><\/li><li><a href=\"#Sonuc_Kucuk_SaaS_Icin_Fazla_Karmasaya_Girmeden_Uretim_Hazir_Mimari\"><span class=\"toc_number toc_depth_1\">10<\/span> Sonu\u00e7: K\u00fc\u00e7\u00fck SaaS \u0130\u00e7in Fazla Karma\u015faya Girmeden \u00dcretim Haz\u0131r Mimari<\/a><\/li><\/ul><\/div>\n<h2><span id=\"Neden_Kucuk_SaaS_Projeleri_Icin_Docker_Compose_Tek_VPS_Ikilisi_Cok_Mantikli\">Neden K\u00fc\u00e7\u00fck SaaS Projeleri \u0130\u00e7in Docker Compose + Tek <a href=\"https:\/\/www.dchost.com\/tr\/vps\">VPS<\/a> \u0130kilisi \u00c7ok Mant\u0131kl\u0131?<\/span><\/h2>\n<p>K\u00fc\u00e7\u00fck ama gelir \u00fcreten bir SaaS uygulamas\u0131 geli\u015ftiriyorsan\u0131z, ilk b\u00fcy\u00fck mimari kararlardan biri altyap\u0131 taraf\u0131nda geliyor: <a href=\"https:\/\/www.dchost.com\/tr\/web-hosting\">payla\u015f\u0131ml\u0131 hosting<\/a> yetersiz, Kubernetes fazla a\u011f\u0131r, \u00e7\u0131plak VPS ise manuel ayarlarla zaman yediriyor. Tam bu noktada <strong>Docker Compose + tek VPS<\/strong> yakla\u015f\u0131m\u0131, sade ama \u00fcretim i\u00e7in yeterince g\u00fc\u00e7l\u00fc bir orta yol sunuyor.<\/p>\n<p>Bu yaz\u0131da DCHost ekibi olarak, k\u00fc\u00e7\u00fck SaaS ve API projelerinde s\u0131k kulland\u0131\u011f\u0131m\u0131z, pratikte defalarca test etti\u011fimiz bir \u00fcretim mimarisini detayland\u0131raca\u011f\u0131z: <strong>Docker Compose ile tek VPS \u00fczerinde reverse proxy, otomatik SSL ve sa\u011flam bir yedekleme stratejisi<\/strong>. Ama\u00e7; hem geli\u015ftirici dostu, hem de uykunuzu ka\u00e7\u0131rmayacak kadar g\u00fcvenli ve tekrar \u00fcretilebilir bir yap\u0131 kurmak.<\/p>\n<p>E\u011fer hen\u00fcz Docker ile VPS taraf\u0131nda \u00e7ok ha\u015f\u0131r ne\u015fir de\u011filseniz, \u00f6nce <a href='https:\/\/www.dchost.com\/blog\/docker-ile-vpste-izole-uygulama-barindirma-adim-adim-rehber\/'>Docker ile VPS\u2019te izole uygulama bar\u0131nd\u0131rma rehberimize<\/a> g\u00f6z atman\u0131z faydal\u0131 olabilir. Bu yaz\u0131da ise do\u011frudan <strong>production odakl\u0131<\/strong> ilerleyece\u011fiz: domain y\u00f6nlendirmesi, HTTPS, .env y\u00f6netimi, veri saklama ve uzak yede\u011fe kadar tabloyu u\u00e7tan uca netle\u015ftirece\u011fiz.<\/p>\n<h2><span id=\"Tek_VPS_Docker_Compose_Mimarisi_Ne_Zaman_Dogru_Secim\">Tek VPS + Docker Compose Mimarisi Ne Zaman Do\u011fru Se\u00e7im?<\/span><\/h2>\n<p>K\u00fc\u00e7\u00fck SaaS\u2019ler i\u00e7in altyap\u0131 tasarlarken kritik soru \u015fudur: &#8220;\u015eu an neye ger\u00e7ekten ihtiyac\u0131m var ve 1\u20132 y\u0131l i\u00e7inde bu yap\u0131y\u0131 nereye evirece\u011fim?&#8221; Fazla karma\u015f\u0131k bir mimari, k\u00fc\u00e7\u00fck ekiplere gereksiz operasyonel y\u00fck bindirir; fazla basit yap\u0131 ise b\u00fcy\u00fcmede t\u0131kan\u0131r.<\/p>\n<h3><span id=\"Bu_mimarinin_guclu_oldugu_senaryolar\">Bu mimarinin g\u00fc\u00e7l\u00fc oldu\u011fu senaryolar<\/span><\/h3>\n<ul>\n<li><strong>Tek \u00fcr\u00fcn veya birka\u00e7 k\u00fc\u00e7\u00fck mikro \u00fcr\u00fcn:<\/strong> \u00d6rne\u011fin tek tenant\u2019l\u0131 ya da basit multi-tenant bir SaaS panosu.<\/li>\n<li><strong>Ayl\u0131k orta d\u00fczey trafik:<\/strong> Y\u00fczlerce \u2013 birka\u00e7 bin aktif kullan\u0131c\u0131, orta d\u00fczey API trafi\u011fi.<\/li>\n<li><strong>K\u00fc\u00e7\u00fck ekipler:<\/strong> 1\u20135 ki\u015filik \u00fcr\u00fcn ekipleri, ayr\u0131 bir DevOps tak\u0131m\u0131 olmayan yap\u0131lar.<\/li>\n<li><strong>H\u0131zl\u0131 MVP \u2192 \u00fcretim ge\u00e7i\u015fi:<\/strong> MVP\u2019yi \u00e7ok bozmadan, biraz sertle\u015ftirerek production\u2019a almak isteyenler.<\/li>\n<\/ul>\n<h3><span id=\"Artilari\">Art\u0131lar\u0131<\/span><\/h3>\n<ul>\n<li><strong>Basitlik:<\/strong> T\u00fcm servisler tek VPS \u00fczerinde, tek Docker Compose dosyas\u0131yla y\u00f6netilir.<\/li>\n<li><strong>Ta\u015f\u0131nabilirlik:<\/strong> \u0130htiya\u00e7 halinde ba\u015fka bir DCHost VPS\u2019ine ta\u015f\u0131ma; Compose dosyas\u0131 sayesinde olduk\u00e7a kolayd\u0131r.<\/li>\n<li><strong>\u015eeffaf maliyet:<\/strong> CPU, RAM, disk ve trafik t\u00fcketimini net g\u00f6r\u00fcrs\u00fcn\u00fcz; b\u00fcy\u00fcd\u00fck\u00e7e planl\u0131 y\u00fckseltebilirsiniz.<\/li>\n<li><strong>GitOps\u2019a yak\u0131n yap\u0131:<\/strong> Konfig\u00fcrasyonun b\u00fcy\u00fck b\u00f6l\u00fcm\u00fc kodla y\u00f6netildi\u011fi i\u00e7in versiyonlanabilir.<\/li>\n<\/ul>\n<h3><span id=\"Sinirlari_ve_buyume_yolu\">S\u0131n\u0131rlar\u0131 ve b\u00fcy\u00fcme yolu<\/span><\/h3>\n<p>Bu modelin s\u0131n\u0131rlar\u0131n\u0131 bilmek de \u00f6nemli:<\/p>\n<ul>\n<li>Y\u00fck \u00e7ok artt\u0131\u011f\u0131nda <strong>veritaban\u0131n\u0131 ayr\u0131 VPS\u2019e ay\u0131rma<\/strong> ihtiyac\u0131 do\u011far.<\/li>\n<li>Ger\u00e7ek y\u00fcksek eri\u015filebilirlik (HA) i\u00e7in tek VPS yeterli de\u011fildir; \u00e7oklu VPS ve replikasyon gerekir.<\/li>\n<li>A\u011f\u0131r arka plan i\u015f y\u00fckleri (queue, raporlama, video i\u015fleme vb.) i\u00e7in ek worker VPS\u2019leri mant\u0131kl\u0131 hale gelir.<\/li>\n<\/ul>\n<p>Bu noktada, <a href='https:\/\/www.dchost.com\/blog\/kucuk-saas-uygulamalari-icin-en-dogru-hosting-mimarisi-tek-vps-coklu-vps-ve-yonetilen-bulut\/'>k\u00fc\u00e7\u00fck SaaS uygulamalar\u0131 i\u00e7in tek VPS, \u00e7oklu VPS ve y\u00f6netilen bulut mimarilerini kar\u015f\u0131la\u015ft\u0131rd\u0131\u011f\u0131m\u0131z rehbere<\/a> de mutlaka g\u00f6z atman\u0131z\u0131 \u00f6neririz. Burada anlatt\u0131\u011f\u0131m\u0131z Compose mimarisi, o yol haritas\u0131n\u0131n ilk, en pratik basama\u011f\u0131d\u0131r.<\/p>\n<h2><span id=\"Production_Icin_Temel_Bilesenler_Hangi_Servisler_Olmali\">Production \u0130\u00e7in Temel Bile\u015fenler: Hangi Servisler Olmal\u0131?<\/span><\/h2>\n<p>Sa\u011flam bir Compose tabanl\u0131 \u00fcretim mimarisinde genelde \u015fu bile\u015fenler bulunur:<\/p>\n<ul>\n<li><strong>Reverse proxy:<\/strong> Nginx veya Traefik ile domain y\u00f6nlendirme, SSL terminasyonu.<\/li>\n<li><strong>Uygulama servisi:<\/strong> Laravel, Node.js, Django, Go veya benzeri backend konteyneri.<\/li>\n<li><strong>Veritaban\u0131:<\/strong> PostgreSQL veya MySQL\/MariaDB.<\/li>\n<li><strong>\u00d6nbellek ve queue:<\/strong> Redis (iste\u011fe ba\u011fl\u0131, ama \u00e7o\u011fu SaaS\u2019te \u00e7ok i\u015fe yar\u0131yor).<\/li>\n<li><strong>Arka plan i\u015f\u00e7ileri:<\/strong> Queue worker, cron job\u2019lar\u0131.<\/li>\n<li><strong>Yedekleme servisi:<\/strong> Veritaban\u0131 ve volume yedeklerini alan hafif bir container ya da host taraf\u0131 cron.<\/li>\n<\/ul>\n<h3><span id=\"Ornek_klasor_yapisi\">\u00d6rnek klas\u00f6r yap\u0131s\u0131<\/span><\/h3>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">\/srv\/saas-app\/\n  docker-compose.yml\n  docker-compose.override.yml (opsiyonel)\n  .env\n  nginx\/\n    default.conf\n  app\/\n    Dockerfile\n    src\/ (uygulama kodu)\n  backup\/\n    backup.sh\n<\/code><\/pre>\n<p>Bu yap\u0131 sayesinde hem uygulama kodu hem de altyap\u0131 tan\u0131m\u0131 tek bir repo veya dizin alt\u0131nda toplan\u0131r; yeni bir DCHost VPS\u2019ine ge\u00e7ti\u011finizde, b\u00fcy\u00fck oranda \u015fu \u00fc\u00e7 ad\u0131mla aya\u011fa kalkabilirsiniz: kodu \u00e7ek, .env\u2019i doldur, <code>docker compose up -d<\/code>.<\/p>\n<h2><span id=\"Ornek_Docker_Compose_Dosyasi_Parca_Parca_Inceleyelim\">\u00d6rnek Docker Compose Dosyas\u0131: Par\u00e7a Par\u00e7a \u0130nceleyelim<\/span><\/h2>\n<p>A\u015fa\u011f\u0131daki yap\u0131 ta\u015flar\u0131, sade ama production\u2019a olduk\u00e7a yak\u0131n bir iskelet sunuyor. Kendi teknoloji y\u0131\u011f\u0131n\u0131n\u0131za g\u00f6re imaj isimlerini ve environment de\u011fi\u015fkenlerini uyarlayabilirsiniz.<\/p>\n<h3><span id=\"Temel_Compose_iskeleti\">Temel Compose iskeleti<\/span><\/h3>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">version: '3.9'\n\nservices:\n  reverse-proxy:\n    image: nginx:stable-alpine\n    container_name: saas_reverse_proxy\n    volumes:\n      - .\/nginx\/default.conf:\/etc\/nginx\/conf.d\/default.conf:ro\n      - certs:\/etc\/letsencrypt\n      - certs-data:\/var\/lib\/letsencrypt\n    ports:\n      - '80:80'\n      - '443:443'\n    depends_on:\n      - app\n    networks:\n      - web\n\n  app:\n    build: .\/app\n    container_name: saas_app\n    env_file:\n      - .env\n    depends_on:\n      - db\n      - redis\n    networks:\n      - web\n      - internal\n\n  db:\n    image: postgres:16-alpine\n    container_name: saas_db\n    environment:\n      - POSTGRES_DB=${DB_NAME}\n      - POSTGRES_USER=${DB_USER}\n      - POSTGRES_PASSWORD=${DB_PASSWORD}\n    volumes:\n      - db-data:\/var\/lib\/postgresql\/data\n    networks:\n      - internal\n\n  redis:\n    image: redis:7-alpine\n    container_name: saas_redis\n    command: ['redis-server', '--appendonly', 'yes']\n    volumes:\n      - redis-data:\/data\n    networks:\n      - internal\n\n  backup:\n    build: .\/backup\n    container_name: saas_backup\n    env_file:\n      - .env\n    volumes:\n      - db-data:\/var\/lib\/postgresql\/data:ro\n      - backup-data:\/backups\n    networks:\n      - internal\n    restart: unless-stopped\n\nnetworks:\n  web:\n  internal:\n\nvolumes:\n  db-data:\n  redis-data:\n  certs:\n  certs-data:\n  backup-data:\n<\/code><\/pre>\n<p>Bu dosyada dikkat edilmesi gereken kritik noktalar:<\/p>\n<ul>\n<li><strong>\u0130ki ayr\u0131 network:<\/strong> <code>web<\/code> d\u0131\u015fa a\u00e7\u0131k reverse proxy\u2019nin konu\u015ftu\u011fu a\u011f; <code>internal<\/code> ise veritaban\u0131 ve Redis gibi i\u00e7 servisler i\u00e7in.<\/li>\n<li><strong>Named volume kullan\u0131m\u0131:<\/strong> Veritaban\u0131, Redis, sertifikalar ve yedekler i\u00e7in ayr\u0131 volume\u2019ler tan\u0131mlanm\u0131\u015f durumda.<\/li>\n<li><strong>backup servisi:<\/strong> Host taraf\u0131nda cron da kullan\u0131labilir; burada her \u015feyi Compose ile y\u00f6netmek isteyen ekipler i\u00e7in \u00f6rnek bir pattern g\u00f6steriyoruz.<\/li>\n<\/ul>\n<h2><span id=\"Reverse_Proxy_ve_SSL_Otomasyonu_Nginx_ile_Uretim_Hazir_HTTPS\">Reverse Proxy ve SSL Otomasyonu: Nginx ile \u00dcretim Haz\u0131r HTTPS<\/span><\/h2>\n<p>Docker Compose mimarisinde genelde iki pop\u00fcler yol g\u00f6r\u00fcrs\u00fcn\u00fcz: Nginx tabanl\u0131 bir reverse proxy + Let\u2019s Encrypt entegrasyonu veya Traefik\/Caddy gibi kendinden ACME destekli \u00e7\u00f6z\u00fcmler. DCHost taraf\u0131nda k\u00fc\u00e7\u00fck SaaS\u2019lerde s\u0131k\u00e7a <strong>Nginx + Let\u2019s Encrypt<\/strong> ikilisini tercih ediyoruz; hem davran\u0131\u015f\u0131 net, hem de gerekti\u011finde klasik Nginx konfig\u00fcrasyon bilgisinden faydalanabiliyorsunuz.<\/p>\n<h3><span id=\"Basit_Nginx_reverse_proxy_konfigurasyonu\">Basit Nginx reverse proxy konfig\u00fcrasyonu<\/span><\/h3>\n<p>\u00d6rnek bir <code>nginx\/default.conf<\/code> dosyas\u0131 \u015f\u00f6yle olabilir:<\/p>\n<pre class=\"language-nginx line-numbers\"><code class=\"language-nginx\">server {\n    listen 80;\n    server_name app.ornek-saas.com;\n\n    location \/.well-known\/acme-challenge\/ {\n        root \/var\/www\/certbot;\n    }\n\n    location \/ {\n        return 301 https:\/\/$host$request_uri;\n    }\n}\n\nserver {\n    listen 443 ssl http2;\n    server_name app.ornek-saas.com;\n\n    ssl_certificate     \/etc\/letsencrypt\/live\/app.ornek-saas.com\/fullchain.pem;\n    ssl_certificate_key \/etc\/letsencrypt\/live\/app.ornek-saas.com\/privkey.pem;\n\n    # Temel modern TLS ayarlar\u0131 (TLS 1.2+ ve g\u00fc\u00e7l\u00fc \u015fifre k\u00fcmeleri)\n\n    location \/ {\n        proxy_pass http:\/\/saas_app:8080;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto https;\n    }\n}\n<\/code><\/pre>\n<p>Burada:<\/p>\n<ul>\n<li><strong>HTTP \u2192 HTTPS y\u00f6nlendirme<\/strong> ile t\u00fcm trafi\u011fi g\u00fcvenli katmana zorluyoruz.<\/li>\n<li><strong>proxy_pass<\/strong> ile app servisine (i\u00e7 a\u011fda \u00e7al\u0131\u015fan) istekleri iletiyoruz.<\/li>\n<li>ACME challenge i\u00e7in <code>\/.well-known\/acme-challenge\/<\/code> path\u2019ini ay\u0131rd\u0131k; Certbot bu dizini kullanacak.<\/li>\n<\/ul>\n<h3><span id=\"Lets_Encrypt_ile_otomatik_SSL_sertifikasi\">Let\u2019s Encrypt ile otomatik <a href=\"https:\/\/www.dchost.com\/tr\/ssl\">SSL sertifikas\u0131<\/a><\/span><\/h3>\n<p>SSL sertifikalar\u0131n\u0131 manuel yenilemek production\u2019da s\u00fcrd\u00fcr\u00fclemez. Bu y\u00fczden Let\u2019s Encrypt + Certbot veya acme.sh gibi ara\u00e7larla <strong>otomatik yenileme<\/strong> kritik \u00f6nem ta\u015f\u0131yor. DCHost blogunda <a href='https:\/\/www.dchost.com\/blog\/ssl-sertifika-otomasyon-araclari-acme-panel-entegrasyonlari-ve-dns-01-stratejileri\/'>SSL sertifika otomasyonu ve ACME stratejilerini<\/a> detayland\u0131rd\u0131k; burada Compose senaryosuna uyarlayal\u0131m.<\/p>\n<p>Tipik yakla\u015f\u0131m:<\/p>\n<ol>\n<li>Nginx i\u00e7inde HTTP portu \u00fczerinden ACME challenge yan\u0131tlan\u0131r.<\/li>\n<li>Host taraf\u0131nda \u00e7al\u0131\u015fan bir Certbot cron job\u2019\u0131, sertifikalar\u0131 yeniler ve ilgili volume\u2019e yazar.<\/li>\n<li>Volume, reverse proxy konteynerine mount edilmi\u015ftir; Nginx sertifikalar\u0131 do\u011frudan bu volume\u2019den okur.<\/li>\n<\/ol>\n<p>Basit bir host cron girdisi \u00f6rne\u011fi:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">0 3 * * * docker run --rm \n  -v certs:\/etc\/letsencrypt \n  -v certs-data:\/var\/lib\/letsencrypt \n  certbot\/certbot renew --webroot -w \/var\/www\/certbot \n  &amp;&amp; docker exec saas_reverse_proxy nginx -s reload\n<\/code><\/pre>\n<p>B\u00f6ylece her gece saat 03:00\u2019te sertifikalar yenilenir, Nginx reload edilir ve hi\u00e7bir kesinti ya\u015famadan HTTPS g\u00fcncel kal\u0131r.<\/p>\n<h2><span id=\"env_Gizli_Anahtarlar_ve_Konfigurasyon_Yonetimi\">.env, Gizli Anahtarlar ve Konfig\u00fcrasyon Y\u00f6netimi<\/span><\/h2>\n<p>Docker Compose mimarisinde en s\u0131k yap\u0131lan hatalardan biri; gizli anahtarlar\u0131 do\u011frudan <code>docker-compose.yml<\/code> i\u00e7ine g\u00f6mmek veya repoya .env dosyas\u0131n\u0131 da dahil etmektir. Production ortam\u0131nda <strong>gizli anahtar y\u00f6netimi<\/strong> \u00e7ok daha dikkatli ele al\u0131nmal\u0131.<\/p>\n<h3><span id=\"env_dosyasi_icin_temel_prensipler\">.env dosyas\u0131 i\u00e7in temel prensipler<\/span><\/h3>\n<ul>\n<li><strong>.env hi\u00e7bir zaman VCS\u2019e (Git) commit edilmemeli.<\/strong><\/li>\n<li>Her ortam (staging, prod) i\u00e7in ayr\u0131 .env dosyan\u0131z olmal\u0131.<\/li>\n<li>DB parolalar\u0131, API anahtarlar\u0131, JWT secret, encryption key gibi de\u011ferler yaln\u0131zca .env i\u00e7inde tutulmal\u0131.<\/li>\n<\/ul>\n<p>Bu konuya daha derinlemesine girmek isterseniz, <a href='https:\/\/www.dchost.com\/blog\/vpste-env-ve-gizli-anahtar-yonetimi\/'>VPS\u2019te .env ve gizli anahtar y\u00f6netimi rehberimizde<\/a> ortam de\u011fi\u015fkeni, \u015fifreleme ve rotasyon pratiklerini ad\u0131m ad\u0131m anlatt\u0131k.<\/p>\n<h3><span id=\"config-as-code_yaklasimi\">config-as-code yakla\u015f\u0131m\u0131<\/span><\/h3>\n<p>.env dosyas\u0131 hari\u00e7 t\u00fcm Compose ve Nginx yap\u0131land\u0131rmalar\u0131n\u0131 Git ile takip etmek, hem geri d\u00f6n\u00fc\u015f\u00fc hem de yeni sunucuya ta\u015f\u0131may\u0131 inan\u0131lmaz kolayla\u015ft\u0131r\u0131r. \u00d6nerimiz:<\/p>\n<ul>\n<li><code>docker-compose.yml<\/code>, Nginx konfigleri, backup script\u2019leri, hatta sistemd unit dosyalar\u0131n\u0131z <strong>tek bir repoda<\/strong> olsun.<\/li>\n<li>Sunucuya da\u011f\u0131t\u0131m\u0131 isterseniz Git pull ile, isterseniz CI\/CD pipeline\u2019\u0131 ile yap\u0131n.<\/li>\n<\/ul>\n<p>DCHost blogunda <a href='https:\/\/www.dchost.com\/blog\/github-actions-ile-vpse-otomatik-deploy-ve-zero-downtime-yayin\/'>GitHub Actions ile VPS\u2019e otomatik deploy ve s\u0131f\u0131r kesinti yay\u0131n<\/a> mimarisini de anlatt\u0131k; Compose tabanl\u0131 bu yap\u0131y\u0131 oradaki stratejilerle kolayca birle\u015ftirebilirsiniz.<\/p>\n<h2><span id=\"Veri_ve_Yedekleme_Sadece_Volume_Tutmak_Yedek_Degildir\">Veri ve Yedekleme: Sadece Volume Tutmak Yedek De\u011fildir<\/span><\/h2>\n<p>Docker volume\u2019leri veriyi saklar ama <strong>yedek de\u011fildir<\/strong>. Sunucu taraf\u0131nda disk ar\u0131zas\u0131, yanl\u0131\u015fl\u0131kla volume silinmesi veya uygulama hatalar\u0131 sizi saniyeler i\u00e7inde t\u00fcm m\u00fc\u015fteri verisini kaybetme noktas\u0131na getirebilir. K\u00fc\u00e7\u00fck SaaS projelerinde de profesyonel yedekleme standartlar\u0131na uymak zorundas\u0131n\u0131z.<\/p>\n<h3><span id=\"Ne_yedeklemelisiniz\">Ne yedeklemelisiniz?<\/span><\/h3>\n<ul>\n<li><strong>Veritaban\u0131 dump\u2019\u0131:<\/strong> PostgreSQL i\u00e7in <code>pg_dump<\/code>, MySQL\/MariaDB i\u00e7in <code>mysqldump<\/code> veya XtraBackup.<\/li>\n<li><strong>Uygulama dosyalar\u0131:<\/strong> Kullan\u0131c\u0131 y\u00fcklemeleri (uploads), statik medya, rapor dosyalar\u0131 vb.<\/li>\n<li><strong>Konfig\u00fcrasyon:<\/strong> docker-compose.yml, Nginx konfigleri, .env\u2019in \u015fifreli bir kopyas\u0131.<\/li>\n<\/ul>\n<h3><span id=\"3-2-1_yedekleme_kuralini_SaaSe_uyarlamak\">3-2-1 yedekleme kural\u0131n\u0131 SaaS\u2019e uyarlamak<\/span><\/h3>\n<p>Klasik 3-2-1 kural\u0131:<\/p>\n<ul>\n<li>3 kopya (1 \u00fcretim, 2 yedek),<\/li>\n<li>2 farkl\u0131 ortam (\u00f6rne\u011fin disk + object storage),<\/li>\n<li>1 tanesi <strong>farkl\u0131 lokasyonda<\/strong> (farkl\u0131 veri merkezi veya offsite).<\/li>\n<\/ul>\n<p>Bunu Compose tabanl\u0131 k\u00fc\u00e7\u00fck SaaS\u2019te \u015f\u00f6yle uygulayabilirsiniz:<\/p>\n<ol>\n<li>G\u00fcnl\u00fck veritaban\u0131 dump\u2019\u0131 + uploads klas\u00f6r\u00fc, VPS i\u00e7inde ayr\u0131 bir volume\u2019e al\u0131n\u0131r.<\/li>\n<li>Her gece bu volume, object storage\u2019a (S3 uyumlu) veya ba\u015fka bir DCHost VPS\u2019ine senkronize edilir.<\/li>\n<li>Haftal\u0131k\/ayl\u0131k ar\u015fivler uzun s\u00fcreli saklama i\u00e7in tutulur.<\/li>\n<\/ol>\n<p>3-2-1 kural\u0131n\u0131 detayland\u0131rd\u0131\u011f\u0131m\u0131z <a href='https:\/\/www.dchost.com\/blog\/3-2-1-yedekleme-stratejisi-neden-ise-yariyor-cpanel-plesk-ve-vpste-otomatik-yedekleri-nasil-kurarsin\/'>3-2-1 yedekleme stratejisi rehberinde<\/a> de, VPS ortam\u0131na \u00f6zel pratik \u00f6neriler bulabilirsiniz.<\/p>\n<h3><span id=\"Basit_backup_konteyneri_ornegi\">Basit backup konteyneri \u00f6rne\u011fi<\/span><\/h3>\n<p>\u00d6rne\u011fin PostgreSQL kullanan k\u00fc\u00e7\u00fck bir SaaS\u2019te, her gece \u00e7al\u0131\u015fan bir backup script\u2019i \u015f\u00f6yle g\u00f6r\u00fcnebilir:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">#!\/bin\/sh\nset -e\n\nDATE=$(date +&quot;%Y-%m-%d_%H-%M&quot;)\nBACKUP_DIR=\/backups\n\npg_dump -h saas_db -U &quot;$DB_USER&quot; &quot;$DB_NAME&quot; \n  | gzip &gt; &quot;$BACKUP_DIR\/db_${DATE}.sql.gz&quot;\n\n# Eski yedekleri 14 g\u00fcnden sonra sil\nfind &quot;$BACKUP_DIR&quot; -type f -mtime +14 -delete\n<\/code><\/pre>\n<p>Bu script\u2019i backup konteynerinizin i\u00e7ine koyabilir, container i\u00e7inde cron ile tetikleyebilir veya host taraf\u0131nda <code>docker exec saas_backup \/backup\/backup.sh<\/code> komutunu cron\u2019dan \u00e7a\u011f\u0131rabilirsiniz.<\/p>\n<h3><span id=\"Uzak_yedege_senkronizasyon\">Uzak yede\u011fe senkronizasyon<\/span><\/h3>\n<p>Yedekleri VPS i\u00e7inde tutmak tek ba\u015f\u0131na yeterli de\u011fildir. \u00c7ok basit bir senaryoda bile <code>rsync<\/code> veya <code>rclone<\/code> ile yedek klas\u00f6r\u00fcn\u00fc object storage\u2019a ya da farkl\u0131 bir DCHost VPS\u2019ine kopyalayabilirsiniz. Geli\u015fmi\u015f senaryolar i\u00e7in <a href='https:\/\/www.dchost.com\/blog\/restic-ve-borg-ile-s3-uyumlu-uzak-yedekleme-surumleme-sifreleme-ve-saklama-ne-zaman-nasil\/'>Restic ve Borg ile S3 uyumlu uzak yedekleme rehberimizde<\/a> s\u00fcr\u00fcmleme, \u015fifreleme ve saklama politikalar\u0131n\u0131 ad\u0131m ad\u0131m anlatt\u0131k.<\/p>\n<h2><span id=\"Guncelleme_Olceklendirme_ve_Operasyonel_Pratikler\">G\u00fcncelleme, \u00d6l\u00e7eklendirme ve Operasyonel Pratikler<\/span><\/h2>\n<p>Production ortamda Compose kullan\u0131rken sadece &#8220;\u00e7al\u0131\u015f\u0131yor mu?&#8221; de\u011fil, &#8220;g\u00fcncelleme yaparken kesinti olacak m\u0131, loglar\u0131 nas\u0131l takip edece\u011fim, \u00f6l\u00e7eklendirme sinyallerini nas\u0131l okuyaca\u011f\u0131m?&#8221; sorular\u0131na da net cevap vermeniz gerekir.<\/p>\n<h3><span id=\"Uygulamayi_guncellerken_kesintiyi_azaltmak\">Uygulamay\u0131 g\u00fcncellerken kesintiyi azaltmak<\/span><\/h3>\n<ul>\n<li><strong>Immutuable imaj yakla\u015f\u0131m\u0131:<\/strong> Her s\u00fcr\u00fcm i\u00e7in farkl\u0131 tag kullan\u0131n (\u00f6rnek: <code>my-saas:1.3.0<\/code>). B\u00f6ylece rollback \u00e7ok daha temiz olur.<\/li>\n<li><strong>healthcheck kullan\u0131n:<\/strong> Compose i\u00e7inde <code>healthcheck<\/code> tan\u0131mlayarak container sa\u011fl\u0131kl\u0131 olmadan trafi\u011fi y\u00f6nlendirmeyin.<\/li>\n<li><strong>Rolling benzeri yakla\u015f\u0131m:<\/strong> K\u00fc\u00e7\u00fck SaaS\u2019lerde \u00e7o\u011fu zaman k\u0131sa bir yeniden ba\u015flatma kabul edilebilir; ama veritaban\u0131 migrasyonlar\u0131n\u0131 \u00f6nce, kodu sonra g\u00fcncellemek gibi basit stratejilerle kesintiyi saniyelere indirebilirsiniz.<\/li>\n<\/ul>\n<h3><span id=\"Loglama_ve_izleme\">Loglama ve izleme<\/span><\/h3>\n<p>\u0130lk a\u015famada Docker\u2019\u0131n kendi log sistemi i\u015f g\u00f6rebilir:<\/p>\n<ul>\n<li><code>docker logs -f saas_app<\/code> ile canl\u0131 log takibi,<\/li>\n<li><code>docker compose logs --tail=200<\/code> ile son loglara bakma.<\/li>\n<\/ul>\n<p>Biraz b\u00fcy\u00fcd\u00fc\u011f\u00fcn\u00fczde merkezi loglama (\u00f6rne\u011fin Grafana Loki + Promtail) ve metrik izleme (Prometheus + Grafana) g\u00f6rmek isteyeceksiniz. Bunun i\u00e7in <a href='https:\/\/www.dchost.com\/blog\/vps-kaynak-kullanimi-izleme-rehberi-htop-iotop-netdata-ve-prometheus\/'>VPS kaynak kullan\u0131m\u0131 izleme rehberimiz<\/a> iyi bir ba\u015flang\u0131\u00e7 noktas\u0131 olabilir.<\/p>\n<h3><span id=\"Kaynak_planlama_ve_dikeycapraz_olceklendirme\">Kaynak planlama ve dikey\/\u00e7apraz \u00f6l\u00e7eklendirme<\/span><\/h3>\n<p>Tek VPS + Compose modelinde ilk \u00f6l\u00e7eklendirme ad\u0131m\u0131 \u00e7o\u011funlukla <strong>dikey \u00f6l\u00e7ekleme<\/strong>dir: DCHost \u00fczerindeki VPS plan\u0131n\u0131z\u0131 daha fazla vCPU, RAM veya NVMe disk i\u00e7erecek \u015fekilde y\u00fckseltmek. Yine de, mimariyi kurarken \u015funlar\u0131 akl\u0131n\u0131zda tutun:<\/p>\n<ul>\n<li>Veritaban\u0131 ile uygulamay\u0131 a\u011f \u00fczerinden konu\u015fan ayr\u0131 servisler olarak tasarlad\u0131\u011f\u0131n\u0131z i\u00e7in, ileride veritaban\u0131n\u0131 ayr\u0131 bir VPS\u2019e ta\u015f\u0131mak g\u00f6rece kolay olur.<\/li>\n<li>Queue ve arka plan i\u015flerini ayr\u0131 bir container\u2019a koyarsan\u0131z, yo\u011fun d\u00f6nemlerde bu container\u2019\u0131 \u00e7o\u011faltmak (scale) daha kolayd\u0131r.<\/li>\n<li>Reverse proxy\u2019yi hafif tutar, m\u00fcmk\u00fcn oldu\u011funca statik dosyalar\u0131 CDN\u2019e aktar\u0131rsan\u0131z, tek VPS uzun s\u00fcre i\u015f g\u00f6r\u00fcr.<\/li>\n<\/ul>\n<h2><span id=\"DCHost_Uzerinde_Bu_Mimarinin_Pratik_Avantajlari\">DCHost \u00dczerinde Bu Mimarinin Pratik Avantajlar\u0131<\/span><\/h2>\n<p>DCHost olarak NVMe diskli, h\u0131zl\u0131 a\u011f ba\u011flant\u0131l\u0131 ve T\u00fcrkiye\/Avrupa lokasyon se\u00e7enekli VPS altyap\u0131m\u0131z\u0131 \u00f6zellikle <strong>k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli SaaS projeleri<\/strong> d\u00fc\u015f\u00fcn\u00fclerek tasarl\u0131yoruz. Compose tabanl\u0131 bu mimariyi DCHost \u00fczerinde kurdu\u011funuzda:<\/p>\n<ul>\n<li>Y\u00fck artt\u0131\u011f\u0131nda CPU\/RAM y\u00fckseltmeyi minimum kesinti ile yapabilirsiniz.<\/li>\n<li>Gerekti\u011finde ayn\u0131 veri merkezinde ikinci bir VPS a\u00e7\u0131p veritaban\u0131n\u0131 ay\u0131rarak bir \u00fcst seviyeye ge\u00e7ebilirsiniz.<\/li>\n<li>Yedekleri ayn\u0131 b\u00f6lgede ya da farkl\u0131 b\u00f6lgede tutarak felaket senaryolar\u0131na kar\u015f\u0131 koruma sa\u011flayabilirsiniz.<\/li>\n<\/ul>\n<p>Altyap\u0131 taraf\u0131nda ilk kurulumu kendiniz yapmak istemezseniz, Compose dosyalar\u0131n\u0131z\u0131 ve gereksinimlerinizi bizimle payla\u015f\u0131p, DCHost ekibiyle birlikte mimariyi g\u00f6zden ge\u00e7irerek \u00fcretim ortam\u0131n\u0131z\u0131 \u00e7ok daha sa\u011flam \u015fekilde aya\u011fa kald\u0131rabilirsiniz.<\/p>\n<h2><span id=\"Sonuc_Kucuk_SaaS_Icin_Fazla_Karmasaya_Girmeden_Uretim_Hazir_Mimari\">Sonu\u00e7: K\u00fc\u00e7\u00fck SaaS \u0130\u00e7in Fazla Karma\u015faya Girmeden \u00dcretim Haz\u0131r Mimari<\/span><\/h2>\n<p>K\u00fc\u00e7\u00fck SaaS projeleri i\u00e7in as\u0131l hedef; m\u00fc\u015fteri de\u011ferini h\u0131zl\u0131 \u00fcretirken altyap\u0131y\u0131 da <strong>\u00f6l\u00e7eklenebilir, tekrar \u00fcretilebilir ve g\u00fcvenli<\/strong> tutmakt\u0131r. Tek VPS \u00fczerinde Docker Compose ile kurdu\u011fumuz mimari tam da bu dengeyi yakalar: Reverse proxy ile domain ve HTTPS y\u00f6netimi, Compose servisleriyle uygulama\/veritaban\u0131\/Redis izolasyonu, otomatik SSL ve 3-2-1 uyumlu yedekleme stratejisi ile beklenmedik sorunlara kar\u015f\u0131 koruma.<\/p>\n<p>Buradan sonra atabilece\u011finiz ad\u0131mlar net:<\/p>\n<ul>\n<li>Mevcut veya yeni DCHost VPS\u2019inizde bu yaz\u0131daki klas\u00f6r ve Compose iskeletini kurun.<\/li>\n<li>.env, Nginx ve backup script\u2019lerini kendi SaaS\u2019inize g\u00f6re uyarlay\u0131n.<\/li>\n<li>Yedeklerin ger\u00e7ekten \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6rmek i\u00e7in en az bir kez geri y\u00fckleme testi yap\u0131n.<\/li>\n<\/ul>\n<p>E\u011fer &#8220;Uygulamam b\u00fcy\u00fcrse bu setup nerelere kadar ta\u015f\u0131r, ne zaman ikinci VPS\u2019e ge\u00e7meliyim, ne zaman veritaban\u0131n\u0131 ay\u0131rmal\u0131y\u0131m?&#8221; gibi sorular\u0131n\u0131z varsa, <a href='https:\/\/www.dchost.com\/blog\/kucuk-saas-uygulamalari-icin-en-dogru-hosting-mimarisi-tek-vps-coklu-vps-ve-yonetilen-bulut\/'>k\u00fc\u00e7\u00fck SaaS\u2019ler i\u00e7in hosting mimarisi rehberimizde<\/a> bu yol haritas\u0131n\u0131 detayland\u0131rd\u0131k. Projenizin gereksinimlerine \u00f6zel de\u011ferlendirme yapmak isterseniz, DCHost ekibiyle ileti\u015fime ge\u00e7erek VPS se\u00e7enekleri, yedekleme topolojisi ve g\u00fcvenlik sertle\u015ftirme ad\u0131mlar\u0131n\u0131 birlikte netle\u015ftirebiliriz.<\/p>\n<p>Do\u011fru kurgulanm\u0131\u015f bir Docker Compose + VPS mimarisiyle, altyap\u0131 yang\u0131nlar\u0131yla u\u011fra\u015fmak yerine enerjinizi \u00fcr\u00fcn\u00fcn\u00fcz\u00fc b\u00fcy\u00fctmeye ay\u0131rabilirsiniz. Geri kalan\u0131n\u0131 DCHost altyap\u0131s\u0131na ve iyi tasarlanm\u0131\u015f otomasyonlara b\u0131rak\u0131n.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>\u0130&ccedil;indekiler1 Neden K\u00fc\u00e7\u00fck SaaS Projeleri \u0130\u00e7in Docker Compose + Tek VPS \u0130kilisi \u00c7ok Mant\u0131kl\u0131?2 Tek VPS + Docker Compose Mimarisi Ne Zaman Do\u011fru Se\u00e7im?2.1 Bu mimarinin g\u00fc\u00e7l\u00fc oldu\u011fu senaryolar2.2 Art\u0131lar\u01312.3 S\u0131n\u0131rlar\u0131 ve b\u00fcy\u00fcme yolu3 Production \u0130\u00e7in Temel Bile\u015fenler: Hangi Servisler Olmal\u0131?3.1 \u00d6rnek klas\u00f6r yap\u0131s\u01314 \u00d6rnek Docker Compose Dosyas\u0131: Par\u00e7a Par\u00e7a \u0130nceleyelim4.1 Temel Compose iskeleti5 Reverse [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4531,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-4530","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-teknoloji"],"_links":{"self":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/4530","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/comments?post=4530"}],"version-history":[{"count":0,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/4530\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media\/4531"}],"wp:attachment":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media?parent=4530"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/categories?post=4530"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/tags?post=4530"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}