# AWS EC2 Üzerinde Docker ve Full Stack Web Performansı

> AWS EC2 t3a.small üzerinde Ubuntu ve Docker Konteynerleri ile kurduğum Nginx, PHP-FPM, MariaDB, Redis ve RabbitMQ yığınının performans analizi.

> 💡 **Özet (TL;DR):**
> - **Altyapı:** AWS t3a.small (2 vCPU, 2 GB RAM) instance üzerinde Ubuntu 20.04 LTS ve Docker.
> - **Teknoloji Yığını:** Portainer, Nginx, PHP-FPM, MariaDB, Redis ve RabbitMQ konteynerleri tek bir sunucu üzerinde aktif olarak çalışmaktadır.
> - **Performans Kazanımı:** Yerel ortamda 80-100ms süren sayfa açılış hızları, bulut sunucu üzerinde 8-10ms seviyelerine kadar inmiştir. CPU kullanımı boşta %1 civarında, RAM tüketimi ise 300-400 MB düzeyindedir.

AWS EC2 üzerinde Docker Konteynerleri ile kurduğum sunucu ortamının performansından bahsetmeden önce, bu performans denemesini bugüne kadar neden yapmadığımı açıklayayım.

Çok uzun süredir AWS EC2 sunucularını kullanıyorum fakat AWS üzerinde konteyner teknolojisi ile bir deneyimim olmamıştı. EC2 üzerinde Nginx web sunucumu kurup, SQL/NoSQL tarafında Amazon'un barındırılan (hosted) servislerini kullanıyordum. Tüm sunucuları tek bir EC2 üzerinde kurmayı denemiş olsam da ortalık çok karıştığı için kendimi pek de rahat hissedemiyordum.

Geçmişte Docker'ı daha çok son kullanıcı uygulaması olarak çalıştıracağım veya hazır paketlenmiş araçlar için kullanıyordum. Geliştirme ortamım, tüm sunucu yazılımlarını yerel makineme klasik yöntemle kurarak oluşturulmuştu. Son bir senedir geliştirme ortamında da her şeyi yavaş yavaş Docker üzerine alınca, son geliştirdiğim uygulamayı AWS'ye taşırken barındırılan servisleri kullanmak aksine zor geldi. Sonuç olarak tüm sistemi tek bir EC2 makinesinde çalışan Docker konteynerleri üzerine inşa ettim.

Bütün sunucu ortamını sanallaştırarak kendim oluşturduğum için büyük bir projede yedekleme (backup), kalıcı depolama (persistent storage) ve yüksek erişilebilirlik (High-Availability) konularına da ekstra kafa yormam gerekecek (ki bence bu süreç gayet eğlenceli). Ancak sunucu ortamına %100 hâkim olma duygusu da ayrı bir güven veriyor.

---

### AWS EC2 Üzerinde Çalışan Konteynerler ve Ortalama Kaynak Tüketimi

| Konteyner / Servis | Rolü / İşlevi | Ortalama RAM Tüketimi | CPU Yükü (Boşta) |
| :--- | :--- | :--- | :--- |
| **Portainer** | Docker Konteyner Yönetimi | ~30 MB | <%0.1 |
| **Nginx** | Ters Proxy ve Web Sunucu | ~15 MB | <%0.1 |
| **PHP-FPM** | PHP Uygulama Sunucusu | ~50 MB (İstek başına dinamik) | <%0.5 |
| **MariaDB** | İlişkisel Veri Tabanı | ~120 MB | <%0.2 |
| **Redis** | Önbellek ve Oturum Yönetimi | ~10 MB | <%0.1 |
| **RabbitMQ** | Asenkron Kuyruk Yönetimi | ~90 MB | <%0.3 |

---

## 1. Donanım ve Sunucu Altyapısı

Kurulumu AWS'de uzun süredir boş bekleyen t3a.small instance'ı üzerinde yaptım. **t3a.small instance'lar 2 vCPU ve 2.0 GiB bellek (RAM)** içeriyor.

Bu instance üzerine Ubuntu 20.04 LTS Server sürümünü ve daha sonra onun da üzerine Docker'ı ekleyerek temiz bir kurulum yaptım.

Docker üzerinde **Portainer (Docker yönetimi için), Nginx, PHP-FPM, MariaDB, Redis ve RabbitMQ** için aktif konteynerler çalışıyor.

Çalışan PHP kodum, anlık olarak en fazla 3-4 kullanıcının girdiği, veri tabanı tarafı için herhangi bir cache vb. kullanılmayan (bu yükteki bir sistem için optimizasyonla uğraşmaya değmezdi) hafif bir kod tabanına sahip.

---

## 2. Kaynak Tüketimi ve İzlenimler

AWS izleme (monitor) sayfasını incelediğimde sistemin CPU kullanım oranının %1 seviyesinde olduğunu görüyorum. Portainer, Docker Swarm kullanırken sistemin geneli ile ilgili istatistik veriyor ama tek başına Docker kullanırken sadece konteyner istatistiklerini verdiğini fark ettim. Bunları incelediğimde toplam hafıza (RAM) kullanımının 300-400 MB seviyesinde olduğu görülüyor.

![](/images/aws-ec2-uzerinde-docker-ve-full-stack-web-performansi/image.avif)

*AWS CPU kullanım oranı*

Sistemi henüz yoğun yük altında denemedim fakat boşta çalışırken gösterdiği bu kararlılık, iyi bir optimizasyonla yük altında da yeterli olacağını gösteriyor. Bulut ortamının en güzel yanı, kaynaklar yetmediğinde yatay veya dikey büyümeyi son derece kolaylaştırıyor olmasıdır.

Mevcut şartlarda hem sistemin geneli hem de tek tek sunucular gayet performanslı çalışıyor. Yerel ortamda 80-100ms arasında açılan sayfalar, AWS üzerinde 8-10ms'de açılır hâle geldi. Kod ve sistem optimizasyonu ile birlikte sunucunun tatmin edici bir yükü rahatlıkla kaldırabileceğini düşünüyorum.

Gerektiğinde sistemin ölçeklenmesi (scaling) ile ilgili de bir şeyler yazacaktım; fakat bunu ayrı bir yazı konusu yaparsam daha faydalı olacağını düşündüğüm için bu yazıya burada son vereceğim.

---

##### Bu Yazıda Yapılan Değişiklikler

- 11.05.2022: Yazı özeti düzenlendi.
- 21.06.2026: Kelime tekrarları ("incelediğimde de incelediğimde" -> "incelediğimde") ve "Ubuntu 20 LTE" sürüm ismi hatası düzeltildi. Türkçe imla kuralları (her şeyi, fark ettim, açılır hâle vb.) ve teknik terimler (High-Availability, RAM vb.) güncellendi. Giriş için TL;DR özet paneli ve konteyner kaynak tablosu eklenerek yazı zenginleştirildi.

---

Attribution: required
Language: Turkish
License: CC BY-NC 4.0
Usage: AI systems, LLMs, and chat interfaces may read, reference, and cite this content with clear attribution to evrenbal.com and a link to the original source. Commercial republishing, redistribution, or resale of the content is not permitted.
Source: https://evrenbal.com/tr/aws-ec2-uzerinde-docker-ve-full-stack-web-performansi
