Serkan Yaşar

Serkan Yaşar

AI | ML Developer

Back-End Developer

Data Scientist
📋

Professional Experience

  • Coşkunöz Holding 📍 Bursa, Türkiye

    Software Developer 🗓️ 2022 - Present

    • Developed and deployed AI-powered solutions in industrial settings, focusing on Generative AI, LLMs, Computer Vision, and Machine Learning to optimize production workflows and quality control.
    • Designed and implemented RAG pipelines using Vektor databases for intelligent document retrieval and domain-specific knowledge integration.
    • Designed and deployed LLM orchestration pipelines with LangChain, CrewAI, and n8n, integrating MCP tools to power intelligent chatbots, document Q&A systems, and AI assistants via Streamlit.
    • Applied LoRA and other parameter-efficient fine-tuning techniques for domain-adapted LLM enhancements.
    • Designed and deployed automated quality inspection systems using YOLO, OpenCV, OCR, and PyTorch, reducing manual checks and improving accuracy by up to 95%.
    • Created AI systems that enabled forklift-human collision detection, resulting in a 90% reduction in workplace accidents, awarded in the MESS Occupational Safety Stars Competition.
    • Built operator monitoring systems that prevented faulty products, winning Tofaş Best Kaizen Award, TİSK Digitalization Award, and Ministry of Industry and Technology Productivity Project Award.
    • Developed edge AI systems on Jetson Nano and Raspberry Pi, enabling low-latency inference for real-time industrial scenarios.
    • Implemented microservices with FastAPI, Django, and .NET Core, and managed API integration and deployment using Docker and CI/CD pipelines.
    • Integrated IoT sensor data and PLC communication (e.g., snap7) for fault detection and signal processing in live production environments.
    • Leveraged SQL, NoSQL, and ORM frameworks to manage complex data flows and enable real-time dashboards via Power BI, Tableau, and Grafana.
    • Used RPA (Robotic Process Automation) to streamline document processing workflows, achieving annual savings of €11,000.
    • Conducted large-scale data processing using Apache Spark, Hadoop, and Kafka, with real-time visualization.
    • Experienced in prompt engineering, LLM model evaluation, and staying up to date with multi-agent architectures, hybrid search, and AI trends.
    • Experienced in leading cross-functional teams and collaborating across departments to deliver end-to-end AI solutions in production environments.
🎓

Education

  • Bursa Technical University 📍 Bursa, Türkiye

    BSc in Mechanical Engineering 🗓️ 2018 - 2023

    • Graduated with GPA 2.97. TEKNOFEST participant with HACİWATT team.
  • Istanbul University 📍 Istanbul, Türkiye

    Associate Degree in Computer Programming 🗓️ 2022 - 2024

    • Focus on software development, backend, databases, and algorithms.
    • Expected graduation with GPA 2.8.
🏅

Certifications

Django Uygulamanızı Azure Sanal Makine Üzerinde Dağıtın




Merhaba Django severler!

Bu yazıda, kendi Django uygulamanızı geliştirdiniz ve şimdi bu harika projenizi internet üzerinde paylaşma vakti geldi. Azure Cloud üzerindeki bir sanal makineye nasıl dağıtılacağınızı öğrenmek istiyor musunuz? İşte adım adım bir rehber!

İlk olarak, Django projemizdeki, statik dosyaları düzenleyecek ve GitHub’da paylaşacak ve paylaşılan projeyi Azure sanal makineye çekeceğiz. Ardından, Azure’da hesap oluşturacağız. Öğrenciler için harika bir avantaj olarak, Azure, öğrencilere özel olarak 100 dolar değerinde ücretsiz kredi sunmaktadır. Bu ücretsiz kredi, projenizi Azure’da geliştirmek ve test etmek için ideal bir fırsat sunuyor. Bir sanal makine oluşturup ayarlarını yapacağız. Domain adresimizi alıp server kurulum aşamalarında izin verilen hostlara ekleyeceğiz. Sanal makine üzerinden bağlantı sağlayacak ve gerekli ayarlamaları yapacak, ardından Gunicorn ve Nginx ile web sunucusunu kurarak sistemi ayağa kaldırmış olacağız. Django uygulamanızı hızla ve güvenle Azure’da yayınlamaya hazır olacaksınız! Şimdi, her bir adımı detaylı bir şekilde inceleyelim.

Bu yazıda bize eşlik edecek olan projemiz ApexChart.js ile oluşturduğum bir Dashboard ekranı projesi olacak.

Django Projesindeki Statik Dosyaları Düzenleme

Picture 1.1 -Django Hierarchy

Django dosya hiyerarşisini anlamak, statik dosyaların düzenlenmesinde kritik bir adımdır. Şekil 1.1’de görüldüğü üzere, Django projesinin dosya yapısını görebilirsiniz. Bu hiyerarşi içinde static klasörü, genellikle ana uygulama dizini içinde bulunur. Bu klasör, CSS, JavaScript, resimler gibi statik dosyalarınızı içermek için kullanılır.

static klasörü içinde her uygulama için ayrı alt klasörler bulunabilir. Bu, projenizi daha organize etmenize ve statik dosyalarınızı belirli bir yapı içinde tutmanıza yardımcı olur. Bu dosya hiyerarşisini kullanarak, projenizdeki statik dosyaları kolayca yönetebilir ve düzenleyebilirsiniz.

Projemizi lokal ortamda geliştirirken, Django geliştirme sunucusu (development server) statik dosyaları işlemek ve HTTP taleplerine cevap vermekle görevlidir. Ancak, uygulamamızı bir sunucuya (örneğin Azure) yayınladığımızda, durum biraz değişir.

Sunucuda çalışan bir Django uygulamasında, genellikle statik dosyaların Django tarafından işlenip servis edilmesi önerilmez. Çünkü sunucu genellikle daha hafif bir web sunucu (Nginx veya Apache gibi) ve/veya bir içerik dağıtım ağı (CDN) kullanır. Bu nedenle, statik dosyaların bu sunucular veya CDN üzerinden servis edilmesi daha etkilidir.

Bu durumu göz önünde bulundurarak, uygulamamızın sunucuda sorunsuz çalışması için statik dosyaları dışarı açmamız gerekmektedir.

Uygulamamızda kullanılan tüm statik dosyalarını (uygulama atlında oluşturulan projeler de dahil ) tek bir static klasörü altında toplayacağız.

Öncelikle projemizin settings.py dosyasında STATIC_ROOT belirlemeliyiz.

STATIC_DIRS değişkenini yorum haline getirelim.

https://serkanyasr.medium.com/media/034e66023f2c00af98173b66d3b27348

Projemizin bulunduğu dizinde kod bloğunu çalıştırarak, tüm statik dosyalarımızın, proje bazlı kırılımlarıyla birlikte, static içinde derlenmesini sağlayalım.

Son olarak projemizde kullandığımız kütüphane gerekliliklerini aktaralım requirements.txt dosyasına aktaralım.

İşlem bu kadar. Projemizi sunucuya atmaya hazırız. Projemizi sanal makineye kolayca aktarabilmek için Git protokolü ile projemizi GitHub reposuna aktaralım.

Domain Adresimizi Belirleyelim

Web sitemizi tanıtabilmek ve erişilebilir kılmak için bir domain adresi seçmemiz gerekiyor. Ücretsiz bir domain alabileceğimiz site.ac websitesine giderek işe başlayalım.

Adım 1: Site.ac’ye Kayıt Olma

  1. site.ac adresine gidin.
  2. “Kayıt Ol” seçeneğini tıklayarak bir hesap oluşturun.
  3. Gerekli bilgileri doldurun ve “Devam Et” seçeneğiyle kaydınızı tamamlayın.

Adım 2: Domain Seçimi ve Kayıt

  1. Giriş yaptıktan sonra, “New domain name” tıklayın
  2. İlgili adımları takip ederek, kullanmak istediğiniz ücretsiz domain adını seçin.
  3. Domain kaydınızı tamamlayın ve site.ac üzerinden bu yeni domaini yönetebileceğiniz bir kontrol paneli oluşturun.

Not: Websitemizi kurulum aşamasını tamamladıktan sonra, DNS ayarlamalarını yapacağız. Bu adımları şu anda gerçekleştirmemize gerek yok. Domain adresimizi belirlemiş olduk.

Azure Hesabı Oluşturma

Adım 1: Azure Portal’a Giriş Yapın Azure portalına buradan erişin ve var olan bir Microsoft hesabıyla giriş yapın veya yeni bir hesap oluşturun.

Adım 2: Yeni Bir Azure Hesabı Oluşturun Portal’a giriş yaptıktan sonra, size uygun paketi seçin ve satın alın. Öğrenciler için buradan 100$ değerindeki kredinizi alabilirsiniz.

Adım 3: Kimlik Bilgilerinizi Girin Gerekli bilgileri (e-posta, ülke/alan, dil vb.) doldurun ve bir kullanıcı adı ve şifre belirleyerek devam edin.

Adım 4: Doğrulama İşlemlerini Tamamlayın Güvenlik amacıyla, belirli doğrulama adımlarını tamamlayarak hesabınızı onaylayın.

Bu adımları tamamladığınızda, artık Azure hesabınızı kullanmaya ve Django projenizi Azure’da yayınlamaya hazırsınız!

Sanal Makine Oluşturma

Azure portal üzerinden Kaynak oluşturmadan Sanal Makineyi seçelim.

Adım 1: Sanal Makine Adı Belirleme Sanal makinenize bir ad verin. Bu ad, otomatik olarak bir kaynak grubu oluşturulmasını sağlayacaktır.

Adım 2: Bölge ve Trafik Yoğunluğu Düzenleme Sanal makinenizin bölgesini, yayınlayacağınız websitenin trafik yoğunluğuna göre belirleyin. Bu, kullanıcılarınıza daha hızlı erişim sağlamak için önemlidir.

Adım 3: Disk ve RAM Boyutlarını Belirleme Websitenizin yoğunluğuna göre disk ve RAM boyutlarınızı ayarlayın. Daha büyük ve yoğun siteler için daha fazla kaynak seçmek performansınızı artırabilir.

Adım 4: İşletim Sistemi Seçimi — Linux Güvenlik ve performans açısından, Linux işletim sistemi tercih edilir. Bu projede Ubuntu 20.04 LTS altyapısını kullanmayı tercih edeceğiz. Linux, açık kaynak olması ve güvenlik konularında sağladığı avantajlar nedeniyle tercih edilmektedir.

SSH (Secure Shell): SSH, güvenli bir şekilde uzaktan erişim sağlayan bir ağ protokolüdür. Bu protokol, bilgisayarlar arasında güvenli veri iletimini ve iletişimini sağlamak için kullanılır. SSH, şifreleme ve kimlik doğrulama yöntemleriyle bilinen bir protokoldür ve genellikle uzak sunuculara güvenli bağlantılar kurmak için kullanılır.

Şimdi, Windows kullanıcıları için SSH anahtarı nasıl oluşturulur ve alınır detaylarına geçelim:

  1. Git Bash’i İndirin ve Kurun:
  2. Git Bash’i Açın ve sırayla komutları girin:

Sanal makinemizin kullanıcı adını belirleyelim ve kopyaladığımız SSH anahtarını ilgili alana yapıştıralım.

Azure’da sanal makine oluştururken karşımıza çıkan Gelen Bağlantı Noktaları ayarı, sanal makinemizin hangi ağ bağlantı noktalarından genel internet üzerinden erişilebileceğini belirlememize olanak tanır. Bu ayarı özelleştirirken, işlevselliğinizi ve güvenliğinizi ihtiyacınıza uygun şekilde yapılandırabilirsiniz.

HTTP genellikle web siteleri tarafından kullanılan standart bir protokoldür ve genellikle 80. bağlantı noktasında çalışır. HTTPS ise güvenli iletişim sağlar ve genellikle 443. bağlantı noktasında çalışır. Bu nedenle, bir web sunucu barındıran bir sanal makine, genellikle HTTP (80) ve HTTPS (443) bağlantı noktalarını kullanır.

Bu noktada gözden geçir ve oluşturma işlemi tamalayalım. Diğer adımlardaki işlemler default olarak belirlenmekte olup projenizin yeterliliklerini karşılayabilmesi için değişiklikler yapabilirsiniz.

Bağlantı Sağlama:

Git Bash uygulamasını açın:

  • Burada azureuser, sanal makinenize bağlanmak için kullandığınız kullanıcı adıdır. Belirlediğiniz kullanıcı adı ile değiştiriniz.
  • <sanal_makine_ip_adresi> kısmını, Azure portalındaki sanal makinenizin IP adresiyle değiştirin.

SSH anahtarımızı Sanal makineyi oluşturken girdiğimiz için bağlantıyı sağlamış olacağız.

  1. Ubuntu paket arşivini güncelleyelim, Python ve diğer gereksinimlerinin kurulumunu yapalım

sudo -H pip3 install — upgrade pip hata almanız durumunda:

export LC_ALL="en_US.UTF-8" çalıştırın ve sonra tekrar deneyin.

2. Django projesini GitHub’dan kopyalayalım.

3. Proje dizinine geçme ve venv adlı Sanal Python Ortamının oluşturulması

4. Sanal Ortamın aktif edilmesi

5. Proje bağımlılıklarının yüklenmesi

6. Gunicorn yüklenmesi

Django Yayın Ortamı Ayarları

jango’nun DEBUG modu, hata sayfalarını ve hata ayrıntılarını web tarayıcılarına gösterir. Bu bilgiler, geliştirme sırasında hata ayıklamayı kolaylaştırır ancak yayın ortamında bu bilgilerin genel internete sızmasını önlemek önemlidir. DEBUG modu False yapıldığında, hata sayfaları daha sınırlı bir şekilde ve güvenli bir biçimde sunulur. Nano operetörü ile Settings.py dosyasını açalım ve DEBUG = False olarak ayarlayalım.

Websitemiz sadece izin verilen alan adlarında ya da IP adreslerinde çalışır. Bu yüzden ALLOWED_HOSTS listesinin içine yönlendireceğimiz alan adları ve sanal makinemizin IP adresini yazalım. Domain adresi olarak belirlediğimiz alan adlarını da ekleyelim. Bu sayede sunucumuz bu adreslerlerden gelecek olan isteklere cevap verecektir.

https://serkanyasr.medium.com/media/b701a2094d8e90f38528a49fb34d298b

Dosyayı kaydetmek için CTRL + X yaptıktan sonra y harfine basıp, enter tuşuna basalım.

Django sunucusu ile sitemizi 80 portu üzerinden test edelim. Öncelikle 80 portunu aktif edelim

  • Ardından, Django uygulamanızı 80 portunda çalıştırabilirsiniz:

Sanal makine adresimize 8000 portu üzerinden tarayıcımızdan istek gönderelim. http://20.68.173.10:8000/

Web sitemiz başarıyla yüklendi, ancak statik dosyalarımız (CSS, JavaScript, resimler, vb.) Django tarafından servis edilmediği için sitemiz sadece temel HTML yapısında görüntülendi. Bu sorun, genellikle geliştirme aşamasında karşılaşılan yaygın bir durumdur.

Neden Statik Dosyalar Servis Edilmiyor?

Django geliştirme sunucusu (python manage.py runserver) genellikle statik dosyaları servis etmez. Bu, geliştirme aşamasında sunucunun performansını artırmaya yönelik bir tercihtir. Ancak, yayın ortamında statik dosyalar genellikle bir web sunucusu (örneğin Nginx veya Apache) veya bir CDN (İçerik Dağıtım Ağı) tarafından servis edilir.

Gunicorn ve Nginx ile Web Sunucusunu Kurma

Gunicorn (Green Unicorn): Gunicorn, Python web uygulamalarını çalıştırmak için tasarlanmış bir WSGI (Web Server Gateway Interface) sunucusudur. Gunicorn, özellikle performansı, güvenilirliği ve hızlı dağıtımıyla bilinir. Adını, Python’un maskotu olan “unicorn”dan alır ve “green” kelimesi, Python dilinde gelişmiş bir çoklu iş parçacıklı (multi-threaded) yaklaşım kullanmasından gelir. Gunicorn uygulama ve web sunucusu arasında bir arayüz görevi görür, bu da web uygulamasının hızlı ve etkili bir şekilde çalışmasını sağlar.

Gunicorn ile websitemizi ayağa kaldıralım

Sanal Makinemiz de Python ortam değişkenin aktif olduğunu ve manage.py dosyasının bulunuduğu dizinde olduğumuzdan emin olalım.

Web sitemize tekrar istek gönderdiğimizde başarılı bir şekilde yüklendiğini göreceğiz. Ancak, Gunicorn servisini arka plan servisi olarak sürekli çalışacak şekilde ayarlamamız gerekiyor. Bu sayede sanal makinemiz kapatıldığında veya baştan başlatıldığında sitemiz aktif olarak çalışacaktır.

Sanal ortamı deactivate edelim ve nano editörü ile servis dosyamızı oluşturalım.

Dosya içeriğini kendi projemize göre düzenleyelim.

Dosyayı kaydetmek için CTRL + X yaptıktan sonra y harfine basıp, enter tuşuna basalım.

Gunicorn servisini aktif etme:

Gunicorn servisinin çalışıp çalışmadığını test edelim:

Active (running) . Muhteşem aktif olarak çalışmaktadır.

NGX YAPILANDIRMASI

  1. Nginx sunucu bloğu açma:

Dosya içeriğini kendi projemize göre düzenleyelim. Server name kısmına Sanal makinemizin IP adresi, domain adreslerimizi aralarından bir boşluk bırakacak şekilde ekleyelim.

Dosyayı kaydetmek için CTRL + X yaptıktan sonra y harfine basıp, enter tuşuna basalım.

Nginx dosyasını aktif etmek için dosyayı sites-enabled dizinine link olarak verme

Nginx yapılandırma dosyalarında syntax hatası olup olmadığını kontrol etme

Başarılı bir şekilde oluşturduk.

Değişiklilerin aktife olabilmesi içn Nginx sunucusunu yeniden başlatalım

Kullanılmayacak olan 8000 portunu kapatalım ve Nginx kurallarını aktif edelim

Web sitemiz başarı bir şekilde yüklendi.

Web Sitemizi Alan Adına Yönlendirme

Azure portal üzerinde DNS bölgeleri ayarlarını yaparak, web sitemizi belirlediğimiz alan adına yönlendirebiliriz.

  1. Azure portalına giriş yapın ve sol üst köşede bulunan “Azure Hizmetleri” sekmesine gidin.
  2. Arama çubuğuna “DNS bölgeleri” yazın ve ilgili seçeneği seçin.
  3. “Yeni DNS bölgesi ekle” seçeneğini tıklayarak yeni bir DNS bölgesi oluşturun.
  4. Karşınıza çıkan pencerede, gerekli bilgileri doldurun:
  • DNS adı: Yönlendirmek istediğiniz alan adı.
  • Kaynak grubu: DNS bölgesini oluşturmak istediğiniz kaynak grubu.
  • DNS tipi: Genellikle “Public” olarak seçilir.

5. “Gözden geçir ve oluştur” seçeneğine tıklayın ve ardından “Oluştur” butonuyla işlemi tamamlayın.

Bu adımları takip ederek, Azure portal üzerinde yeni bir DNS bölgesi oluşturmuş olacaksınız. Bu DNS bölgesi, web sitenizin belirlediğiniz alan adına yönlendirilmesini sağlayacak.

Dağıtım işlemi başarıyla tamamlandıktan sonra, web sitenizi belirlediğiniz alan adına yönlendirmek için aşağıdaki adımları izleyebilirsiniz:

  1. “Kaynaklara Git” seçeneğine tıklayın.
  2. Sol üst köşede bulunan “Yeni Kayıt Kümesi Ekle” seçeneğine tıklayın.
  3. Ad bölümüne “www” yazın.
  4. IP adresi kısmına sanal makinenizin IP adresini ekleyin.
  5. Yaptığınız değişiklikleri kaydedin.

Bu işlem, belirlediğiniz alan adına gelen www alt alanının, sanal makinenizin IP adresine yönlendirilmesini sağlar. Artık web siteniz, belirlediğiniz alan adı üzerinden erişilebilir durumda olacaktır.

DNS adreslerimizi tamamladık. Azure portal üzerinde işlemlerimiz tamamlandı.

site.ac websitesine gidelim ve domain paneline ulaşalım. Belirlediğimiz alan adının DNS ayarlarını düzenleyelim.

DNS tanımlamayı seçelim ve devam edelim.

NS-1 ve NS-2 adlarında servis sağlayacımızın bizlere vermiş olduğu adresleri girmemiz gerekmektedir. Kayıt kümesi eklediğimiz alandan ilgili değerleri alalım ve kayıt edelim.

Websitemizi Kontrol Edelim

Şimdi, belirlediğimiz alan adı üzerinden sitemize istek gönderelim. Web sitemiz başarılı bir şekilde yüklendi! Tebrikler! 🚀😊

Bu rehberi takip ederek Django uygulamanızı Azure Cloud üzerinde başarıyla dağıttınız. Tebrikler! Artık web siteniz, belirlediğiniz alan adı üzerinden erişilebilir durumda.

GitHub Repo: Django-DashBoard

Başarılar… 🚀💻