AWS Lightsail ile Basit Sunucu Kurulumu

Bulut altyapısına geçmek isteyip de nereden başlayacağını bilmeyenler için AWS Lightsail gerçekten iyi bir başlangıç noktası. EC2’nun karmaşıklığı olmadan, sabit aylık fiyatlarla, birkaç tıklamayla çalışan bir sunucu ayağa kaldırabiliyorsun. Küçük ölçekli projeler, kişisel web siteleri, staging ortamları veya startup MVP’leri için Lightsail tam oturur. Bu yazıda sıfırdan bir Lightsail sunucusu kurup, güvenliğini sağlayıp, üzerine gerçek bir uygulama deploy edeceğiz.

AWS Lightsail Nedir ve Ne Zaman Kullanılır

Lightsail, AWS’nin “basit cloud” ürünü. VPC, subnet, security group, IAM role gibi kavramlarla boğuşmak istemiyorsan, ama yine de AWS altyapısının güvenilirliğini istiyorsan Lightsail doğru seçim. Aylık 3.5 dolardan başlayan planlarla, öngörülebilir bir fiyatlandırma modeli sunuyor.

Şunu net söyleyelim: Lightsail, büyük ölçekli üretim ortamları için tasarlanmamış. 100 sunucuyu yönetmek, otomatik ölçeklendirme yapmak, karmaşık ağ topolojileri kurmak istiyorsan EC2 ve ilgili servisler daha uygun. Ama şu senaryolar için Lightsail birebir:

  • Küçük bir şirketin web sitesi
  • WordPress kurulumu
  • Geliştirici test ortamı
  • Küçük bir API servisi
  • Freelance projelerin staging sunucusu

Hesap Hazırlığı ve İlk Adımlar

AWS hesabın varsa direkt Lightsail konsoluna gidebilirsin. Yoksa önce AWS hesabı aç, kredi kartı bilgilerini gir. Lightsail’in ücretsiz deneme süresi var: İlk 3 ay için bazı planlar ücretsiz.

Lightsail konsoluna giriş yaptıktan sonra seni oldukça sade bir arayüz karşılar. EC2 konsoluna kıyasla neredeyse boş gibi görünür, bu kasıtlı. Şimdi instance oluşturmaya başlayalım.

Create instance butonuna tıkla. Karşına birkaç temel seçenek çıkacak:

  • Instance location: Sunucunun hangi AWS bölgesinde çalışacağı. Türkiye’ye yakın olması için Frankfurt (eu-central-1) veya Stockholm iyi seçenekler.
  • Platform: Linux/Unix veya Windows. Biz Linux ile devam edeceğiz.
  • Blueprint: İşletim sistemi veya hazır uygulama şablonu. OS only seçip Ubuntu 22.04 LTS kullanalım.
  • Instance plan: Donanım özellikleri ve fiyat.

Instance Planı Seçimi

Lightsail planları şu şekilde yapılanmış:

  • 3.5 USD/ay: 512 MB RAM, 1 vCPU, 20 GB SSD, 1 TB transfer
  • 5 USD/ay: 1 GB RAM, 1 vCPU, 40 GB SSD, 2 TB transfer
  • 10 USD/ay: 2 GB RAM, 1 vCPU, 60 GB SSD, 3 TB transfer
  • 20 USD/ay: 4 GB RAM, 2 vCPU, 80 GB SSD, 4 TB transfer
  • 40 USD/ay: 8 GB RAM, 2 vCPU, 160 GB SSD, 5 TB transfer

WordPress gibi basit bir site için 5 dolar planı yeterli. Node.js veya Python uygulaması çalıştıracaksan 10 dolar planı daha rahat bir deneyim sunar. MySQL veya PostgreSQL kullanacaksan belleğe dikkat et, 1 GB RAM sınırda kalır.

Ben bu yazı boyunca 10 USD planını kullanacağım, pratik bir senaryo için uygun bir denge noktası.

SSH Key Pair Oluşturma

Sunucuya bağlanmak için SSH key kullanacağız. Lightsail’de “Create new” seçeneğiyle key pair oluşturabilir veya mevcut public key’ini yükleyebilirsin.

Kendi makinende key oluşturmak için:

ssh-keygen -t ed25519 -C "lightsail-blog-sunucu" -f ~/.ssh/lightsail_blog

Bu komut iki dosya oluşturur:

  • ~/.ssh/lightsail_blog (private key, kimseyle paylaşma)
  • ~/.ssh/lightsail_blog.pub (public key, Lightsail’e yükleyeceğin)

Public key içeriğini kopyala:

cat ~/.ssh/lightsail_blog.pub

Lightsail konsolunda “Upload existing” seçeneğini seç ve bu içeriği yapıştır. Instance adını da anlamlı bir şey koy: “blog-production” veya “api-staging” gibi.

Create instance butonuna tıkla ve sunucunun ayağa kalkmasını bekle. Genellikle 60-90 saniye içinde “Running” durumuna geçer.

İlk Bağlantı ve Temel Güvenlik Ayarları

Sunucu hazır olduğunda IP adresini göreceksin. Şimdi SSH ile bağlanalım:

ssh -i ~/.ssh/lightsail_blog ubuntu@<SUNUCU_IP_ADRESI>

Bağlantı başarılıysa Ubuntu’nun karşılama mesajını görürsün. İlk iş olarak sistemi güncelleyelim:

sudo apt update && sudo apt upgrade -y
sudo apt autoremove -y

Şimdi temel güvenlik ayarlarına geçelim. Bu adımları atlamak ciddi güvenlik açığı yaratır.

Sistem Kullanıcısı Oluşturma

Ubuntu’da ubuntu kullanıcısıyla çalışmak yerine, kendi kullanıcını oluştur:

sudo adduser sysadmin
sudo usermod -aG sudo sysadmin

Yeni kullanıcıya SSH key kopyala:

sudo mkdir -p /home/sysadmin/.ssh
sudo cp ~/.ssh/authorized_keys /home/sysadmin/.ssh/
sudo chown -R sysadmin:sysadmin /home/sysadmin/.ssh
sudo chmod 700 /home/sysadmin/.ssh
sudo chmod 600 /home/sysadmin/.ssh/authorized_keys

SSH Hardening

SSH konfigürasyonunu sıkılaştıralım:

sudo nano /etc/ssh/sshd_config

Şu değerleri değiştir veya ekle:

Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
AllowUsers sysadmin

Değişiklikleri kaydet ve SSH servisini yeniden başlat:

sudo systemctl restart sshd

Önemli: Mevcut terminal oturumunu kapatmadan önce yeni ayarlarla bağlantı test et:

ssh -i ~/.ssh/lightsail_blog -p 2222 sysadmin@<SUNUCU_IP_ADRESI>

Bağlantı çalışıyorsa güvende demektir.

Lightsail Firewall Yapılandırması

Lightsail’in kendi firewall sistemi var, buna ek olarak sunucu üzerinde de UFW kullanacağız. İki katmanlı firewall iyi bir pratik.

Lightsail Konsolunda Firewall

Instance sayfasında Networking sekmesine git. Varsayılan olarak SSH (22), HTTP (80) ve HTTPS (443) portları açık. SSH portunu 2222 olarak değiştirdiğimiz için:

  • Eski SSH kuralını (port 22) sil
  • Yeni kural ekle: TCP, port 2222
  • HTTP (80) ve HTTPS (443) kurallarını tut
  • Uygulama için özel port kullanacaksan onu da ekle

UFW Kurulumu ve Yapılandırması

Sunucu üzerinde UFW’yi aktif edelim:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

Statik IP Adresi Atama

Lightsail’de sunucuyu yeniden başlattığında IP adresi değişebilir. Bunu önlemek için statik IP (Elastic IP benzeri) tahsis et.

Lightsail konsolunda sol menüden Networking > Create static IP seç. Statik IP’yi oluştur ve instance’ına attach et. Bu işlem ücretsiz, ancak instance’a attach edilmemiş statik IP’ler ücretlendirilir, dikkat et.

Statik IP aldıktan sonra DNS kayıtlarını güncelleyebilirsin.

Gerçek Dünya Senaryosu: Node.js API Kurulumu

Şimdi pratik bir senaryo yapalım. Küçük bir startup’ın REST API’sini Lightsail’e deploy edeceğiz.

Node.js Kurulumu

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
node --version
npm --version

PM2 ile Process Yönetimi

Node.js uygulamalarını production’da direkt çalıştırmak yerine PM2 kullan:

sudo npm install -g pm2

Örnek bir Express uygulaması oluşturalım:

mkdir -p /home/sysadmin/api
cd /home/sysadmin/api
npm init -y
npm install express
cat > /home/sysadmin/api/server.js << 'EOF'
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;

app.use(express.json());

app.get('/health', (req, res) => {
  res.json({ status: 'ok', timestamp: new Date().toISOString() });
});

app.get('/api/v1/info', (req, res) => {
  res.json({
    service: 'lightsail-api',
    version: '1.0.0',
    environment: process.env.NODE_ENV || 'development'
  });
});

app.listen(PORT, () => {
  console.log(`API sunucu ${PORT} portunda calisiyor`);
});
EOF

PM2 ile uygulamayı başlat:

cd /home/sysadmin/api
pm2 start server.js --name "api-service" --env production
pm2 startup systemd
pm2 save

pm2 startup komutu sana bir sudo komutu verecek, onu da çalıştır. Bu sayede sunucu yeniden başladığında uygulama otomatik başlar.

PM2 durum kontrolü:

pm2 status
pm2 logs api-service
pm2 monit

Nginx Reverse Proxy Kurulumu

Node.js uygulamasını direkt 3000 portunda dışarıya açmak yerine, Nginx’i reverse proxy olarak kullanalım:

sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx

Nginx site konfigürasyonu oluştur:

sudo nano /etc/nginx/sites-available/api.example.com
server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
        proxy_read_timeout 90;
    }

    location /health {
        proxy_pass http://localhost:3000/health;
        access_log off;
    }
}

Konfigürasyonu aktif et:

sudo ln -s /etc/nginx/sites-available/api.example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

SSL Sertifikası ile HTTPS

Let’s Encrypt ile ücretsiz SSL sertifikası al:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d api.example.com

Certbot Nginx konfigürasyonunu otomatik günceller. Sertifika yenileme için cron job otomatik kurulur ama test edelim:

sudo certbot renew --dry-run

Lightsail Snapshot ile Yedekleme

Lightsail’in snapshot özelliği, sunucunun tam anlık görüntüsünü almanı sağlar. Önemli bir değişiklik yapmadan önce mutlaka snapshot al.

Konsol üzerinden manuel snapshot alabilirsin, ama otomatik snapshot da kurulumu var. Instance sayfasında Snapshots sekmesine git, Enable automatic snapshots seçeneğini aktif et. Günlük otomatik snapshot alır ve son 7 tanesini saklar.

Snapshot’tan yeni instance oluşturmak da çok basit. Bir snapshot seçip “Create new instance” diyorsun, birkaç dakika içinde aynı konfigürasyona sahip yeni sunucu hazır. Disaster recovery planının basit ama etkili bir parçası.

Monitoring ve Log Yönetimi

Lightsail konsolunda temel metrikler görünür: CPU kullanımı, network trafiği, disk I/O. Alarm kurabilirsin, eşik aşılınca email veya SNS bildirimi gönderir.

Ama sunucu tarafında daha detaylı izleme için birkaç araç kuralım:

sudo apt install -y htop iotop nethogs sysstat

Log takibi için basit bir script:

cat > /home/sysadmin/check_logs.sh << 'EOF'
#!/bin/bash
echo "=== Son 100 Nginx Hata Logu ==="
sudo tail -100 /var/log/nginx/error.log

echo ""
echo "=== Disk Kullanimi ==="
df -h

echo ""
echo "=== Memory Kullanimi ==="
free -h

echo ""
echo "=== PM2 Durumu ==="
pm2 status
EOF

chmod +x /home/sysadmin/check_logs.sh

Fail2ban ile Brute Force Koruması

SSH’ı 2222’ye taşıdık ama yine de Fail2ban kurmak iyi bir pratik:

sudo apt install -y fail2ban
sudo nano /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3

[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3

[nginx-http-auth]
enabled = true
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 5
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo fail2ban-client status

Lightsail DNS Yönetimi

Lightsail kendi DNS servisini de sunuyor, Route 53’e gerek yok küçük projeler için. Konsoldan Networking > DNS zones > Create DNS zone seç.

Domain’ini buraya ekleyip kayıtları yönetebilirsin:

  • A record: Domain’i statik IP’ye yönlendir
  • CNAME: www’yu ana domain’e yönlendir
  • MX: Mail sunucu kaydı
  • TXT: SPF, DKIM, doğrulama kayıtları

DNS zone oluşturduktan sonra Lightsail’in nameserver adreslerini (ns-1.awsdns-xx.com formatında 4 tane) domain kayıt şirketinde nameserver olarak ayarla.

Instance Yönetimi ve Günlük Operasyonlar

Birkaç günlük operasyon notunu paylaşayım.

Sunucuyu yeniden başlatmak:

sudo systemctl reboot

Yeniden başlatma sonrası kontrol listesi:

sudo systemctl status nginx
pm2 status
sudo ufw status
sudo fail2ban-client status

Disk dolunca ne yapacaksın? Lightsail’de disk boyutunu artırma şöyle çalışır: Snapshot al, snapshot’tan daha büyük diskle yeni instance oluştur, statik IP’yi yeni instance’a attach et. Yerinde disk genişletme EC2’daki kadar kolay değil, bu Lightsail’in bir kısıtlaması.

Alternatif olarak büyük dosyalar için Lightsail’in Object Storage servisini kullanabilirsin (S3 benzeri), böylece disk baskısını azaltırsın.

Maliyet Optimizasyonu

Lightsail fiyatları sabit olduğu için büyük sürpriz yaşamazsın ama yine de dikkat edilecekler var:

  • Attach edilmemiş statik IP: Ücretlendirilir, kullanmıyorsan sil
  • Snapshot maliyeti: Otomatik snapshot’lar ek ücret keser, ayda birkaç dolar
  • Transfer aşımı: Planın transfer limitini aşarsan GB başına ücret ödüyorsun. Transfer kullanımını konsoldan takip et
  • Object Storage: Kullandığın kadar ödersin, büyük dosyaları instance diskinde tutma

Aylık maliyetini tahmin etmek için Lightsail fiyatlandırma sayfasındaki hesaplama aracını kullan.

Lightsail’den EC2’ya Geçiş

Projen büyüdüğünde Lightsail’den EC2’ya taşınmak gerekebilir. Bu süreç şöyle işler:

Instance’ın snapshot’ını al. Lightsail konsolunda bu snapshot’ı EC2’ya export edebilirsin (Snapshots sekmesinde “Export to EC2” seçeneği). Export edilen snapshot Amazon EC2 AMI’sına dönüşür ve oradan normal EC2 instance’ı oluşturabilirsin.

Bu geçiş tam anlamıyla seamless değil, bazı konfigürasyonları manuel ayarlaman gerekir. Ama temel sistem, uygulamalar ve veriler aktarılır. Bunu test ortamında dene, production’da direkt yapma.

Güvenlik Checklist

Bu yazıda anlattıklardan bir özet çıkarayım, sunucu kurulumu bittikten sonra şu kontrolleri yap:

  • SSH port değiştirildi ve eski port kapatıldı
  • Root login devre dışı
  • Password authentication kapalı, sadece key kullanılıyor
  • UFW aktif ve sadece gerekli portlar açık
  • Lightsail firewall konfigürasyonu UFW ile uyumlu
  • Fail2ban çalışıyor
  • Otomatik snapshot aktif
  • Sistem güncellemeleri yapıldı
  • Statik IP atandı
  • SSL sertifikası kuruldu ve otomatik yenileme test edildi
  • PM2 startup konfigürasyonu yapıldı

Sonuç

AWS Lightsail küçük ve orta ölçekli projeler için gerçekten iyi bir seçenek. Sabit fiyatlandırma, sade arayüz ve AWS altyapısının güvenilirliği bir arada sunuluyor. Bu yazıda anlattığımız adımlar izlendiğinde, yaklaşık bir saat içinde güvenli ve production’a hazır bir sunucu ayağa kaldırabilirsin.

Dikkat edilmesi gereken kısıtlamalar var elbette: Disk genişletme zahmetli, otomatik ölçeklendirme yok, gelişmiş ağ konfigürasyonu sınırlı. Bunlar sorun olmaya başladığında EC2’ya geçme zamanı gelmiştir. Ama başlangıç için, küçük projeler için ve bütçesi kısıtlı ekipler için Lightsail tam anlamıyla oturuyor.

Bir sonraki adım olarak Lightsail’in managed database servisini inceleyebilirsin. MySQL veya PostgreSQL’i managed olarak alıp instance’ından bağlayabilirsin, böylece veritabanı yönetimi de basitleşir.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir