Blogchevron_rightSunucu Yönetimichevron_rightKendi Blog Sunucunuzu Kurun: Hugo ve Caddy Rehberi

Kendi Blog Sunucunuzu Kurun: Hugo ve Caddy Rehberi

S
Serversium
calendar_today24 Mayıs 2026
schedule5 dk okuma
Kendi Blog Sunucunuzu Kurun: Hugo ve Caddy Rehberi

Kendi Blog Sunucunuzu Kurun: Hugo ve Caddy Rehberi

Statik site oluşturucu Hugo ve modern web sunucusu Caddy kombinasyonu, blog sunucusu kurmanın en hızlı ve güvenli yollarından birini sunar. Bu rehberde, sıfırdan kendi blog sunucunuzu nasıl kuracağınızı adım adım açıklayacağız.

Neden Hugo + Caddy Kombinasyonu?

Hugo ve Caddy birlikte kullanıldığında, geleneksel dinamik blog platformlarına kıyasla önemli avantajlar sağlar. Araştırmalara göre, web sitesi yüklenme süresindeki her 1 saniye gecikme, kullanıcı memnuniyetini %16 oranında düşürür. Hugo+Caddy ikilisi bu sorunu kökten çözer.

Temel Avantajlar

  • Hız: Hugo, saniyeler içinde binlerce sayfa oluşturabilen en hızlı statik site oluşturucudur
  • Güvenlik: Statik yapı ve Caddy'nin otomatik SSL desteği saldırı yüzeyini minimize eder
  • Basitlik: Veritabanı gerektirmez, bakım maliyetleri düşüktür
  • Performans: Önbellek gerektirmez, CDN entegrasyonu kolaydır

Karşılaştırma: Hugo+Caddy vs Geleneksel CMS

ÖzellikHugo + CaddyWordPressGhost
Sayfa Oluşturma Süresi<1 saniye1-3 saniye0.5-2 saniye
VeritabanıYokMySQL/MariaDBMySQL
Otomatik SSLVarEklenti gerekliEklenti gerekli
Güvenlik AçıklarıMinimalYüksekOrta
Barındırma MaliyetiDüşükYüksekOrta-Yüksek

Ön Gereksinimler

Başlamadan önce aşağıdaki gereksinimleri karşıladığınızdan emin olun:

  • Ubuntu 20.04/22.04 veya Debian tabanlı bir sunucu
  • Root veya sudo erişimi olan bir Linux VPS
  • Temel terminal bilgisi
  • Bir alan adı (domain)

Adım 1: Hugo Kurulumu

Hugo'yu kurmanın birden fazla yolu vardır. En güncel yöntemi kullanalım.

Resmi Yöntemle Kurulum

sudo apt update
sudo apt install -y wget git

# Hugo Extended sürümünü indirin (SCSS desteği için)
wget https://github.com/gohugoio/hugo/releases/download/v0.123.0/hugo_extended_0.123.0_linux-amd64.tar.gz

# İndirilen dosyayı çıkarın
tar -xzf hugo_extended_0.123.0_linux-amd64.tar.gz

# Hugo'yu sistem dizinine taşıyın
sudo mv hugo /usr/local/bin/

# Sürümü kontrol edin
hugo version

Homebrew ile Kurulum (Alternatif)

# Linux'ta Homebrew kurulumu
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Hugo kurulumu
brew install hugo

Adım 2: Blog Sitesi Oluşturma

Hugo kurulduktan sonra ilk blog sitenizi oluşturun.

# Yeni site oluştur
hugo new site benim-blog

# Site dizinine girin
cd benim-blog

# Temel bir tema ekleyin (Ananke teması)
git init
git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke.git themes/ananke

# config.toml dosyasını düzenleyin
echo 'theme = "ananke"' >> config.toml
echo 'baseURL = "https://domain-adiniz.com/"' >> config.toml
echo 'languageCode = "tr"' >> config.toml
echo 'title = "Benim Blogum"' >> config.toml

İlk İçeriği Oluşturma

# Yeni bir blog yazısı oluşturun
hugo new posts/ilk-yazi.md

# İçerik dosyasını düzenleyin
cat > content/posts/ilk-yazi.md << 'EOF'
---
title: "İlk Blog Yazım"
date: 2024-01-15
draft: false
---

Bu benim ilk blog yazım. Hugo ve Caddy kullanarak oluşturdum.

## Giriş

Hugo ile statik site oluşturmak gerçekten çok hızlı.
EOF

Sitenizi yerel olarak test etmek için şu komutu çalıştırın:

hugo server -D

Tarayıcınızda http://localhost:1313 adresine giderek sitenizi görebilirsiniz.

Adım 3: Caddy Web Sunucusu Kurulumu

Caddy, otomatik HTTPS ve basit konfigürasyonu ile öne çıkan modern bir web sunucusudur.

Resmi Repository ile Kurulum

# GPG anahtarını ekleyin
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg

# Repository'yi ekleyin
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list

# Caddy'yi kurun
sudo apt update
sudo apt install caddy

Kurulum Doğrulama

# Caddy versiyonunu kontrol edin
caddy version

# Servis durumunu kontrol edin
sudo systemctl status caddy

Adım 4: Caddy Konfigürasyonu

Caddy'nin blogunuzu sunması için yapılandırma dosyasını düzenleyin.

Caddyfile Düzenleme

sudo nano /etc/caddy/Caddyfile

Aşağıdaki konfigürasyonu ekleyin:

blog.domain-adiniz.com {
    root * /var/www/benim-blog/public
    encode gzip
    file_server
    
    # Log ayarları
    log {
        output file /var/log/caddy/blog-access.log
    }
    
    # Güvenlik başlıkları
    header {
        X-Frame-Options "SAMEORIGIN"
        X-Content-Type-Options "nosniff"
        X-XSS-Protection "1; mode=block"
        Referrer-Policy "strict-origin-when-cross-origin"
        Content-Security-Policy "default-src 'self'"
    }
    
    # 404 hata sayfası
    handle_errors {
        respond "{err.status_code} {err.status_text}"
    }
}

Site Dizini Ayarları

# Hugo çıktı dizinini oluşturun
sudo mkdir -p /var/www/benim-blog

# İzinleri ayarlayın
sudo chown -R $USER:$USER /var/www/benim-blog
sudo chmod -R 755 /var/www/benim-blog

# Hugo'yu bu dizine derleyin
hugo -d /var/www/benim-blog/public

Adım 5: Otomatik Deploy Scripti

Blog içeriğini her güncellediğinizde otomatik olarak derlemek için bir script oluşturun.

cat > deploy.sh << 'EOF'
#!/bin/bash

# Blog kaynak dizini
BLOG_DIR="/home/kullanici/benim-blog"
OUTPUT_DIR="/var/www/benim-blog/public"

echo "Hugo site derleniyor..."
cd $BLOG_DIR
hugo -d $OUTPUT_DIR

echo "Dosya izinleri güncelleniyor..."
sudo chown -R www-data:www-data $OUTPUT_DIR
sudo chmod -R 755 $OUTPUT_DIR

echo "Caddy yapılandırması yenileniyor..."
sudo systemctl reload caddy

echo "Deploy tamamlandı!"
EOF

chmod +x deploy.sh

Adım 6: Otomatik HTTPS

Caddy'nin en büyük avantajlarından biri otomatik SSL sertifikası yönetimidir.

DNS Ayarları

  1. Alan adınızın DNS ayarlarına gidin
  2. A kaydı ekleyin: blogSERVER_IP
  3. Cloudflare kullanıyorsanız, proxy devre dışı bırakın (DNS only modu)

SSL Sertifikası Otomatik Alımı

Caddy, siteye ilk erişimde otomatik olarak Let's Encrypt'ten SSL sertifikası alır. Herhangi bir ek yapılandırma yapmanıza gerek yoktur.

Sertifikayı manuel olarak yenilemek için:

# Sertifikayı manuel alın
sudo caddy trust

# Yapılandırmayı test edin
sudo caddy validate --config /etc/caddy/Caddyfile

Adım 7: Systemd Servisi Oluşturma

Sunucu yeniden başladığında Hugo derleme işleminin otomatik çalışması için bir systemd servisi oluşturun.

sudo nano /etc/systemd/system/hugo-deploy.service

Aşağıdaki içeriği ekleyin:

[Unit]
Description=Hugo Blog Deployment Service
After=network.target

[Service]
Type=oneshot
User=root
WorkingDirectory=/home/kullanici/benim-blog
ExecStart=/home/kullanici/benim-blog/deploy.sh
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

Timer ekleyerek düzenli deploy yapabilirsiniz:

sudo nano /etc/systemd/system/hugo-deploy.timer

[Unit]
Description=Hugo Blog Deployment Timer

[Timer]
OnBootSec=5min
OnUnitActiveSec=1h
Persistent=true

[Install]
WantedBy=timers.target

Servisi etkinleştirin:

sudo systemctl daemon-reload
sudo systemctl enable hugo-deploy.timer
sudo systemctl start hugo-deploy.timer

Performans Optimizasyonu

Blogunuzun hızını artırmak için aşağıdaki optimizasyonları uygulayabilirsiniz.

1. Gzip/Brotli Sıkıştırma

Caddy varsayılan olarak gzip sıkıştırmayı etkinleştirir. Brothli için ek konfigürasyon ekleyebilirsiniz.

2. Önbellek Başlıkları

Tarayıcı önbelleklemeyi etkinleştirmek için Caddyfile'a ekleyin:

header /static Cache-Control "public, max-age=31536000"

3. Hugo Optimizasyonları

# config.toml dosyasına ekleyin
[minify]
disableXML = true
minifyOutput = true

[imaging]
resampleFilter = "lanczos"
quality = 80

Güvenlik Yapılandırması

Blog sunucunuzu güvende tutmak için ek önlemler alın.

Firewall Yapılandırması

# UFW'yi etkinleştirin
sudo ufw enable

# Sadece HTTP, HTTPS ve SSH'ya izin verin
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Firewall durumunu kontrol edin
sudo ufw status

Fail2Ban Kurulumu

sudo apt install fail2ban

# Caddy için jail oluşturun
sudo nano /etc/fail2ban/jail.local

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5

[caddy-auth]
enabled = true
port = http,https
filter = caddy-auth
logpath = /var/log/caddy/*.log
maxretry = 5

Yaygın Sorunlar ve Çözümleri

1. Hugo Build Hatası

Problem: "Error: failed to prune categories"

Çözüm: Config dosyasındaki relativeURLs ayarını kontrol edin ve tema uyumluluğunu doğrulayın.

2. Caddy SSL Hatası

Problem: "tls: error fetching ACME account"

Çözüm: DNS kaydının doğru olduğundan emin olun ve Cloudflare proxy'sini devre dışı bırakın.

3. Permission Hatası

Problem: "Permission denied" hataları

Çözüm: Dosya izinlerini düzeltin:

sudo chown -R www-data:www-data /var/www/benim-blog
sudo chmod -R 755 /var/www/benim-blog

Sonuç

Hugo ve Caddy kombinasyonu, kendi blog sunucunuzu kurmanın en modern ve verimli yoludur. Bu rehberde öğrendiğiniz adımlarla:

  • Statik blog sitenizi saniyeler içinde oluşturabilirsiniz

library_booksBenzer İçerikler

Cloud Sunucu Nedir? Avantajları ve Detaylı Rehber
Sunucu Yönetimi
calendar_today5 Nisan 2026
schedule5 dk

Cloud Sunucu Nedir? Avantajları ve Detaylı Rehber

Cloud sunucular, dinamik kaynak dağıtımıyla işletmelerin kesintisiz büyümesini sağlar. Avantajlardan karşılaştırmalara tüm detaylar bu rehberde yer alıyor.

S
Serversiumarrow_forward
Linux vs Windows Sunucu: Hangisi Projeye Uygun?
Sunucu Yönetimi
calendar_today6 Nisan 2026
schedule5 dk

Linux vs Windows Sunucu: Hangisi Projeye Uygun?

Linux ve Windows Sunucu arasındaki teknik farkları, maliyet avantajlarını ve proje uyumluluğunu detaylı olarak karşılaştırıyoruz. Yazılım stack'inize en uygun işletim sistemini seçmek için kapsamlı rehberimizle doğru altyapı kararını verin.

S
Serversiumarrow_forward
Plesk Kurulumu - Ubuntu 24 Üzerinde Adım Adım Rehber
Sunucu Yönetimi
calendar_today16 Nisan 2026
schedule5 dk

Plesk Kurulumu - Ubuntu 24 Üzerinde Adım Adım Rehber

Ubuntu 24 üzerinde Plesk kurulumunu adım adım öğrenin. Bu rehberde sistem gereksinimleri, kurulum adımları ve temel yapılandırma ayarlarını bulabilirsiniz.

S
Serversiumarrow_forward