Geliştirme Ortamını Üretime Entegre Etmek: EC2 Ortamınıza Bir dev Alt Alan Adı Ekleme
Modern yazılım geliştirme süreçlerinde, üretim ortamına benzer bir geliştirme veya hazırlık (staging) ortamına sahip olmak kritik öneme sahiptir. Bu, yeni özelliklerin, hata düzeltmelerinin ve güncellemelerin canlı sisteme zarar vermeden kapsamlı bir şekilde test edilmesini sağlar. Bu makalede, mevcut bir AWS EC2 üretim ortamınıza dev alt alan adı ekleyerek bu boşluğu nasıl kapatacağınızı, altyapıdan DNS yapılandırmasına kadar tüm adımları detaylı bir şekilde inceleyeceğiz. Bu yaklaşım, geliştirme ve test süreçlerinizi daha güvenli, verimli ve kontrol edilebilir hale getirecektir.
Neden Bir dev Alt Alan Adına İhtiyaç Duyarız?
Üretim ortamına doğrudan müdahale etmek, ciddi riskler taşır ve potansiyel kesintilere yol açabilir. Bir dev alt alan adı oluşturmak, bu riskleri minimize ederken geliştirme sürecine esneklik ve güvenlik katar.
Güvenli Test Ortamı
Yeni kod değişikliklerini, veritabanı şema güncellemelerini veya altyapı değişikliklerini üretim ortamını etkilemeden test etmek için izole bir ortam sağlar. Bu sayede olası hatalar canlı kullanıcılar tarafından fark edilmeden önce tespit edilip düzeltilebilir.
Geliştirme ve İşbirliği Kolaylığı
Geliştiricilerin, üretim ortamına yakın bir ortamda çalışmalarını ve birbirlerinin değişikliklerini entegre etmelerini kolaylaştırır. Farklı özellik dalları (feature branches) bu ortamda birleştirilip test edilebilir. Bu, özellikle birden fazla geliştiricinin çalıştığı projelerde koordinasyonu artırır.
Performans ve Yük Testleri
Yeni özelliklerin veya altyapı değişikliklerinin performans üzerindeki etkilerini ölçmek için kullanılabilir. Üretim ortamının bir kopyası üzerinde yapılan yük testleri, canlıya çıkmadan önce potansiyel darboğazları ortaya çıkarabilir.
Hızlı Geri Dönüş ve İterasyon
Geliştiriciler, yaptıkları değişikliklerin anında dev ortamında görünmesini sağlayarak hızlı geri dönüşler alabilir ve iterasyon süreçlerini hızlandırabilirler. Bu, Agile ve DevOps yaklaşımlarının temelini oluşturur.
Altyapı Hazırlığı: EC2 ve Güvenlik
dev ortamınız için üretim ortamınıza benzer bir altyapı kurmak, tutarlılık ve güvenilirlik açısından önemlidir. Bu bölümde, gerekli AWS bileşenlerini ve güvenlik ayarlarını ele alacağız.
Yeni Bir EC2 Örneği Oluşturma
dev ortamınız için mevcut üretim EC2 örneğinizin bir kopyasını veya benzer özelliklere sahip yeni bir EC2 örneği başlatmanız gerekecektir. AMI (Amazon Machine Image) kullanarak mevcut üretim sunucunuzun bir anlık görüntüsünü alıp bundan yeni bir örnek başlatmak en pratik yoldur. Bu, işletim sistemi, kurulu yazılımlar ve bağımlılıklar açısından tutarlılık sağlar.
# Mevcut üretim EC2 örneğinizin AMI'sini oluşturun
aws ec2 create-image --instance-id i-xxxxxxxxxxxxxxxxx --name "Production-AMI-$(date +%Y%m%d)" --description "AMI for dev environment"
# Yeni EC2 örneğini oluşturulan AMI'den başlatın
aws ec2 run-instances \
--image-id ami-xxxxxxxxxxxxxxxxx \
--instance-type t3.medium \
--key-name your-key-pair \
--security-group-ids sg-xxxxxxxxxxxxxxxxx \
--subnet-id subnet-xxxxxxxxxxxxxxxxx \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=dev-environment}]'
Güvenlik Grupları ve Ağ Yapılandırması
dev ortamınız için ayrı bir güvenlik grubu (Security Group) tanımlamak iyi bir uygulamadır. Bu, dev ortamına erişimi daha kısıtlı hale getirmenize olanak tanır. Örneğin, sadece belirli IP adreslerinden (geliştirici ofisi IP'leri) SSH (Port 22) ve HTTP/HTTPS (Port 80/443) erişimine izin verebilirsiniz. Üretim ortamıyla aynı VPC (Virtual Private Cloud) içinde olmaları, iç ağ iletişimi açısından avantaj sağlayabilir.
{
"Description": "Security group for dev environment",
"IpPermissions": [
{
"FromPort": 22,
"ToPort": 22,
"IpProtocol": "tcp",
"IpRanges": [
{"CidrIp": "YOUR_OFFICE_IP/32", "Description": "SSH from office"}
]
},
{
"FromPort": 80,
"ToPort": 80,
"IpProtocol": "tcp",
"IpRanges": [
{"CidrIp": "0.0.0.0/0", "Description": "HTTP from anywhere (for testing)"}
]
},
{
"FromPort": 443,
"ToPort": 443,
"IpProtocol": "tcp",
"IpRanges": [
{"CidrIp": "0.0.0.0/0", "Description": "HTTPS from anywhere (for testing)"}
]
}
]
}
Veritabanı ve Diğer Bağımlılıklar
Eğer uygulamanız bir veritabanı kullanıyorsa, dev ortamınız için ayrı bir veritabanı örneği (örneğin, AWS RDS) oluşturmanız veya mevcut veritabanınızın bir kopyasını almanız gerekir. Üretim verilerinin dev ortamına kopyalanması durumunda hassas verilerin maskelenmesi veya anonimleştirilmesi güvenlik açısından kritik bir adımdır. Ayrıca, Redis, SQS, S3 gibi diğer AWS servisleri için de dev ortamına özel kaynaklar tanımlamak önemlidir.
Web Sunucusu Yapılandırması: Nginx ve Apache
dev alt alan adınızın doğru içeriği sunabilmesi için web sunucunuzda (Nginx veya Apache) sanal ana bilgisayar (virtual host) veya sunucu bloğu (server block) yapılandırması yapmanız gerekir.
Nginx ile dev Sunucu Bloğu
Nginx kullanıyorsanız, dev.alanadiniz.com için yeni bir sunucu bloğu oluşturmanız gerekecektir. Bu blok, server_name direktifini kullanarak gelen isteğin dev alt alan adına yönelik olup olmadığını kontrol eder ve ilgili uygulama dizinine yönlendirir.
# /etc/nginx/sites-available/dev.alanadiniz.com
server {
listen 80;
listen [::]:80;
server_name dev.alanadiniz.com;
root /var/www/dev_app; # Geliştirme uygulamanızın kök dizini
index index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
# PHP uygulamaları için:
# include snippets/fastcgi-php.conf;
# fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
# SSL yapılandırması için (Let's Encrypt ile):
# listen 443 ssl http2;
# listen [::]:443 ssl http2;
# ssl_certificate /etc/letsencrypt/live/dev.alanadiniz.com/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/dev.alanadiniz.com/privkey.pem;
# include /etc/letsencrypt/options-ssl-nginx.conf;
# ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
Bu dosyayı sites-enabled dizinine bağlamayı ve Nginx'i yeniden başlatmayı unutmayın:
sudo ln -s /etc/nginx/sites-available/dev.alanadiniz.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
Apache ile dev Sanal Ana Bilgisayar
Apache kullanıyorsanız, dev.alanadiniz.com için yeni bir sanal ana bilgisayar yapılandırması oluşturmanız gerekir. Bu, VirtualHost bloğu içinde ServerName direktifi ile yapılır.
# /etc/apache2/sites-available/dev.alanadiniz.com.conf
ServerAdmin webmaster@localhost
ServerName dev.alanadiniz.com
DocumentRoot /var/www/dev_app # Geliştirme uygulamanızın kök dizini
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
# SSL yapılandırması için (Let's Encrypt ile):
# SSLEngine on
# SSLCertificateFile /etc/letsencrypt/live/dev.alanadiniz.com/fullchain.pem
# SSLCertificateKeyFile /etc/letsencrypt/live/dev.alanadiniz.com/privkey.pem
# Include /etc/letsencrypt/options-ssl-apache.conf
Bu yapılandırmayı etkinleştirmek ve Apache'yi yeniden başlatmak için:
sudo a2ensite dev.alanadiniz.com.conf
sudo apache2ctl configtest
sudo systemctl restart apache2
DNS Yönetimi: AWS Route 53 ile dev Alan Adı
dev alt alan adınızın doğru EC2 örneğine yönlendirilmesi için DNS yapılandırmasını AWS Route 53 üzerinden yapmanız gerekmektedir.
Yeni Bir A Kaydı Oluşturma
Route 53 konsolunda, alan adınızın barındırıldığı "Hosted Zone"a gidin. Burada, dev.alanadiniz.com için yeni bir "A kaydı" (A record) oluşturmanız gerekecek. Bu kayıt, dev alt alan adını dev EC2 örneğinizin genel IP adresine veya bir Elastic IP adresine (önerilir) yönlendirecektir. Eğer bir Load Balancer kullanıyorsanız, A kaydını Load Balancer'ın DNS adına yönlendirebilirsiniz (Alias record).
# EC2 örneğinizin genel IP adresini alın (veya Elastic IP kullanın)
aws ec2 describe-instances \
--filters "Name=tag:Name,Values=dev-environment" \
--query "Reservations[].Instances[].PublicIpAddress" \
--output text
# Route 53 için bir değişiklik seti (change batch) oluşturun
# Bu JSON dosyasını kaydedin: route53-dev-record.json
{
"Comment": "CREATE a new A record for dev subdomain",
"Changes": [
{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "dev.alanadiniz.com.",
"Type": "A",
"TTL": 300,
"ResourceRecords": [
{
"Value": "YOUR_DEV_EC2_PUBLIC_IP" # dev EC2 örneğinizin genel IP adresi
}
]
}
}
]
}
# Değişiklik setini uygulayın
aws route53 change-resource-record-sets \
--hosted-zone-id YOUR_HOSTED_ZONE_ID \
--change-batch file://route53-dev-record.json
SSL Sertifikası Yapılandırması
dev ortamınızın güvenli olması için HTTPS kullanmak önemlidir. AWS Certificate Manager (ACM) kullanarak dev.alanadiniz.com için ücretsiz bir SSL sertifikası talep edebilir ve bunu Load Balancer'ınıza veya doğrudan EC2 örneğinizdeki web sunucusuna (Let's Encrypt ile) entegre edebilirsiniz. Let's Encrypt, web sunucusu üzerinde çalışan ve otomatik yenileme sağlayan popüler bir seçenektir.
Uygulama Dağıtımı ve Süreç Yönetimi
dev ortamına uygulama dağıtımı, üretim ortamından farklı bir iş akışı gerektirebilir. Otomasyon, bu süreci daha verimli hale getirir.
Otomatik Dağıtım (CI/CD)
dev ortamına yapılan dağıtımları otomatikleştirmek için CI/CD (Sürekli Entegrasyon/Sürekli Teslimat) boru hattı kurmak idealdir. Git (örneğin, develop veya staging dalı) üzerinde yapılan her değişikliğin otomatik olarak dev ortamına dağıtılmasını sağlayabilirsiniz. AWS CodePipeline, CodeBuild, CodeDeploy gibi servisler bu süreçte size yardımcı olabilir.
# Örnek bir CodeBuild buildspec.yml dosyası
version: 0.2
phases:
install:
commands:
- echo Installing dependencies...
- npm install
build:
commands:
- echo Building the application...
- npm run build
post_build:
commands:
- echo Deploying to dev environment...
# SCP veya AWS CodeDeploy agent kullanarak dağıtım
- rsync -avz --exclude 'node_modules' ./build/ user@dev.alanadiniz.com:/var/www/dev_app/
artifacts:
files:
- '**/*'
Ortam Değişkenleri ve Konfigürasyon
dev ortamınızın üretim ortamından farklı veritabanı bağlantı dizeleri, API anahtarları veya diğer yapılandırma ayarları olacaktır. Uygulamanızın bu farklılıkları ortam değişkenleri (environment variables) veya ayrı yapılandırma dosyaları aracılığıyla yönetmesi önemlidir. AWS Systems Manager Parameter Store veya Secrets Manager, bu hassas bilgileri güvenli bir şekilde saklamak ve dev ortamına iletmek için kullanılabilir.
# dev ortamı için .env dosyası örneği
DB_HOST=dev-database.xxxxxxxx.eu-central-1.rds.amazonaws.com
DB_USER=dev_user
DB_PASSWORD=dev_password
APP_ENV=development
Güvenlik, İzleme ve En İyi Uygulamalar
dev ortamı, üretim kadar kritik olmasa da, yine de güvenlik ve izleme açısından dikkatli olunmalıdır.
Erişim Kontrolü ve Kimlik Yönetimi
dev ortamına erişimi sadece yetkili geliştiriciler ve test ekipleriyle sınırlayın. IAM rolleri ve politikaları kullanarak EC2 örneklerine, veritabanlarına ve diğer AWS kaynaklarına erişimi sıkı bir şekilde yönetin. SSH anahtar çiftlerini güvenli bir şekilde saklayın ve düzenli olarak denetleyin.
Günlük Kaydı ve İzleme
dev ortamındaki uygulamanızın ve sunucunuzun performansını ve hatalarını izlemek için AWS CloudWatch veya ELK Stack gibi araçları kullanın. Hata günlüklerini (error logs) düzenli olarak kontrol etmek, sorunları erken aşamada tespit etmenizi sağlar. dev ortamında dahi metrikler ve alarmlar kurmak, beklenmedik durumları hızla fark etmenize yardımcı olur.
Maliyet Optimizasyonu
dev ortamları genellikle sürekli çalışır durumda kalması gerekmeyen ortamlardır. Kullanım dışı zamanlarda (gece veya hafta sonları) EC2 örneklerini durdurarak veya küçülterek maliyetleri optimize edebilirsiniz. AWS Instance Scheduler gibi araçlar bu otomasyonu sağlayabilir. Ayrıca, dev ortamı için daha küçük ve daha az güçlü EC2 örnekleri seçmek de maliyetleri düşürecektir.
# Belirli bir EC2 örneğini durdurma
aws ec2 stop-instances --instance-ids i-xxxxxxxxxxxxxxxxx
# Belirli bir EC2 örneğini başlatma
aws ec2 start-instances --instance-ids i-xxxxxxxxxxxxxxxxx
Sonuç
Bir dev alt alan adı oluşturarak üretim EC2 ortamınıza eklemek, yazılım geliştirme ve dağıtım süreçlerinizi önemli ölçüde iyileştiren stratejik bir yatırımdır. Bu makalede ele aldığımız adımları takip ederek, güvenli, izole ve verimli bir geliştirme ortamı kurabilir, yeni özellikleri ve hata düzeltmelerini güvenle test edebilir ve nihayetinde daha sağlam bir üretim ortamı sağlayabilirsiniz. Unutmayın, iyi planlanmış bir dev ortamı, uzun vadede zaman, para ve stres tasarrufu anlamına gelir.
Sıkça Sorulan Sorular (SSS)
1. dev ortamı için üretim ortamıyla aynı EC2 örneğini kullanabilir miyim?
Hayır, kesinlikle önerilmez. dev ortamı, üretim ortamından tamamen izole edilmiş olmalıdır. Aynı sunucuyu kullanmak, geliştirme sürecindeki hataların veya performans sorunlarının doğrudan canlı siteyi etkileme riskini taşır. Ayrı bir EC2 örneği veya hatta farklı bir AWS hesabı kullanmak en güvenli yaklaşımdır.
2. dev ortamı için bir Load Balancer (ALB/NLB) kullanmalı mıyım?
Eğer dev ortamınızın yüksek erişilebilirlik veya otomatik ölçeklendirme gibi özelliklere ihtiyacı varsa veya üretim ortamınızı birebir taklit etmek istiyorsanız bir Load Balancer kullanmak faydalı olabilir. Ancak sadece temel testler için tek bir EC2 örneği yeterli olacaktır ve maliyetleri düşürecektir.
3. dev ortamındaki veritabanı verilerini nasıl güncel tutmalıyım?
Üretim veritabanınızın düzenli olarak anonimleştirilmiş veya maskelenmiş bir kopyasını dev ortamına aktarabilirsiniz. Bu işlem otomatikleştirilebilir. Hassas müşteri verilerinin dev ortamında bulunmadığından emin olmak çok önemlidir.
4. dev alt alan adı için SSL sertifikası gerekli mi?
Evet, dev ortamında da HTTPS kullanmak şiddetle tavsiye edilir. Bu, uygulamanızın üretim ortamında nasıl davranacağını daha doğru bir şekilde test etmenizi sağlar ve güvenlik en iyi uygulamalarını takip eder. Let's Encrypt veya AWS Certificate Manager gibi ücretsiz seçenekler mevcuttur.
5. dev ortamının maliyetlerini nasıl optimize edebilirim?
dev EC2 örneklerini sadece ihtiyaç duyulduğunda çalıştırarak (örneğin, mesai saatleri dışında durdurarak), daha küçük instance tipleri seçerek ve gereksiz AWS servislerini kapatarak maliyetleri düşürebilirsiniz. AWS Instance Scheduler gibi araçlar bu durdurma/başlatma işlemlerini otomatikleştirebilir.