cPanel'den AWS EC2'ye Web Sitesi Taşıma Stratejileri: Kapsamlı Bir Kılavuz
Mevcut hosting altyapınızı cPanel tabanlı paylaşımlı veya yönetilen sunuculardan Amazon Web Services (AWS) Elastic Compute Cloud (EC2) üzerine taşımak, ölçeklenebilirlik, performans ve maliyet optimizasyonu açısından kritik bir adımdır. Bu süreç, dikkatli planlama ve doğru stratejiler gerektirir. Bu kılavuz, üretim ortamlarında sıkça karşılaşılan senaryoları ele alarak, kesintisiz bir geçiş için teknik derinliği olan stratejiler sunar.
1. Planlama ve Hazırlık Aşaması
Taşıma öncesinde mevcut web sitesi yapısını, veritabanı boyutlarını, trafik yoğunluğunu ve uygulama bağımlılıklarını detaylıca analiz etmek, sorunsuz bir geçişin temelini oluşturur. Hangi AWS hizmetlerinin kullanılacağı (örneğin, EC2 instance tipi, RDS veritabanı servisi, S3 depolama) bu aşamada belirlenmelidir.
1.1. Mevcut Ortam Analizi
- Web Sitesi Bileşenleri: PHP, Python, Node.js gibi hangi dil/framework kullanılıyor? Hangi web sunucusu (Apache, Nginx) mevcut?
- Veritabanı: MySQL, PostgreSQL gibi hangi veritabanı sistemi kullanılıyor? Boyutu ve sorgu performansı nedir?
- Dosya Yapısı: Yüklenen dosyalar, medya içerikleri, log dosyaları gibi hangi dizinler ve boyutları mevcut?
- E-posta Hizmetleri: Eğer cPanel üzerinden e-posta hizmeti alınıyorsa, bu hizmetin AWS'de nasıl yönetileceği (SES, WorkMail veya üçüncü parti servisler) planlanmalıdır.
- SSL Sertifikaları: Mevcut SSL sertifikalarının türü ve yenileme süreci göz önünde bulundurulmalıdır.
1.2. AWS Kaynak Planlaması
- EC2 Instance Tipi: Uygulamanın CPU, RAM ve ağ gereksinimlerine göre uygun instance ailesi (örneğin, t3.medium, m5.large) seçilir.
- İşletim Sistemi: Amazon Linux 2, Ubuntu, CentOS gibi tercih edilen işletim sistemi belirlenir.
- Depolama: EBS (Elastic Block Store) volume tipi (gp3, io2) ve boyutu belirlenir.
- Veritabanı Servisi: Eğer veritabanı ayrı yönetilecekse, AWS RDS (Relational Database Service) seçenekleri değerlendirilir.
- Güvenlik Grupları (Security Groups): Gerekli portlar (HTTP-80, HTTPS-443, SSH-22) için inbound ve outbound kuralları tanımlanır.
- VPC ve Alt Ağlar: Güvenli ve izole bir ağ ortamı için Virtual Private Cloud (VPC) ve alt ağlar (subnets) yapılandırılır.
2. Taşıma Stratejileri ve Uygulama
2.1. Manuel Taşıma (Küçük ve Orta Ölçekli Siteler İçin)
Bu yöntemde, web sitesi dosyaları ve veritabanı manuel olarak EC2 instance'ına aktarılır. Bu, genellikle daha kontrollü bir süreç sunar.
2.1.1. Dosya Transferi
SSH (Secure Shell) ve SCP (Secure Copy Protocol) kullanılarak dosyalar sunucular arasında güvenli bir şekilde aktarılır. Alternatif olarak, AWS CLI (Command Line Interface) ile S3'e yükleyip oradan EC2'ye çekmek de büyük dosyalar için etkili bir yöntemdir.
# Mevcut sunucudan dosyaları sıkıştır
ssh user@cpanel_ip "tar -czvf website_backup.tar.gz /home/username/public_html"
# Sıkıştırılmış dosyayı yerel makineye çek
scp user@cpanel_ip:website_backup.tar.gz .
# AWS CLI kullanarak S3'e yükle
aws s3 cp website_backup.tar.gz s3://your-bucket-name/website_backup.tar.gz
# EC2 instance'ına dosyayı çek
s3-url=$(aws s3 presign s3://your-bucket-name/website_backup.tar.gz --expires-in 3600)
# EC2 üzerinde
ssh ec2-user@ec2_ip "wget $s3_url -O website_backup.tar.gz"
# EC2 üzerinde dosyaları aç
ssh ec2-user@ec2_ip "tar -xzvf website_backup.tar.gz -C /var/www/html/your-site"
Açıklama: İlk adımda, web sitesi dosyaları SSH üzerinden sıkıştırılır. Ardından, SCP ile yerel makineye alınır. Daha sonra AWS CLI kullanılarak bir S3 bucket'ına yüklenir. Son olarak, EC2 instance'ı üzerinden S3'teki dosyaya erişim sağlanarak indirilip ilgili dizine açılır.
2.1.2. Veritabanı Taşıma
MySQL için mysqldump komutu kullanılır.
# Mevcut sunucuda veritabanı yedeği al
ssh user@cpanel_ip "mysqldump -u db_user -p'db_password' db_name > db_backup.sql"
# Yedek dosyasını yerel makineye çek
scp user@cpanel_ip:db_backup.sql .
# AWS CLI ile S3'e yükle
aws s3 cp db_backup.sql s3://your-bucket-name/db_backup.sql
# EC2 üzerinde
s3-url=$(aws s3 presign s3://your-bucket-name/db_backup.sql --expires-in 3600)
ssh ec2-user@ec2_ip "wget $s3_url -O db_backup.sql"
# EC2 üzerinde veritabanını oluştur ve yedeği yükle
ssh ec2-user@ec2_ip "mysql -u new_db_user -p'new_db_password' new_db_name < db_backup.sql"
Açıklama: cPanel sunucusunda `mysqldump` ile veritabanı yedeği alınır. Bu yedek, S3 üzerinden EC2 instance'ına aktarılır. EC2 üzerinde yeni bir veritabanı oluşturulduktan sonra, `mysql` komutu ile yedek içeri aktarılır.
2.1.3. Web Sunucusu Yapılandırması
EC2 instance'ına Nginx veya Apache gibi bir web sunucusu kurulur ve sanal host (virtual host) veya server block yapılandırmaları yapılır. Bu yapılandırmalar, cPanel'deki `httpd.conf` veya `vhost.conf` dosyalarındaki ayarlar referans alınarak oluşturulur.
# Nginx sanal host örneği (/etc/nginx/sites-available/your-site.conf)
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
root /var/www/html/your-site/public;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # PHP sürümüne göre ayarlanmalı
}
# Diğer yapılandırmalar (SSL, loglar vb.)
}
Açıklama: Bu Nginx yapılandırması, `yourdomain.com` alan adı için web sitesi dosyalarının kök dizinini, varsayılan index dosyasını ve PHP-FPM ile iletişimi tanımlar. `fastcgi_pass` değeri, sunucudaki PHP-FPM sürümüne ve soket yoluna göre ayarlanmalıdır.
2.2. Otomatik Taşıma Araçları ve AWS Hizmetleri
Daha büyük ve karmaşık web siteleri için AWS Migration Hub veya üçüncü parti araçlar kullanılabilir. Ancak, bu araçlar genellikle maliyetli olabilir veya her senaryoyu kapsamayabilir.
2.2.1. AWS Application Migration Service (MGN)
Bu hizmet, mevcut sunucuları (fiziksel veya sanal) AWS EC2'ye blok düzeyinde replike ederek kesinti süresini minimuma indirir. Özellikle sunucu yapısının birebir kopyalanması gereken durumlarda tercih edilir.
2.2.2. Veritabanı Taşıma Hizmeti (AWS DMS)
AWS Database Migration Service (DMS), farklı veritabanı türleri arasında sürekli replikasyon sağlayarak veritabanı geçişlerini kolaylaştırır. Bu, hem başlangıç veritabanı yüklemesini hem de sonrasında yapılacak değişikliklerin senkronizasyonunu sağlar.
2.3. DNS Güncellemesi ve Doğrulama
Taşıma tamamlandıktan sonra, alan adının DNS kayıtları AWS Route 53 veya mevcut DNS sağlayıcınız üzerinden EC2 instance'ının IP adresini gösterecek şekilde güncellenir. DNS yayılımı (propagation) süreci boyunca (genellikle birkaç saat sürer), her iki sunucunun da aktif olması, geçişin aşamalı olarak yapılabilmesini sağlar.
# Mevcut DNS ayarlarını kontrol et (örneğin, dig komutu ile)
dig yourdomain.com A
# AWS Route 53'te A kaydını EC2 instance IP'si ile güncelle
# AWS Management Console üzerinden veya AWS CLI ile yapılabilir.
Açıklama: `dig` komutu, alan adının mevcut IP adresini sorgulamak için kullanılır. DNS yayılımı tamamlandığında, trafiğin yeni EC2 sunucusuna yönlenmesi sağlanır.
3. Üretim Senaryoları ve En İyi Uygulamalar
3.1. Senaryo: Yüksek Trafikli E-ticaret Sitesi
Problem: Yoğun trafik alan ve MySQL veritabanı kullanan bir e-ticaret sitesinin cPanel'den AWS EC2'ye taşınması gerekiyor. Kesinti süresi minimum olmalı.
Çözüm:
- Katmanlı Mimari: EC2 instance'ları yerine, öncelikle bir AWS Load Balancer (ALB) arkasına iki EC2 instance yerleştirilir. Bu, yüksek erişilebilirlik ve ölçeklenebilirlik sağlar.
- Veritabanı Optimizasyonu: MySQL veritabanı, tek bir EC2 instance'ı yerine AWS RDS'e taşınır. RDS Multi-AZ seçeneği ile yüksek erişilebilirlik garanti edilir. AWS DMS kullanılarak veritabanı replikasyonu sağlanır.
- Statik İçerik: Resimler, CSS, JS dosyaları gibi statik içerikler Amazon S3'e taşınır ve CloudFront CDN ile dağıtılır. Bu, EC2 instance'larının yükünü azaltır.
- Aşamalı DNS Geçişi: DNS TTL (Time To Live) değeri düşürülür. Trafiğin küçük bir yüzdesi yeni sunucuya yönlendirilir. Sorunsuz ilerledikçe bu oran artırılır.
- İzleme ve Uyarılar: AWS CloudWatch ile hem EC2 instance'ları hem de RDS veritabanı metrikleri (CPU kullanımı, bellek, ağ trafiği) sürekli izlenir ve anormallikler için uyarılar (alarms) kurulur.
3.2. Senaryo: Özel Uygulama Sunucusu
Problem: Belirli bir framework (örneğin, Django/Python) üzerinde çalışan ve özel bağımlılıkları olan bir uygulama sunucusunun taşınması.
Çözüm:
- EC2 Yapılandırması: EC2 instance'ı üzerine gerekli tüm bağımlılıklar (Python, kütüphaneler, web sunucusu - Gunicorn/uWSGI ve Nginx) kurulur. User data script'leri veya configuration management araçları (Ansible, Chef) kullanılabilir.
- Manuel Dosya ve Veritabanı Taşıma: Yukarıda anlatılan manuel yöntemler (SCP, mysqldump veya pg_dump) kullanılır. Veritabanı yine RDS'e taşınabilir veya EC2 üzerinde ayrı bir veritabanı instance'ı olarak yapılandırılabilir.
- Dockerizasyon (Opsiyonel ama Önerilir): Uygulamanın ve bağımlılıklarının bir Docker imajı oluşturularak, bu imaj EC2 üzerinde container olarak çalıştırılır. Bu, ortam tutarlılığını artırır ve kurulumu basitleştirir.
- CI/CD Entegrasyonu: Jenkins, GitLab CI veya AWS CodePipeline gibi CI/CD araçları ile otomatik deployment pipeline'ları kurulur.
3.3. Güvenlik ve Maliyet Optimizasyonu
- Güvenlik Grupları: Sadece gerekli portlara izin verilir. Gereksiz SSH erişimi kısıtlanır (örneğin, sadece belirli IP adreslerinden).
- IAM Rolleri: EC2 instance'larına, AWS hizmetlerine erişim için IAM rolleri atanır. Erişim anahtarları (access keys) kullanılmaktan kaçınılır.
- AWS WAF (Web Application Firewall): SQL injection, XSS gibi yaygın web saldırılarına karşı koruma sağlar.
- Maliyet İzleme: AWS Cost Explorer ve Budgets ile harcamalar takip edilir. Yedekleme (snapshot) politikaları optimize edilir.
- Otomatik Kapatma: Geliştirme veya test ortamlarındaki EC2 instance'ları için otomatik kapatma kuralları tanımlanır.
cPanel'den AWS EC2'ye geçiş, doğru planlama ve strateji ile hem daha yüksek performans hem de daha iyi maliyet kontrolü sunan bir yatırımdır. Yukarıda detaylandırılan teknikler ve senaryolar, bu dönüşümün başarılı bir şekilde tamamlanmasına yardımcı olacaktır.