{"id":34665,"date":"2025-11-20T11:31:21","date_gmt":"2025-11-20T08:31:21","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/"},"modified":"2025-11-20T11:31:21","modified_gmt":"2025-11-20T08:31:21","slug":"going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/","title":{"rendered":"Going Live: Su Kalitesi ML API&#8217;mi Buluta 5 Dakikada Nas\u0131l Da\u011f\u0131tt\u0131m?"},"content":{"rendered":"<p>Su kalitesi verilerini yapay zeka ile analiz edip ger\u00e7ek zamanl\u0131 kararlar almak hi\u00e7 bu kadar kolay olmam\u0131\u015ft\u0131. Makine \u00f6\u011frenimi API&#8217;nizi buluta saniyeler i\u00e7inde da\u011f\u0131t\u0131n ve projelerinize h\u0131z kat\u0131n.<\/p>\n<p>G\u00fcn\u00fcm\u00fczde \u00e7evre sorunlar\u0131 ve halk sa\u011fl\u0131\u011f\u0131 endi\u015feleri, su kalitesi izlemeyi her zamankinden daha kritik hale getiriyor. Geleneksel y\u00f6ntemlerle, su \u00f6rneklerinin laboratuvarlarda analiz edilmesi zaman al\u0131c\u0131 ve maliyetli bir s\u00fcre\u00e7tir. Bu gecikmeler, kirlilik tespitinde veya su kaynaklar\u0131n\u0131n y\u00f6netilmesinde hayati kararlar\u0131n al\u0131nmas\u0131n\u0131 zorla\u015ft\u0131rabilir. Peki, bu soruna yapay zeka destekli, h\u0131zl\u0131 ve \u00f6l\u00e7eklenebilir bir \u00e7\u00f6z\u00fcm bulmak m\u00fcmk\u00fcn m\u00fc? Kesinlikle evet! Makine \u00f6\u011frenimi (ML) modelleri sayesinde, su kalitesi verilerini anl\u0131k olarak analiz edebilir, olas\u0131 sorunlar\u0131 h\u0131zla tespit edebilir ve hatta gelecekteki e\u011filimleri tahmin edebiliriz. Ancak bu g\u00fc\u00e7l\u00fc modelleri ger\u00e7ek d\u00fcnyada faydal\u0131 hale getirmek i\u00e7in, onlara eri\u015filebilir bir aray\u00fcz sunmam\u0131z ve bulut ortam\u0131nda verimli bir \u015fekilde \u00e7al\u0131\u015ft\u0131rmam\u0131z gerekiyor.<\/p>\n<p>\u0130\u015fte tam bu noktada, bir Makine \u00d6\u011frenimi API&#8217;sinin buluta da\u011f\u0131t\u0131m\u0131 devreye giriyor. Bir API (Uygulama Programlama Aray\u00fcz\u00fc) ile ML modelinizi bir web servisi olarak sunabilir, b\u00f6ylece di\u011fer uygulamalar (mobil uygulamalar, web siteleri, otomasyon sistemleri) modelinizle kolayca etkile\u015fime ge\u00e7ebilir. Bulut platformlar\u0131 ise bu API&#8217;yi y\u00fcksek eri\u015filebilirlik, \u00f6l\u00e7eklenebilirlik ve uygun maliyetle \u00e7al\u0131\u015ft\u0131rman\u0131n en etkili yolunu sunar. Bu makalede, bir su kalitesi ML modelini al\u0131p, Flask ile bir API&#8217;ye d\u00f6n\u00fc\u015ft\u00fcrmeyi, Docker ile paketlemeyi ve sonunda Azure gibi bir bulut platformuna sadece birka\u00e7 dakikada nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. Amac\u0131m\u0131z, karma\u015f\u0131k g\u00f6r\u00fcnen bu s\u00fcreci basitle\u015ftirmek ve projenizi &#8220;canl\u0131ya&#8221; alman\u0131n ne kadar h\u0131zl\u0131 ve eri\u015filebilir oldu\u011funu g\u00f6stermek. Art\u0131k manuel kontrollerle zaman kaybetmek yerine, veriye dayal\u0131, ak\u0131ll\u0131 ve anl\u0131k kararlar alabiliriz. Haz\u0131rsan\u0131z, suyun gelece\u011fini \u015fekillendirmeye ba\u015flayal\u0131m!<\/p>\n<h2 id=\"temel-ta\u015flar-su-kalitesi-ml-api-nedir-ve-neden-\u00f6nemlidir\">Temel Ta\u015flar: Su Kalitesi ML API Nedir ve Neden \u00d6nemlidir?<\/h2>\n<p>Makine \u00f6\u011frenimi projelerinin laboratuvar ortam\u0131ndan \u00e7\u0131k\u0131p ger\u00e7ek d\u00fcnya problemlerine \u00e7\u00f6z\u00fcm sunabilmesi i\u00e7in eri\u015filebilir olmas\u0131 esast\u0131r. \u0130\u015fte bu eri\u015filebilirli\u011fi sa\u011flayan temel yap\u0131 ta\u015flar\u0131: ML modelleri, API&#8217;ler ve bulut bili\u015fim. \u00d6ncelikle, &#8220;Su Kalitesi ML API&#8221; terimini biraz daha a\u00e7al\u0131m. Basit\u00e7e ifade etmek gerekirse, bu, su numunelerine ait \u00e7e\u015fitli parametreleri (pH, iletkenlik, \u00e7\u00f6z\u00fcnm\u00fc\u015f oksijen, bulan\u0131kl\u0131k, s\u0131cakl\u0131k vb.) girdi olarak alan ve belirli bir su kalitesi \u00f6l\u00e7\u00fct\u00fcn\u00fc (\u00f6rne\u011fin, i\u00e7ilebilir olup olmad\u0131\u011f\u0131, kirlilik seviyesi, belirli bir hastal\u0131\u011fa yol a\u00e7ma potansiyeli) tahmin eden bir makine \u00f6\u011frenimi modelini bir web servisi arac\u0131l\u0131\u011f\u0131yla sunan bir aray\u00fczd\u00fcr. Bu aray\u00fcz, genellikle HTTP protokol\u00fc \u00fczerinden \u00e7al\u0131\u015f\u0131r ve JSON format\u0131nda veri al\u0131\u015fveri\u015fi yapar. Di\u011fer sistemler, bu API&#8217;ye belirli parametrelerle bir istek g\u00f6ndererek modelin tahmin sonucunu alabilirler.<\/p>\n<p>Peki, bu neden bu kadar \u00f6nemli? Bir vaka analizi ile a\u00e7\u0131klayal\u0131m: T\u00fcrkiye&#8217;nin \u00f6nemli \u015fehirlerinden biri olan \u0130zmir&#8217;deki B\u00fcy\u00fck\u015fehir Belediyesi Su ve Kanalizasyon \u0130daresi (\u0130ZSU), \u015fehrin i\u00e7me suyu kaynaklar\u0131n\u0131 ve ar\u0131tma tesislerinden \u00e7\u0131kan suyu s\u00fcrekli olarak izlemekle y\u00fck\u00fcml\u00fc. Geleneksel y\u00f6ntemlerle, su kalitesi testleri \u00f6rneklerin toplanmas\u0131n\u0131, laboratuvara ta\u015f\u0131nmas\u0131n\u0131 ve g\u00fcnlerce s\u00fcren analizleri gerektiriyordu. Bu durum, ani bir kirlilik vakas\u0131nda veya mevsimsel de\u011fi\u015fikliklerde h\u0131zl\u0131 tepki verme yeteneklerini s\u0131n\u0131rl\u0131yordu. \u0130\u015fte burada bir Su Kalitesi ML API&#8217;si devreye giriyor. \u0130ZSU, sens\u00f6rlerden gelen anl\u0131k pH, ORP, iletkenlik, s\u0131cakl\u0131k gibi verileri bu API&#8217;ye g\u00f6ndererek, suyun i\u00e7ilebilirlik durumunu veya kirlilik riskini saniyeler i\u00e7inde tahmin edebilir. Bu sayede, potansiyel bir sorunu erken a\u015famada tespit edebilir, halk\u0131 bilgilendirebilir ve gerekli \u00f6nlemleri h\u0131zla alabilirler. Ayr\u0131ca, API sayesinde elde edilen tahminler, su ar\u0131tma s\u00fcre\u00e7lerinin optimizasyonu i\u00e7in de kullan\u0131labilir, b\u00f6ylece enerji ve kimyasal t\u00fcketimi azalt\u0131labilir.<\/p>\n<p>Bu yakla\u015f\u0131m\u0131n temel avantajlar\u0131 \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>H\u0131z ve Ger\u00e7ek Zamanl\u0131l\u0131k:<\/strong> Karar verme s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r, anl\u0131k tehditlere kar\u015f\u0131 erken uyar\u0131 mekanizmalar\u0131 olu\u015fturur.<\/li>\n<li><strong>\u00d6l\u00e7eklenebilirlik:<\/strong> Bulut platformlar\u0131 sayesinde, istek say\u0131s\u0131 artt\u0131\u011f\u0131nda API otomatik olarak \u00f6l\u00e7eklenebilir, performans d\u00fc\u015f\u00fc\u015f\u00fc ya\u015fanmaz.<\/li>\n<li><strong>Eri\u015filebilirlik:<\/strong> Geli\u015ftiricilerin ML modeline kolayca entegre olmas\u0131n\u0131 sa\u011flar, farkl\u0131 uygulamalardan (mobil, web, IoT) eri\u015fime olanak tan\u0131r.<\/li>\n<li><strong>Maliyet Etkinli\u011fi:<\/strong> Bulutun kulland\u0131k\u00e7a \u00f6de modeli, donan\u0131m yat\u0131r\u0131m\u0131 yapmadan g\u00fc\u00e7l\u00fc bir altyap\u0131 kullanma imkan\u0131 sunar.<\/li>\n<li><strong>Otomasyon:<\/strong> Su kalitesi izleme ve raporlama s\u00fcre\u00e7lerini otomatikle\u015ftirir, insan hatas\u0131n\u0131 minimize eder.<\/li>\n<\/ul>\n<p>Bu temel bile\u015fenleri anlad\u0131\u011f\u0131m\u0131za g\u00f6re, \u015fimdi ML modelimizi ve API&#8217;mizi nas\u0131l haz\u0131rlayaca\u011f\u0131m\u0131za ge\u00e7ebiliriz.<\/p>\n<aside class=\"expert-tip\" style=\"background-color: #e0f7fa; border-left: 5px solid #00bcd4; padding: 15px; margin: 20px 0; border-radius: 5px;\">\n<h3>Uzman \u0130pucu: Neden RESTful API?<\/h3>\n<p>ML modellerini sunmak i\u00e7in genellikle RESTful API&#8217;ler tercih edilir. Bunun sebebi, basitlikleri, durumsuz yap\u0131lar\u0131 ve \u00e7e\u015fitli istemciler (web taray\u0131c\u0131lar\u0131, mobil uygulamalar, IoT cihazlar\u0131) taraf\u0131ndan kolayca t\u00fcketilebilir olmalar\u0131d\u0131r. HTTP metodlar\u0131 (GET, POST, PUT, DELETE) ve kaynak odakl\u0131 URI&#8217;ler sayesinde anla\u015f\u0131lmas\u0131 ve y\u00f6netilmesi kolay servisler olu\u015fturabilirsiniz.<\/p>\n<\/aside>\n<h2 id=\"haz\u0131rl\u0131k-a\u015famas\u0131-ml-modelimizi-ve-apimizi-nas\u0131l-olu\u015ftururuz\">Haz\u0131rl\u0131k A\u015famas\u0131: ML Modelimizi ve API&#8217;mizi Nas\u0131l Olu\u015ftururuz?<\/h2>\n<p>Buluta da\u011f\u0131t\u0131m yapmadan \u00f6nce, kalbinde makine \u00f6\u011frenimi modelinizin oldu\u011fu bir API olu\u015fturmam\u0131z gerekiyor. Bu b\u00f6l\u00fcmde, su kalitesi verilerini tahmin edecek basit bir ML modelini nas\u0131l e\u011fitece\u011finizi ve Flask mikro web \u00e7er\u00e7evesini kullanarak bu modeli bir RESTful API arac\u0131l\u0131\u011f\u0131yla nas\u0131l sunaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ele alaca\u011f\u0131z.<\/p>\n<h3>Veri Seti ve Model Se\u00e7imi: Su Kalitesi Tahmini \u0130\u00e7in \u0130lk Ad\u0131mlar<\/h3>\n<p>Su kalitesi tahmini i\u00e7in genellikle pH, iletkenlik, \u00e7\u00f6z\u00fcnm\u00fc\u015f oksijen, bulan\u0131kl\u0131k, klor seviyesi, s\u0131cakl\u0131k gibi parametreleri i\u00e7eren veri setleri kullan\u0131l\u0131r. Bu makale i\u00e7in, elimizde b\u00f6yle bir veri setinin oldu\u011funu ve &#8220;i\u00e7ilebilir&#8221; veya &#8220;i\u00e7ilemez&#8221; gibi ikili bir s\u0131n\u0131fland\u0131rma tahmini yapaca\u011f\u0131m\u0131z\u0131 varsayal\u0131m. Python&#8217;da scikit-learn k\u00fct\u00fcphanesi ile basit bir model olu\u015ftural\u0131m. Random Forest Classifier, bu t\u00fcr g\u00f6revler i\u00e7in olduk\u00e7a pop\u00fcler ve etkili bir se\u00e7enektir.<\/p>\n<p>\u0130lk olarak, ML modelimizi e\u011fitelim ve daha sonra da\u011f\u0131t\u0131m i\u00e7in kaydedelim. Bir <code>model.pkl<\/code> dosyas\u0131na kaydedece\u011fiz. A\u015fa\u011f\u0131daki kod blo\u011fu, bu s\u00fcreci basitle\u015ftirilmi\u015f bir \u015fekilde g\u00f6stermektedir:<\/p>\n<pre><code class=\"language-python\">\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.ensemble import RandomForestClassifier\nimport joblib\n\n# \u00d6rnek bir veri seti olu\u015ftural\u0131m\n# Ger\u00e7ek senaryoda bu veriler sens\u00f6rlerden veya mevcut veritabanlar\u0131ndan gelecektir.\ndata = {\n    'ph': [7.5, 6.8, 8.1, 7.0, 6.5, 7.8, 7.2, 6.9, 8.0, 7.1],\n    'hardness': [180, 160, 200, 175, 150, 190, 185, 165, 195, 170],\n    'solids': [20000, 15000, 25000, 18000, 12000, 22000, 21000, 16000, 24000, 19000],\n    'chloramines': [7.0, 6.5, 7.8, 6.8, 6.0, 7.5, 7.1, 6.6, 7.7, 6.9],\n    'sulfate': [350, 320, 380, 330, 310, 360, 340, 325, 370, 335],\n    'conductivity': [400, 350, 450, 380, 320, 420, 410, 360, 440, 390],\n    'organic_carbon': [15.0, 12.0, 18.0, 13.0, 10.0, 16.0, 14.0, 11.0, 17.0, 12.5],\n    'trihalomethanes': [70, 60, 80, 65, 55, 75, 72, 62, 78, 68],\n    'turbidity': [4.0, 3.0, 5.0, 3.5, 2.5, 4.5, 4.2, 3.2, 4.8, 3.8],\n    'potability': [1, 1, 0, 1, 1, 0, 1, 1, 0, 1] # 1: \u0130\u00e7ilebilir, 0: \u0130\u00e7ilemez\n}\ndf = pd.DataFrame(data)\n\nX = df.drop('potability', axis=1)\ny = df['potability']\n\n# Veriyi e\u011fitim ve test setlerine ay\u0131rma\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n\n# Random Forest modelini e\u011fitme\nmodel = RandomForestClassifier(n_estimators=100, random_state=42)\nmodel.fit(X_train, y_train)\n\n# Modeli kaydetme\njoblib.dump(model, 'model.pkl')\nprint(\"ML modeliniz 'model.pkl' olarak kaydedildi.\")\n<\/pre>\n<p><\/code><\/p>\n<h3>API Geli\u015ftirme: Flask ile Tahmin Servisi Olu\u015fturma<\/h3>\n<p>\u015eimdi s\u0131ra geldi bu <span style=\"background-color: yellow;\">makine \u00f6\u011frenimi<\/span> modelini bir API \u00fczerinden sunmaya. Python ekosisteminde bunun i\u00e7in Flask olduk\u00e7a hafif ve h\u0131zl\u0131 bir se\u00e7enektir. <code>app.py<\/code> ad\u0131nda bir dosya olu\u015fturup a\u015fa\u011f\u0131daki kodu i\u00e7ine yerle\u015ftirelim:<\/p>\n<pre><code class=\"language-python\">\nfrom flask import Flask, request, jsonify\nimport joblib\nimport pandas as pd\nimport logging\n\n# Loglama ayarlar\u0131\nlogging.basicConfig(level=logging.INFO)\n\napp = Flask(__name__)\n\n# Modeli y\u00fckleme\ntry:\n    model = joblib.load('model.pkl')\n    logging.info(\"ML modeli ba\u015far\u0131yla y\u00fcklendi.\")\nexcept Exception as e:\n    logging.error(f\"Model y\u00fcklenirken hata olu\u015ftu: {e}\")\n    model = None # Model y\u00fcklenemezse hata durumu\n    \n# API sa\u011fl\u0131k kontrol\u00fc (health check)\n@app.route('\/health', methods=['GET'])\ndef health_check():\n    return jsonify({\"status\": \"healthy\", \"model_loaded\": model is not None}), 200\n\n@app.route('\/predict', methods=['POST'])\ndef predict():\n    if model is None:\n        return jsonify({\"error\": \"ML modeli y\u00fcklenemedi. L\u00fctfen sunucu loglar\u0131n\u0131 kontrol edin.\"}), 500\n\n    try:\n        data = request.get_json(force=True)\n        logging.info(f\"Gelen istek verisi: {data}\")\n\n        # Tahmin i\u00e7in gerekli \u00f6zelliklerin listesi (model e\u011fitiminde kullan\u0131lan s\u0131ra ile)\n        features = [\n            'ph', 'hardness', 'solids', 'chloramines', 'sulfate',\n            'conductivity', 'organic_carbon', 'trihalomethanes', 'turbidity'\n        ]\n        \n        # Gelen veriyi DataFrame'e d\u00f6n\u00fc\u015ft\u00fcrme ve s\u0131ralama\n        input_df = pd.DataFrame([data], columns=features)\n        \n        prediction = model.predict(input_df)\n        prediction_proba = model.predict_proba(input_df)\n\n        result = {\n            'prediction': int(prediction[0]), # 1 veya 0\n            'probability_potable': round(prediction_proba[0][1], 4), # \u0130\u00e7ilebilir olma olas\u0131l\u0131\u011f\u0131\n            'probability_not_potable': round(prediction_proba[0][0], 4) # \u0130\u00e7ilemez olma olas\u0131l\u0131\u011f\u0131\n        }\n        logging.info(f\"Tahmin sonucu: {result}\")\n        return jsonify(result)\n\n    except KeyError as e:\n        logging.error(f\"Gerekli anahtar eksik: {e}. \u0130stekteki verileri kontrol edin.\")\n        return jsonify({\"error\": f\"Gerekli bir \u00f6zellik eksik: {e}. L\u00fctfen t\u00fcm su kalitesi parametrelerini sa\u011flay\u0131n.\"}), 400\n    except Exception as e:\n        logging.error(f\"Bir hata olu\u015ftu: {e}\", exc_info=True)\n        return jsonify({\"error\": f\"Tahmin s\u0131ras\u0131nda beklenmedik bir hata olu\u015ftu: {e}\"}), 500\n\nif __name__ == '__main__':\n    app.run(debug=True, host='0.0.0.0', port=5000)\n<\/pre>\n<p><\/code><\/p>\n<p>Bu <span style=\"background-color: yellow;\">web API<\/span> kodu, <code>\/predict<\/code> adresine yap\u0131lan POST isteklerini dinler. Gelen JSON verisindeki su kalitesi parametrelerini al\u0131r, y\u00fckl\u00fc ML modelini kullanarak bir tahmin yapar ve bu tahmini JSON format\u0131nda geri d\u00f6nd\u00fcr\u00fcr. Ayr\u0131ca, modelin y\u00fcklenip y\u00fcklenmedi\u011fini kontrol etmek i\u00e7in bir <code>\/health<\/code> endpoint'i de ekledik. Bu, bulut da\u011f\u0131t\u0131mlar\u0131nda servis sa\u011fl\u0131\u011f\u0131n\u0131 izlemek i\u00e7in \u00f6nemlidir. Bu b\u00f6l\u00fcmle birlikte, modelimizi bir API arac\u0131l\u0131\u011f\u0131yla sunmaya haz\u0131r\u0131z. \u015eimdi s\u0131ra, bu uygulamay\u0131 buluta ta\u015f\u0131mak i\u00e7in bir sonraki ad\u0131ma geldi: Kaps\u00fclleme ve Ta\u015f\u0131nabilirlik.<\/p>\n<h2 id=\"kaps\u00fclleme-ve-ta\u015f\u0131nabilirlik-docker-ile-ortam\u0131-nas\u0131l-yal\u0131t\u0131r\u0131z\">Kaps\u00fclleme ve Ta\u015f\u0131nabilirlik: Docker ile Ortam\u0131 Nas\u0131l Yal\u0131t\u0131r\u0131z?<\/h2>\n<p>ML API'nizi buluta da\u011f\u0131t\u0131rken kar\u015f\u0131la\u015f\u0131lan en yayg\u0131n sorunlardan biri \"Benim bilgisayar\u0131mda \u00e7al\u0131\u015f\u0131yordu!\" sendromudur. Farkl\u0131 i\u015fletim sistemleri, Python versiyonlar\u0131, k\u00fct\u00fcphane ba\u011f\u0131ml\u0131l\u0131klar\u0131 ve \u00e7evresel ayarlar, uygulaman\u0131z\u0131n farkl\u0131 ortamlarda beklenen \u015fekilde \u00e7al\u0131\u015fmamas\u0131na neden olabilir. \u0130\u015fte bu noktada Docker, bir kurtar\u0131c\u0131 olarak devreye giriyor. Docker, uygulaman\u0131z\u0131 ve t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 tek bir, hafif, ta\u015f\u0131nabilir \"konteyner\" i\u00e7inde paketlemenizi sa\u011flar. Bu sayede, uygulaman\u0131z\u0131n her yerde ayn\u0131 \u015fekilde \u00e7al\u0131\u015faca\u011f\u0131n\u0131 garanti edersiniz.<\/p>\n<h3>Neden Docker Kullanmal\u0131y\u0131z?<\/h3>\n<ol>\n<li><strong>Ortam Tutarl\u0131l\u0131\u011f\u0131:<\/strong> Geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 aras\u0131nda tutarl\u0131l\u0131\u011f\u0131 sa\u011flar. Ba\u011f\u0131ml\u0131l\u0131k \u00e7ak\u0131\u015fmalar\u0131n\u0131 ortadan kald\u0131r\u0131r.<\/li>\n<li><strong>\u0130zolasyon:<\/strong> Uygulaman\u0131z ve ba\u011f\u0131ml\u0131l\u0131klar\u0131 di\u011fer uygulamalardan izole edilir, bu da g\u00fcvenlik ve kararl\u0131l\u0131\u011f\u0131 art\u0131r\u0131r.<\/li>\n<li><strong>Ta\u015f\u0131nabilirlik:<\/strong> Olu\u015fturdu\u011funuz Docker imaj\u0131, Docker'\u0131n kurulu oldu\u011fu herhangi bir sunucuda (yerel bilgisayar, sanal makine, bulut) \u00e7al\u0131\u015ft\u0131r\u0131labilir.<\/li>\n<li><strong>Kolay \u00d6l\u00e7eklendirme:<\/strong> Konteynerler h\u0131zl\u0131ca ba\u015flat\u0131l\u0131p durdurulabildi\u011finden, uygulaman\u0131z\u0131 \u00f6l\u00e7eklendirmek \u00e7ok daha kolay hale gelir.<\/li>\n<li><strong>Versiyonlama:<\/strong> Docker imajlar\u0131 versiyonlanabilir, b\u00f6ylece uygulaman\u0131z\u0131n belirli bir s\u00fcr\u00fcm\u00fcn\u00fc her zaman yeniden olu\u015fturabilirsiniz.<\/li>\n<\/ol>\n<h3>Dockerfile Olu\u015fturma Ad\u0131mlar\u0131<\/h3>\n<p>Uygulamam\u0131z\u0131 Dockerize etmek i\u00e7in, projenizin k\u00f6k dizininde <code>Dockerfile<\/code> ad\u0131nda bir dosya olu\u015fturmam\u0131z gerekiyor. Bu dosya, Docker'a uygulaman\u0131z\u0131 nas\u0131l derleyece\u011fini ve \u00e7al\u0131\u015ft\u0131raca\u011f\u0131n\u0131 anlatan bir dizi talimat i\u00e7erir. Ayr\u0131ca, Python ba\u011f\u0131ml\u0131l\u0131klar\u0131m\u0131z\u0131 i\u00e7eren bir <code>requirements.txt<\/code> dosyas\u0131na da ihtiyac\u0131m\u0131z var.<\/p>\n<pre><code class=\"language-bash\">\n# requirements.txt i\u00e7eri\u011fi\nFlask==2.3.3\nscikit-learn==1.3.0\npandas==2.0.3\njoblib==1.3.2\ngunicorn==21.2.0 # \u00dcretim ortam\u0131nda Flask uygulamas\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in\n\n<\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi <code>Dockerfile<\/code>'\u0131m\u0131z\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-dockerfile\">\n# Python 3.9 Alpine s\u00fcr\u00fcm\u00fcn\u00fc temel imaj olarak kullan\u0131n. Alpine daha hafif bir da\u011f\u0131t\u0131md\u0131r.\nFROM python:3.9-slim-buster\n\n# Uygulama kodunu i\u00e7erecek \u00e7al\u0131\u015fma dizinini ayarlay\u0131n\nWORKDIR \/app\n\n# Gerekli ba\u011f\u0131ml\u0131l\u0131klar\u0131 kopyalay\u0131n ve kurun\nCOPY requirements.txt .\nRUN pip install --no-cache-dir -r requirements.txt\n\n# Uygulama kodunu konteynere kopyalay\u0131n\nCOPY . .\n\n# ML modelinin var oldu\u011fundan emin olun\nRUN if [ ! -f \"model.pkl\" ]; then echo \"HATA: model.pkl dosyas\u0131 bulunamad\u0131!\"; exit 1; fi\n\n# Flask uygulamas\u0131n\u0131n \u00e7al\u0131\u015faca\u011f\u0131 portu belirleyin\nEXPOSE 5000\n\n# Uygulamay\u0131 Gunicorn ile ba\u015flat\u0131n\n# Gunicorn, \u00fcretim ortam\u0131nda Flask uygulamas\u0131n\u0131 daha sa\u011flam ve performansl\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131l\u0131r.\n# 'app:app' ifadesi, 'app.py' dosyas\u0131ndaki 'app' de\u011fi\u015fkenini (Flask uygulamas\u0131 \u00f6rne\u011fi) belirtir.\nCMD [\"gunicorn\", \"--bind\", \"0.0.0.0:5000\", \"app:app\"]\n<\/pre>\n<p><\/code><\/p>\n<p>Bu <code>Dockerfile<\/code> ad\u0131m ad\u0131m \u015funlar\u0131 yapar:<\/p>\n<ol>\n<li><code>FROM python:3.9-slim-buster<\/code>: Python 3.9'un hafif bir versiyonunu temel al\u0131r.<\/li>\n<li><code>WORKDIR \/app<\/code>: Konteyner i\u00e7inde \u00e7al\u0131\u015fma dizinini <code>\/app<\/code> olarak belirler.<\/li>\n<li><code>COPY requirements.txt .<\/code>: <code>requirements.txt<\/code> dosyas\u0131n\u0131 konteynere kopyalar.<\/li>\n<li><code>RUN pip install --no-cache-dir -r requirements.txt<\/code>: Gerekli Python k\u00fct\u00fcphanelerini kurar.<\/li>\n<li><code>COPY . .<\/code>: Projenizdeki t\u00fcm dosyalar\u0131 (<code>app.py<\/code>, <code>model.pkl<\/code> vb.) konteynerin <code>\/app<\/code> dizinine kopyalar.<\/li>\n<li><code>RUN if [ ! -f \"model.pkl\" ]; ...<\/code>: <code>model.pkl<\/code> dosyas\u0131n\u0131n mevcut oldu\u011funu do\u011frular. Bu, modelin da\u011f\u0131t\u0131m i\u00e7in unutulmamas\u0131n\u0131 sa\u011flar.<\/li>\n<li><code>EXPOSE 5000<\/code>: Konteynerin 5000 numaral\u0131 portu dinleyece\u011fini belirtir (bu bir belgedir, ger\u00e7ek port y\u00f6nlendirmesi de\u011fildir).<\/li>\n<li><code>CMD [\"gunicorn\", \"--bind\", \"0.0.0.0:5000\", \"app:app\"]<\/code>: Uygulama ba\u015flat\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015facak komutu belirler. Gunicorn, Flask uygulamas\u0131n\u0131 5000 portunda dinleyecek \u015fekilde ba\u015flat\u0131r.<\/li>\n<\/ol>\n<h3>Docker \u0130maj\u0131n\u0131 Olu\u015fturma ve \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>\u015eimdi, Dockerfile'\u0131m\u0131z\u0131 kullanarak bir Docker imaj\u0131 olu\u015ftural\u0131m ve yerel olarak test edelim:<\/p>\n<pre><code class=\"language-bash\">\n# Docker imaj\u0131n\u0131 olu\u015fturma ('. watermark-ml-api' etiketiyle)\ndocker build -t watermark-ml-api .\n\n# \u0130maj\u0131n ba\u015far\u0131yla olu\u015fturuldu\u011funu kontrol edin\ndocker images\n\n# Konteyneri \u00e7al\u0131\u015ft\u0131rma ve 5000 portunu d\u0131\u015far\u0131ya map'leme\ndocker run -p 5000:5000 watermark-ml-api\n<\/pre>\n<p><\/code><\/p>\n<p>Art\u0131k uygulaman\u0131z bir Docker konteyneri i\u00e7inde \u00e7al\u0131\u015f\u0131yor olmal\u0131! <code>http:\/\/localhost:5000\/health<\/code> adresine bir GET iste\u011fi g\u00f6ndererek uygulaman\u0131z\u0131n sa\u011fl\u0131kl\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol edebilirsiniz. Bir sonraki ad\u0131mda, bu Docker imaj\u0131n\u0131 buluta nas\u0131l da\u011f\u0131taca\u011f\u0131m\u0131z\u0131 g\u00f6rece\u011fiz. Bu kaps\u00fclleme sayesinde, \"\u00c7al\u0131\u015fm\u0131yor\" mazeretini geride b\u0131rak\u0131p, uygulaman\u0131z\u0131 g\u00fcvenle buluta ta\u015f\u0131yabilirsiniz.<\/p>\n<h2 id=\"buluta-y\u00fckseli\u015f-awsazuregcpde-5-dakikada-da\u011f\u0131t\u0131m-m\u00fcmk\u00fcn-m\u00fc\">Buluta Y\u00fckseli\u015f: AWS\/Azure\/GCP'de 5 Dakikada Da\u011f\u0131t\u0131m M\u00fcmk\u00fcn m\u00fc?<\/h2>\n<p>Evet, m\u00fcmk\u00fcn! \u00d6zellikle Docker konteynerlerini destekleyen modern bulut hizmetleri sayesinde, uygulaman\u0131z\u0131 buluta da\u011f\u0131tmak \u015fa\u015f\u0131rt\u0131c\u0131 derecede h\u0131zl\u0131 olabilir. Bu b\u00f6l\u00fcmde, pop\u00fcler bulut sa\u011flay\u0131c\u0131lar\u0131ndan biri olan Azure App Service'i kullanarak su kalitesi ML API'mizi nas\u0131l 5 dakikada da\u011f\u0131tabilece\u011fimizi anlataca\u011f\u0131z. AWS Elastic Beanstalk veya Google Cloud Run gibi hizmetler de benzer kolayl\u0131klar sunar, ancak biz \u00f6rnek olarak Azure'u kullanaca\u011f\u0131z.<\/p>\n<h3>Neden Azure App Service (Konteynerler \u0130\u00e7in)?<\/h3>\n<ul>\n<li><strong>Basitlik:<\/strong> Kolay aray\u00fcz\u00fc sayesinde h\u0131zla web uygulamalar\u0131 ve API'ler da\u011f\u0131tabilirsiniz.<\/li>\n<li><strong>Konteyner Deste\u011fi:<\/strong> Docker imajlar\u0131n\u0131z\u0131 do\u011frudan Docker Hub, Azure Container Registry (ACR) veya \u00f6zel URL'lerden \u00e7ekebilir.<\/li>\n<li><strong>\u00d6l\u00e7eklenebilirlik:<\/strong> Y\u00fck alt\u0131nda otomatik \u00f6l\u00e7eklendirme, performans\u0131 garanti eder.<\/li>\n<li><strong>Y\u00f6netilen Hizmet:<\/strong> Sunucu y\u00f6netimi, yamalama, g\u00fcvenlik gibi operasyonel y\u00fckleri Azure \u00fcstlenir.<\/li>\n<li><strong>CI\/CD Entegrasyonu:<\/strong> GitHub, Azure DevOps gibi kaynak kontrol sistemleriyle kolay entegrasyon.<\/li>\n<\/ul>\n<h3>Ad\u0131m Ad\u0131m Da\u011f\u0131t\u0131m S\u00fcreci (Azure App Service \u00dczerinden)<\/h3>\n<p>Bu ad\u0131mlar, Azure portal\u0131n\u0131 kulland\u0131\u011f\u0131n\u0131z\u0131 ve bir Azure hesab\u0131n\u0131z oldu\u011funu varsayar. E\u011fer yoksa, \u00fccretsiz bir hesap olu\u015fturabilirsiniz.<\/p>\n<ol>\n<li>\n        <strong>Docker \u0130maj\u0131n\u0131z\u0131 Bir Konteyner Kay\u0131t Defterine Y\u00fckleyin:<\/strong><\/p>\n<p>\u00d6ncelikle, yerel olarak olu\u015fturdu\u011fumuz <code>watermark-ml-api<\/code> Docker imaj\u0131n\u0131 bir konteyner kay\u0131t defterine (\u00f6rne\u011fin, Docker Hub veya Azure Container Registry) g\u00f6ndermemiz gerekiyor. Bu \u00f6rnekte, halka a\u00e7\u0131k bir Docker Hub deposuna y\u00fckledi\u011fimizi varsayal\u0131m. E\u011fer \u00f6zel bir depo kullan\u0131yorsan\u0131z kimlik do\u011frulama ad\u0131mlar\u0131 gerekebilir.<\/p>\n<pre><code class=\"language-bash\">\n# Docker Hub kullan\u0131c\u0131 ad\u0131n\u0131z\u0131 (\u00f6rne\u011fin, 'myusername') kullanarak imaj\u0131 etiketleyin\ndocker tag watermark-ml-api myusername\/watermark-ml-api:latest\n\n# Docker Hub'a giri\u015f yap\u0131n (e\u011fer daha \u00f6nce yapmad\u0131ysan\u0131z)\ndocker login\n\n# \u0130maj\u0131 Docker Hub'a g\u00f6nderin\ndocker push myusername\/watermark-ml-api:latest\n        <\/pre>\n<p><\/code><\/p>\n<p>Bu i\u015flem, internet ba\u011flant\u0131n\u0131za ba\u011fl\u0131 olarak birka\u00e7 dakika s\u00fcrebilir. \u0130maj\u0131n\u0131z art\u0131k bulutta, Azure'un eri\u015febilece\u011fi bir yerde.<\/p>\n<\/li>\n<li>\n        <strong>Azure Portal\u0131na Giri\u015f ve Yeni Bir Web Uygulamas\u0131 Olu\u015fturma:<\/strong><\/p>\n<ul>\n<li>Azure portal\u0131na (portal.azure.com) gidin.<\/li>\n<li>Sol men\u00fcden \"Kaynak olu\u015ftur\" veya arama \u00e7ubu\u011funa \"Web App\" yaz\u0131n.<\/li>\n<li>\"Web Uygulamas\u0131\" se\u00e7ene\u011fini se\u00e7in ve \"Olu\u015ftur\" butonuna t\u0131klay\u0131n.<\/li>\n<\/ul>\n<\/li>\n<li>\n        <strong>Temel Bilgileri Yap\u0131land\u0131rma:<\/strong><\/p>\n<ul>\n<li><strong>Abonelik:<\/strong> Kulland\u0131\u011f\u0131n\u0131z Azure aboneli\u011fini se\u00e7in.<\/li>\n<li><strong>Kaynak Grubu:<\/strong> Yeni bir kaynak grubu olu\u015fturun (\u00f6rne\u011fin, <code>water-quality-rg<\/code>) veya mevcut birini kullan\u0131n.<\/li>\n<li><strong>Ad:<\/strong> Web uygulaman\u0131z i\u00e7in benzersiz bir ad girin (\u00f6rne\u011fin, <code>water-quality-ml-api-sizinadiniz<\/code>). Bu ayn\u0131 zamanda API'nizin URL'sinin bir par\u00e7as\u0131 olacakt\u0131r.<\/li>\n<li><strong>Yay\u0131mlama:<\/strong> Buras\u0131 \u00f6nemli! \"Docker Kapsay\u0131c\u0131s\u0131\" se\u00e7ene\u011fini se\u00e7in.<\/li>\n<li><strong>\u0130\u015fletim Sistemi:<\/strong> \"Linux\" se\u00e7ene\u011fini se\u00e7in (\u00e7\u00fcnk\u00fc Docker imaj\u0131m\u0131z Linux tabanl\u0131).<\/li>\n<li><strong>B\u00f6lge:<\/strong> Size veya kullan\u0131c\u0131lar\u0131n\u0131za en yak\u0131n b\u00f6lgeyi se\u00e7in (\u00f6rne\u011fin, \"West Europe\" veya \"Central US\").<\/li>\n<li><strong>Linux Plan\u0131:<\/strong> Yeni bir App Service Plan\u0131 olu\u015fturun veya mevcut birini kullan\u0131n. Performans ve maliyet i\u00e7in uygun bir SKU (\u00f6rne\u011fin, B1 Basic veya P1V2 Premium) se\u00e7in. \"Free\" veya \"Shared\" planlar Docker kapsay\u0131c\u0131lar\u0131n\u0131 desteklemez veya yeterli kayna\u011f\u0131 sa\u011flamaz.<\/li>\n<\/ul>\n<\/li>\n<li>\n        <strong>Docker Yap\u0131land\u0131rmas\u0131:<\/strong><\/p>\n<ul>\n<li>\"Docker\" sekmesine gidin.<\/li>\n<li><strong>G\u00f6r\u00fcnt\u00fc Kayna\u011f\u0131:<\/strong> \"Docker Hub\" se\u00e7ene\u011fini se\u00e7in. (E\u011fer ACR kulland\u0131ysan\u0131z, o se\u00e7ene\u011fi se\u00e7melisiniz.)<\/li>\n<li><strong>Eri\u015fim T\u00fcr\u00fc:<\/strong> \"Genel\" olarak b\u0131rak\u0131n. (E\u011fer \u00f6zel bir Docker Hub deposu veya ACR kulland\u0131ysan\u0131z, kimlik do\u011frulama gerekecektir.)<\/li>\n<li><strong>G\u00f6r\u00fcnt\u00fc ve Etiket:<\/strong> Daha \u00f6nce Docker Hub'a y\u00fckledi\u011finiz imaj\u0131n ad\u0131n\u0131 girin. \u00d6rne\u011fin: <code>myusername\/watermark-ml-api:latest<\/code>.<\/li>\n<li><strong>Ba\u015flang\u0131\u00e7 Komutu:<\/strong> Gerekirse burada bir ba\u015flang\u0131\u00e7 komutu belirtebilirsiniz, ancak bizim Dockerfile'\u0131m\u0131zda <code>CMD<\/code> komutunu zaten ayarlad\u0131\u011f\u0131m\u0131z i\u00e7in genellikle bo\u015f b\u0131rakabilirsiniz. Ancak burada <code>gunicorn --bind 0.0.0.0:8000 app:app<\/code> (App Service genellikle 80 veya 8000 portlar\u0131n\u0131 tercih eder, bu y\u00fczden Dockerfile'daki EXPOSE 5000'i de\u011fi\u015ftirmek veya Gunicorn'u App Service'in bekledi\u011fi porta ba\u011flamak iyi bir uygulamad\u0131r. \u00d6rne\u011fimizde Dockerfile'da 5000 belirttik, bu y\u00fczden Azure'da uygulama ayarlar\u0131 alt\u0131nda <code>WEBSITES_PORT<\/code> olarak 5000 belirtmeliyiz.)<\/li>\n<\/ul>\n<\/li>\n<li>\n        <strong>G\u00f6zden Ge\u00e7ir ve Olu\u015ftur:<\/strong><\/p>\n<ul>\n<li>\"G\u00f6zden Ge\u00e7ir + olu\u015ftur\" butonuna t\u0131klay\u0131n.<\/li>\n<li>Ayarlar\u0131n\u0131z\u0131 kontrol edin ve \"Olu\u015ftur\" butonuna t\u0131klayarak da\u011f\u0131t\u0131m\u0131 ba\u015flat\u0131n.<\/li>\n<\/ul>\n<\/li>\n<li>\n        <strong>Da\u011f\u0131t\u0131m\u0131n Tamamlanmas\u0131 ve Test:<\/strong><\/p>\n<p>Azure, Docker imaj\u0131n\u0131z\u0131 \u00e7ekecek, bir App Service \u00f6rne\u011fi olu\u015fturacak ve uygulaman\u0131z\u0131 ba\u015flatacakt\u0131r. Bu s\u00fcre\u00e7 genellikle 1-2 dakika s\u00fcrer. Da\u011f\u0131t\u0131m tamamland\u0131ktan sonra, olu\u015fturdu\u011funuz Web Uygulamas\u0131 kayna\u011f\u0131na gidin. \"Genel Bak\u0131\u015f\" sekmesinde, uygulaman\u0131z\u0131n URL'sini (\u00f6rne\u011fin, <code>https:\/\/water-quality-ml-api-sizinadiniz.azurewebsites.net<\/code>) bulacaks\u0131n\u0131z.<\/p>\n<p>API'nizi test etmek i\u00e7in bir ara\u00e7 (\u00f6rne\u011fin, Postman veya cURL) kullanarak \u015fu adrese bir GET iste\u011fi g\u00f6nderin:<\/p>\n<pre><code class=\"language-bash\">\ncurl https:\/\/water-quality-ml-api-sizinadiniz.azurewebsites.net\/health\n# \u00c7\u0131kt\u0131: {\"model_loaded\": true, \"status\": \"healthy\"}\n\n        <\/pre>\n<p><\/code><\/p>\n<p>Ard\u0131ndan, bir POST iste\u011fi ile tahmin yap\u0131n:<\/p>\n<pre><code class=\"language-bash\">\ncurl -X POST -H \"Content-Type: application\/json\" \\\n     -d '{\n           \"ph\": 7.5,\n           \"hardness\": 180,\n           \"solids\": 20000,\n           \"chloramines\": 7.0,\n           \"sulfate\": 350,\n           \"conductivity\": 400,\n           \"organic_carbon\": 15.0,\n           \"trihalomethanes\": 70,\n           \"turbidity\": 4.0\n         }' \\\n     https:\/\/water-quality-ml-api-sizinadiniz.azurewebsites.net\/predict\n# \u00c7\u0131kt\u0131: {\"prediction\": 1, \"probability_not_potable\": 0.1, \"probability_potable\": 0.9} (\u00d6rnek \u00e7\u0131kt\u0131)\n\n        <\/pre>\n<p><\/code>\n    <\/li>\n<\/ol>\n<p>\u0130\u015fte bu kadar! Uygulaman\u0131z art\u0131k bulutta canl\u0131 ve eri\u015filebilir durumda. Bu h\u0131zl\u0131 da\u011f\u0131t\u0131m, \u0130ZSU \u00f6rne\u011finde oldu\u011fu gibi, anl\u0131k veri analizleri i\u00e7in kritik bir yetenek sa\u011flar. Art\u0131k API'nizi mobil uygulamalar\u0131n\u0131za, web sitelerinize veya IoT sens\u00f6r a\u011flar\u0131n\u0131za entegre edebilirsiniz.<\/p>\n<h2 id=\"optimizasyon-ve-\u00f6l\u00e7eklendirme-apimizi-daha-etkili-nas\u0131l-kullan\u0131r\u0131z\">Optimizasyon ve \u00d6l\u00e7eklendirme: API'mizi Daha Etkili Nas\u0131l Kullan\u0131r\u0131z?<\/h2>\n<p>API'nizi buluta ba\u015far\u0131yla da\u011f\u0131tt\u0131ktan sonra, projenizin b\u00fcy\u00fcmesiyle birlikte performans\u0131, g\u00fcvenli\u011fi ve maliyet etkinli\u011fini art\u0131rmak i\u00e7in optimizasyon ve \u00f6l\u00e7eklendirme stratejileri uygulamak \u00f6nemlidir. Sadece 5 dakikada da\u011f\u0131t\u0131m yapmak harika bir ba\u015flang\u0131\u00e7t\u0131r, ancak s\u00fcrd\u00fcr\u00fclebilirlik i\u00e7in ileri d\u00fczey d\u00fc\u015f\u00fcnceler gereklidir.<\/p>\n<h3>Performans \u0130pu\u00e7lar\u0131: API Yan\u0131t S\u00fcrelerini Nas\u0131l Azalt\u0131r\u0131z?<\/h3>\n<ul>\n<li>\n        <strong>\u00d6nbellekleme (Caching):<\/strong> S\u0131k\u00e7a istenen veya ayn\u0131 girdilerle tekrarlanan tahminler i\u00e7in sonu\u00e7lar\u0131 \u00f6nbelle\u011fe al\u0131n. Redis gibi bellek i\u00e7i bir veri deposu kullanarak ayn\u0131 iste\u011fin model \u00fczerinden tekrar ge\u00e7mesini engelleyebilirsiniz. Bu, \u00f6zellikle model tahmin s\u00fcresinin uzun oldu\u011fu durumlarda performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<\/p>\n<pre><code class=\"language-python\">\n# Flask uygulaman\u0131zda basit bir \u00f6nbellekleme \u00f6rne\u011fi (Redis ile)\n# from flask_caching import Cache\n# cache = Cache(app, config={'CACHE_TYPE': 'redis', 'CACHE_REDIS_URL': 'redis:\/\/localhost:6379\/0'})\n# @cache.cached(timeout=300, key_prefix='predict') # 300 saniye \u00f6nbelle\u011fe al\n# def predict():\n#    ...\n        <\/pre>\n<p><\/code>\n    <\/li>\n<li>\n        <strong>Asenkron \u0130\u015flemler:<\/strong> E\u011fer tahminler uzun s\u00fcr\u00fcyorsa veya birden fazla karma\u015f\u0131k i\u015flem i\u00e7eriyorsa, bunlar\u0131 arka planda asenkron olarak \u00e7al\u0131\u015ft\u0131r\u0131n (\u00f6rne\u011fin, Celery ve RabbitMQ\/Redis kullanarak). API hemen bir i\u015f kimli\u011fi d\u00f6ns\u00fcn, istemci daha sonra bu kimlikle sonucu sorgulas\u0131n.<\/li>\n<li>\n        <strong>Model Optimizasyonu:<\/strong> Daha k\u00fc\u00e7\u00fck, daha h\u0131zl\u0131 ML modelleri kullanmay\u0131 d\u00fc\u015f\u00fcn\u00fcn. Distilasyon, nicemleme veya daha hafif mimarilere ge\u00e7i\u015f, tahmin s\u00fcrelerini k\u0131saltabilir. TensorFlow Lite veya ONNX gibi formatlar, model boyutunu ve \u00e7\u0131kar\u0131m s\u00fcresini optimize etmeye yard\u0131mc\u0131 olabilir.<\/li>\n<li>\n        <strong>Verimli Gunicorn Ayarlar\u0131:<\/strong> <code>gunicorn<\/code> ba\u015flang\u0131\u00e7 komutunuzdaki <code>--workers<\/code> ve <code>--threads<\/code> parametrelerini sunucunuzun CPU \u00e7ekirdek say\u0131s\u0131na g\u00f6re ayarlayarak performans\u0131 art\u0131rabilirsiniz. Genellikle <code>2 * CPU_COUNT + 1<\/code> kadar worker tavsiye edilir.<\/li>\n<\/ul>\n<h3>\u00d6l\u00e7eklendirme Stratejileri: Artan Y\u00fcke Haz\u0131rl\u0131k<\/h3>\n<p>Bulut platformlar\u0131n\u0131n en b\u00fcy\u00fck avantajlar\u0131ndan biri, uygulaman\u0131z\u0131 ihtiyaca g\u00f6re kolayca \u00f6l\u00e7ekleyebilmesidir. Azure App Service gibi hizmetler, bu yetene\u011fi otomatik olarak sunar:<\/p>\n<ul>\n<li>\n        <strong>Otomatik \u00d6l\u00e7eklendirme (Auto-scaling):<\/strong> CPU kullan\u0131m\u0131, bellek kullan\u0131m\u0131, HTTP istek say\u0131s\u0131 veya bir zaman \u00e7izelgesine g\u00f6re otomatik \u00f6l\u00e7eklendirme kurallar\u0131 belirleyebilirsiniz. Y\u00fck artt\u0131\u011f\u0131nda Azure otomatik olarak yeni uygulama \u00f6rnekleri ba\u015flat\u0131r ve y\u00fck azald\u0131\u011f\u0131nda kapat\u0131r. Bu, maliyetleri optimize ederken performans\u0131 korur.<\/p>\n<pre><code class=\"language-html\">\n<!-- Azure portal\u0131nda otomatik \u00f6l\u00e7eklendirme ayarlar\u0131n\u0131 g\u00f6rsel olarak yap\u0131land\u0131rabilirsiniz. -->\n<!-- \u00d6rnek bir CSS medya sorgusu ile mobil uyumluluk vurgusu -->\n<style>\n  .card-container {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 20px;\n  }\n  .card {\n    flex: 1 1 calc(33% - 20px); \/* 3 s\u00fctun *\/\n    box-shadow: 0 4px 8px rgba(0,0,0,0.1);\n    padding: 20px;\n    border-radius: 8px;\n  }\n  @media (max-width: 768px) {\n    .card {\n      flex: 1 1 calc(50% - 20px); \/* 2 s\u00fctun *\/\n    }\n  }\n  @media (max-width: 480px) {\n    .card {\n      flex: 1 1 100%; \/* Tek s\u00fctun *\/\n    }\n  }\n<\/style>\n<div class=\"card-container\">\n  <div class=\"card\">\n    <h3>Y\u00fck Dengeleyici<\/h3>\n    <p>Bulut platformlar\u0131, otomatik olarak gelen istekleri birden fazla uygulama \u00f6rne\u011fine da\u011f\u0131tan y\u00fck dengeleyicilerle gelir.<\/p>\n  <\/div>\n  <div class=\"card\">\n    <h3>Veritaban\u0131 \u00d6l\u00e7eklendirmesi<\/h3>\n    <p>E\u011fer API'niz bir veritaban\u0131na ba\u011fl\u0131ysa, veritaban\u0131n\u0131z\u0131 da \u00f6l\u00e7eklendirmeniz gerekebilir (\u00f6rn. Azure SQL Database'in esnek \u00f6l\u00e7eklendirme se\u00e7enekleri).<\/p>\n  <\/div>\n<\/div>\n        <\/pre>\n<p><\/code>\n    <\/li>\n<li>\n        <strong>B\u00f6lgesel Da\u011f\u0131t\u0131m:<\/strong> K\u00fcresel bir kullan\u0131c\u0131 kitleniz varsa, API'nizi birden fazla co\u011frafi b\u00f6lgeye da\u011f\u0131tarak gecikmeyi azaltabilir ve b\u00f6lgesel ar\u0131zalara kar\u015f\u0131 dayan\u0131kl\u0131l\u0131\u011f\u0131 art\u0131rabilirsiniz.<\/li>\n<\/ul>\n<h3>G\u00fcvenlik: API'nizi Nas\u0131l Korursunuz?<\/h3>\n<p>API'nizin kamuya a\u00e7\u0131k olmas\u0131, g\u00fcvenlik risklerini de beraberinde getirir. \u015eu \u00f6nlemleri alman\u0131z kritik \u00f6nem ta\u015f\u0131r:<\/p>\n<ul>\n<li>\n        <strong>HTTPS Kullan\u0131m\u0131:<\/strong> T\u00fcm API ileti\u015fimi i\u00e7in HTTPS'i zorunlu k\u0131l\u0131n. Azure App Service otomatik olarak \u00fccretsiz SSL sertifikalar\u0131 sa\u011flar.<\/li>\n<li>\n        <strong>API Anahtarlar\u0131\/JWT:<\/strong> API'nize eri\u015fimi k\u0131s\u0131tlamak i\u00e7in API anahtarlar\u0131 veya JSON Web Token (JWT) tabanl\u0131 kimlik do\u011frulama kullan\u0131n. Gelen her iste\u011fi do\u011frulamadan ge\u00e7irin.<\/p>\n<pre><code class=\"language-python\">\n# Flask'ta JWT ile basit bir \u00f6rnek (Flask-JWT-Extended k\u00fct\u00fcphanesi ile)\n# from flask_jwt_extended import jwt_required, JWTManager\n# app.config[\"JWT_SECRET_KEY\"] = \"super-secret\"\n# jwt = JWTManager(app)\n# @app.route('\/predict', methods=['POST'])\n# @jwt_required() # Bu endpoint'e sadece do\u011frulanm\u0131\u015f JWT token ile eri\u015filebilir\n# def predict():\n#     ...\n        <\/pre>\n<p><\/code>\n    <\/li>\n<li>\n        <strong>Giri\u015f Do\u011frulama ve Sanitizasyon:<\/strong> API'nize gelen t\u00fcm girdileri dikkatlice do\u011frulay\u0131n ve zararl\u0131 kod enjeksiyonlar\u0131n\u0131 \u00f6nlemek i\u00e7in temizleyin (sanitizasyon).<\/li>\n<li>\n        <strong>A\u011f G\u00fcvenli\u011fi:<\/strong> Bulut platformlar\u0131n\u0131n g\u00fcvenlik gruplar\u0131n\u0131, sanal a\u011flar\u0131n\u0131 ve firewall ayarlar\u0131n\u0131 kullanarak API'nize gelen trafi\u011fi s\u0131n\u0131rlay\u0131n ve izleyin.<\/li>\n<li>\n        <strong>Sald\u0131r\u0131 Tespit Sistemleri (IDS\/IPS) ve Web Uygulama G\u00fcvenlik Duvar\u0131 (WAF):<\/strong> Uygulaman\u0131z\u0131 DDoS sald\u0131r\u0131lar\u0131na ve di\u011fer web tabanl\u0131 tehditlere kar\u015f\u0131 korumak i\u00e7in bulut sa\u011flay\u0131c\u0131n\u0131z\u0131n WAF hizmetlerini kullan\u0131n.<\/li>\n<\/ul>\n<p>Bu optimizasyon ve g\u00fcvenlik ad\u0131mlar\u0131, ML API'nizin sadece h\u0131zl\u0131 bir \u015fekilde da\u011f\u0131t\u0131lmas\u0131n\u0131 de\u011fil, ayn\u0131 zamanda uzun vadede g\u00fcvenli, performansl\u0131 ve maliyet etkin bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. Bu sayede, su kalitesi izleme gibi kritik g\u00f6revlerde yapay zeka g\u00fcc\u00fcnden tam anlam\u0131yla faydalanabilirsiniz.<\/p>\n<h2 id=\"sonu\u00e7-ve-gelecek-ad\u0131mlar-su-kalitesi-izlemede-yapay-zekan\u0131n-yeri\">Sonu\u00e7 ve Gelecek Ad\u0131mlar: Su Kalitesi \u0130zlemede Yapay Zekan\u0131n Yeri<\/h2>\n<p>Bu makalede, bir su kalitesi makine \u00f6\u011frenimi API'sini buluta nas\u0131l h\u0131zl\u0131ca da\u011f\u0131taca\u011f\u0131m\u0131z\u0131 ad\u0131m ad\u0131m inceledik. Flask ile bir tahmin servisi olu\u015fturmaktan, Docker ile uygulamam\u0131z\u0131 kaps\u00fcllemeye ve Azure App Service \u00fczerinde canl\u0131ya almaya kadar t\u00fcm s\u00fcreci ele ald\u0131k. G\u00f6rd\u00fck ki, karma\u015f\u0131k g\u00f6r\u00fcnen bir da\u011f\u0131t\u0131m s\u00fcreci bile do\u011fru ara\u00e7lar ve yakla\u015f\u0131mlarla sadece birka\u00e7 dakika i\u00e7inde tamamlanabilir. Bu h\u0131z, \u0130zmir \u0130ZSU \u00f6rne\u011finde oldu\u011fu gibi, ger\u00e7ek zamanl\u0131 su kalitesi izleme ve m\u00fcdahale gerektiren senaryolarda hayati \u00f6nem ta\u015f\u0131r. Art\u0131k sens\u00f6r verilerinden anl\u0131k tahminler alabilen, \u00f6l\u00e7eklenebilir ve eri\u015filebilir bir sisteme sahibiz.<\/p>\n<p>Bu yetenek, sadece h\u0131zl\u0131 kararlar almakla kalm\u0131yor, ayn\u0131 zamanda kaynaklar\u0131n daha verimli kullan\u0131lmas\u0131n\u0131 sa\u011fl\u0131yor ve potansiyel \u00e7evresel felaketlerin \u00f6n\u00fcne ge\u00e7ilmesine yard\u0131mc\u0131 oluyor. Makine \u00f6\u011frenimi ve bulut bili\u015fim kombinasyonu, \u00e7evre y\u00f6netimi, halk sa\u011fl\u0131\u011f\u0131 ve \u015fehir planlamas\u0131 gibi bir\u00e7ok alanda oyunun kurallar\u0131n\u0131 yeniden yaz\u0131yor. Su kalitesi API'mizi ba\u015far\u0131yla da\u011f\u0131tm\u0131\u015f olsak da, yapay zekan\u0131n bu alandaki potansiyeli \u00e7ok daha geni\u015ftir ve s\u00fcrekli geli\u015fmektedir.<\/p>\n<h3>Gelecek Ad\u0131mlar ve \u0130leri D\u00fczey Uygulamalar:<\/h3>\n<ul>\n<li><strong>Ger\u00e7ek Zamanl\u0131 Sens\u00f6r Entegrasyonu:<\/strong> IoT cihazlar\u0131ndan (su kalitesi sens\u00f6rleri) gelen verileri do\u011frudan API'ye entegre ederek tamamen otomatik ve anl\u0131k izleme sistemleri kurmak. Bu, s\u00fcrekli veri ak\u0131\u015f\u0131 sa\u011flayarak modelin ger\u00e7ek zamanl\u0131 tahmin yetene\u011fini art\u0131r\u0131r.<\/li>\n<li><strong>Edge Computing:<\/strong> T\u00fcm veriyi buluta g\u00f6ndermek yerine, ilk analizleri sens\u00f6re yak\u0131n cihazlarda (edge devices) yaparak gecikmeyi azaltmak ve bant geni\u015fli\u011fi maliyetlerinden tasarruf etmek. Sadece anormal verileri veya \u00f6zetlenmi\u015f sonu\u00e7lar\u0131 buluta g\u00f6ndermek.<\/li>\n<li><strong>Daha Karma\u015f\u0131k Modeller ve Derin \u00d6\u011frenme:<\/strong> G\u00f6r\u00fcnt\u00fc i\u015fleme tekniklerini (mikroskobik g\u00f6r\u00fcnt\u00fc analizi ile mikroorganizma tespiti gibi) entegre etmek veya daha karma\u015f\u0131k zaman serisi modelleri (LSTM gibi) kullanarak su kalitesi e\u011filimlerini daha do\u011fru tahmin etmek.<\/li>\n<li><strong>Anomali Tespiti:<\/strong> Su kalitesi parametrelerindeki ani ve beklenmedik de\u011fi\u015fiklikleri tespit etmek i\u00e7in anomali tespit algoritmalar\u0131n\u0131 kullanmak. Bu, kirlilik veya ekipman ar\u0131zas\u0131 gibi acil durumlar\u0131 h\u0131zla belirleyebilir.<\/li>\n<li><strong>G\u00f6rselle\u015ftirme ve Uyar\u0131 Sistemleri:<\/strong> API'den gelen tahminleri interaktif panolarda (\u00f6rne\u011fin, Power BI, Grafana) g\u00f6rselle\u015ftirmek ve belirli e\u015fikler a\u015f\u0131ld\u0131\u011f\u0131nda SMS veya e-posta ile otomatik uyar\u0131lar g\u00f6ndermek.<\/li>\n<li><strong>S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m (CI\/CD) Pipeline'lar\u0131:<\/strong> Model g\u00fcncellemelerini veya API kod de\u011fi\u015fikliklerini otomatik olarak test eden ve da\u011f\u0131tan bir CI\/CD pipeline'\u0131 olu\u015fturmak. Bu, geli\u015ftirme h\u0131z\u0131n\u0131 ve g\u00fcvenilirli\u011fi art\u0131r\u0131r.<\/li>\n<\/ul>\n<p>Unutmay\u0131n, bir projenin \"canl\u0131ya\" al\u0131nmas\u0131 sadece bir ba\u015flang\u0131\u00e7t\u0131r. S\u00fcrekli izleme, performans iyile\u015ftirmeleri ve yeni \u00f6zelliklerin entegrasyonu, yapay zeka destekli sistemlerin ger\u00e7ek de\u011ferini ortaya \u00e7\u0131kar\u0131r. Bu s\u00fcre\u00e7te kazan\u0131lan deneyimler, gelecekteki daha b\u00fcy\u00fck ve karma\u015f\u0131k projelere \u0131\u015f\u0131k tutacakt\u0131r. \u015eimdi, bu bilgi birikimiyle kendi projelerinizi bulutun g\u00fcc\u00fcyle hayata ge\u00e7irme zaman\u0131!<\/p>\n<h3 id=\"s\u0131k\u00e7a-sorulan-sorular\">S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<ol>\n<li>\n        <strong>ML API'mi buluta da\u011f\u0131tmak i\u00e7in hangi bulut sa\u011flay\u0131c\u0131s\u0131n\u0131 se\u00e7meliyim?<\/strong><\/p>\n<p>Se\u00e7iminiz, projenizin \u00f6zel gereksinimlerine, mevcut becerilerinize ve b\u00fct\u00e7enize ba\u011fl\u0131d\u0131r. AWS, Azure ve Google Cloud, Docker kapsay\u0131c\u0131lar\u0131n\u0131 destekleyen g\u00fc\u00e7l\u00fc hizmetler sunar (AWS Elastic Beanstalk, Azure App Service, Google Cloud Run\/App Engine). E\u011fer halihaz\u0131rda bir bulut sa\u011flay\u0131c\u0131s\u0131yla deneyiminiz varsa, onunla devam etmek en kolay\u0131d\u0131r. Yeni ba\u015fl\u0131yorsan\u0131z, \u00fccretsiz katmanlar\u0131 veya ba\u015flang\u0131\u00e7 kredileri olan birini (Azure'un 12 ayl\u0131k \u00fccretsiz hizmetleri gibi) deneyebilirsiniz.<\/p>\n<\/li>\n<li>\n        <strong>Modelimi her g\u00fcncelledi\u011fimde API'yi yeniden da\u011f\u0131tmam gerekiyor mu?<\/strong><\/p>\n<p>Evet, modelinizi g\u00fcncelledi\u011finizde (\u00f6rne\u011fin, yeni verilerle yeniden e\u011fitti\u011finizde) API'nizin de g\u00fcncellenmesi gerekir. E\u011fer model dosyan\u0131z (<code>model.pkl<\/code>) de\u011fi\u015firse, yeni model dosyas\u0131n\u0131 i\u00e7eren yeni bir Docker imaj\u0131 olu\u015fturman\u0131z ve bu imaj\u0131 bulut hizmetinize yeniden da\u011f\u0131tman\u0131z gerekir. CI\/CD (S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m) pipeline'lar\u0131 bu s\u00fcreci otomatikle\u015ftirerek i\u015f y\u00fck\u00fcn\u00fcz\u00fc azaltabilir.<\/p>\n<\/li>\n<li>\n        <strong>API'min g\u00fcvenli\u011fini nas\u0131l sa\u011flayabilirim?<\/strong><\/p>\n<p>G\u00fcvenlik \u00e7ok \u00f6nemlidir. HTTPS kullan\u0131m\u0131n\u0131 zorunlu k\u0131l\u0131n, API'ye eri\u015fimi API anahtarlar\u0131 veya JWT (JSON Web Token) ile kimlik do\u011frulay\u0131n, gelen t\u00fcm verileri do\u011frulay\u0131n ve temizleyin (sanitizasyon). Ayr\u0131ca, bulut sa\u011flay\u0131c\u0131n\u0131z\u0131n g\u00fcvenlik duvar\u0131 ve a\u011f izolasyon \u00f6zelliklerini kullanarak API'nize gelen trafi\u011fi s\u0131n\u0131rlayabilirsiniz. D\u00fczenli g\u00fcvenlik denetimleri de faydal\u0131 olacakt\u0131r.<\/p>\n<\/li>\n<li>\n        <strong>Bir Flask API yerine ba\u015fka bir \u00e7er\u00e7eve kullanabilir miyim?<\/strong><\/p>\n<p>Kesinlikle! Flask, hafif ve h\u0131zl\u0131 bir se\u00e7enek oldu\u011fu i\u00e7in pop\u00fclerdir, ancak FastAPI veya Django REST Framework gibi daha g\u00fc\u00e7l\u00fc \u00e7er\u00e7eveleri de kullanabilirsiniz. FastAPI, \u00f6zellikle asenkron i\u015flemler ve otomatik dok\u00fcmantasyon (Swagger UI) deste\u011fi sayesinde ML API'leri i\u00e7in pop\u00fcler bir alternatiftir. Se\u00e7iminiz, projenizin karma\u015f\u0131kl\u0131\u011f\u0131na ve geli\u015ftirici tercihlerinize ba\u011fl\u0131d\u0131r.<\/p>\n<\/li>\n<li>\n        <strong>5 dakikada da\u011f\u0131t\u0131m vaadi ger\u00e7ek\u00e7i mi?<\/strong><\/p>\n<p>Evet, belirli ko\u015fullar alt\u0131nda olduk\u00e7a ger\u00e7ek\u00e7idir. \u00d6zellikle t\u00fcm \u00f6n haz\u0131rl\u0131klar\u0131 (ML modeli, Flask uygulamas\u0131, Dockerfile) tamamlad\u0131ysan\u0131z ve Docker imaj\u0131n\u0131z\u0131 bir kay\u0131t defterine y\u00fcklediyseniz, bulut platformlar\u0131n\u0131n (Azure App Service gibi) konteyner da\u011f\u0131t\u0131m \u00f6zellikleri sayesinde API'nizi dakikalar i\u00e7inde canl\u0131ya alabilirsiniz. \u0130lk kurulum ve \u00f6\u011frenme s\u00fcreci bu 5 dakikaya dahil de\u011fildir, ancak \"canl\u0131ya alma\" ad\u0131m\u0131 ger\u00e7ekten de bu kadar h\u0131zl\u0131 olabilir.<\/p>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"Su kalitesi verilerini yapay zeka ile analiz edip ger\u00e7ek zamanl\u0131 kararlar almak hi\u00e7 bu kadar kolay olmam\u0131\u015ft\u0131. Makine&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-34665","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Going Live: Su Kalitesi ML API&#039;mi Buluta 5 Dakikada Nas\u0131l Da\u011f\u0131tt\u0131m?<\/title>\n<meta name=\"description\" content=\"Su kalitesi verilerini yapay zeka ile analiz edip ger\u00e7ek zamanl\u0131 kararlar almak hi\u00e7 bu kadar kolay olmam\u0131\u015ft\u0131. Makine \u00f6\u011frenimi API&#039;nizi buluta saniyeler i\u00e7inde da\u011f\u0131t\u0131n ve projelerinize h\u0131z kat\u0131n.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Going Live: Su Kalitesi ML API&#039;mi Buluta 5 Dakikada Nas\u0131l Da\u011f\u0131tt\u0131m?\" \/>\n<meta property=\"og:description\" content=\"Su kalitesi verilerini yapay zeka ile analiz edip ger\u00e7ek zamanl\u0131 kararlar almak hi\u00e7 bu kadar kolay olmam\u0131\u015ft\u0131. Makine \u00f6\u011frenimi API&#039;nizi buluta saniyeler i\u00e7inde da\u011f\u0131t\u0131n ve projelerinize h\u0131z kat\u0131n.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-20T08:31:21+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"25 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Going Live: Su Kalitesi ML API&#8217;mi Buluta 5 Dakikada Nas\u0131l Da\u011f\u0131tt\u0131m?\",\"datePublished\":\"2025-11-20T08:31:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/\"},\"wordCount\":4134,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/\",\"name\":\"Going Live: Su Kalitesi ML API'mi Buluta 5 Dakikada Nas\u0131l Da\u011f\u0131tt\u0131m?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-20T08:31:21+00:00\",\"description\":\"Su kalitesi verilerini yapay zeka ile analiz edip ger\u00e7ek zamanl\u0131 kararlar almak hi\u00e7 bu kadar kolay olmam\u0131\u015ft\u0131. Makine \u00f6\u011frenimi API'nizi buluta saniyeler i\u00e7inde da\u011f\u0131t\u0131n ve projelerinize h\u0131z kat\u0131n.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Going Live: Su Kalitesi ML API&#8217;mi Buluta 5 Dakikada Nas\u0131l Da\u011f\u0131tt\u0131m?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Going Live: Su Kalitesi ML API'mi Buluta 5 Dakikada Nas\u0131l Da\u011f\u0131tt\u0131m?","description":"Su kalitesi verilerini yapay zeka ile analiz edip ger\u00e7ek zamanl\u0131 kararlar almak hi\u00e7 bu kadar kolay olmam\u0131\u015ft\u0131. Makine \u00f6\u011frenimi API'nizi buluta saniyeler i\u00e7inde da\u011f\u0131t\u0131n ve projelerinize h\u0131z kat\u0131n.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/","og_locale":"tr_TR","og_type":"article","og_title":"Going Live: Su Kalitesi ML API'mi Buluta 5 Dakikada Nas\u0131l Da\u011f\u0131tt\u0131m?","og_description":"Su kalitesi verilerini yapay zeka ile analiz edip ger\u00e7ek zamanl\u0131 kararlar almak hi\u00e7 bu kadar kolay olmam\u0131\u015ft\u0131. Makine \u00f6\u011frenimi API'nizi buluta saniyeler i\u00e7inde da\u011f\u0131t\u0131n ve projelerinize h\u0131z kat\u0131n.","og_url":"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-20T08:31:21+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"25 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Going Live: Su Kalitesi ML API&#8217;mi Buluta 5 Dakikada Nas\u0131l Da\u011f\u0131tt\u0131m?","datePublished":"2025-11-20T08:31:21+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/"},"wordCount":4134,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/","url":"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/","name":"Going Live: Su Kalitesi ML API'mi Buluta 5 Dakikada Nas\u0131l Da\u011f\u0131tt\u0131m?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-20T08:31:21+00:00","description":"Su kalitesi verilerini yapay zeka ile analiz edip ger\u00e7ek zamanl\u0131 kararlar almak hi\u00e7 bu kadar kolay olmam\u0131\u015ft\u0131. Makine \u00f6\u011frenimi API'nizi buluta saniyeler i\u00e7inde da\u011f\u0131t\u0131n ve projelerinize h\u0131z kat\u0131n.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/going-live-su-kalitesi-ml-apimi-buluta-5-dakikada-nasil-dagittim\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Going Live: Su Kalitesi ML API&#8217;mi Buluta 5 Dakikada Nas\u0131l Da\u011f\u0131tt\u0131m?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34665","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=34665"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34665\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34665"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34665"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34665"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}