Docker ile Caddy Web Server Kurulum ve Ayarları

Caddy Web Server Kurulum ve ayarlarını yazımızda bulabilirsiniz.

Caddy Web Server docker ile çalıştıracağız.

Docker için docker-compose.yml dosyamızı aşağıdaki gibi hazırlıyoruz. Caddy Web Server ile Lets Encrypt entegre olarak hazırda geliyor. Ancak kendi SSL sertifikamı kullanmak için ben Docker dışında bir klasörde tutuyorum. Docker üzerine Alpine Linux ile gelmekte ve minimal bir alan kaplamaktadır.

version: “3.3”
services:
  lb:
      image: caddy
      container_name: caddy
      restart: always
      ports:
        – 80:80
        – 443:443/tcp
        – 443:443/udp
      volumes:
        – /root/prodDocker/lb/ssl:/etc/ssl
        – /data/caddy/Caddyfile:/etc/caddy/Caddyfile #Docker dışında tutuyorum.
        – /data/caddy/data:/data # Docker dışında tutuyorum.
        – /data/caddy/config:/config # Docker dışında tutuyorum.
      networks:
        – webserver
networks:
  webserver:
     name: webserver
     external: true

/data/caddy/Caddyfile dosyasının içine aktif etmek istediğim domain ayarlarını giriyorum. Sunucu çalıştığında otomatik olarak SSL sertifikasını alıyor ve HTTPS/3 dahil olmak üzere hizmete başlıyor.

React Build veya statik html dosyası çalıştırmak için aşağıdaki gibi yapılandırabilirsiniz.

linuxuzmani.com {
root * /home/user/public_html
file_server
try_files {path} index.html
encode zstd gzip
}

docker-compose up -d komutu ile Caddy Web Server sunucumuz çalışmaya başlıyor.

Caddy Web Server Ayarlanması

Caddy Web sunucunuzda bazı ayarları hem teknik SEO hemde güvenlik için yapmalısınız. Bu ayarları konfigürasyon dosyasında fonksiyon gibi tanımlayıp ilgili domain tanımlarına ekliyoruz.

{
    email [email protected]
}
(static) {
    @static {
file
path *.ico *.css *.js *.gif *.jpg *.jpeg *.png *.svg *.woff *.woff2 *.json
    }
header @static Cache-Control max-age=5184000
}

(security) {
    header {
        Strict-Transport-Security “max-age=31536000; includesubdomains; preload”
        X-Content-Type-Options “nosniff”
        X-Frame-Options “SAMEORIGIN”
        Referrer-Policy “same-origin”
        X-Xss-Protection “1; mode=block”
        -Server
    }
}

(404) {
    handle_errors {
@404 {
    expression {http.error.status_code} == 404
}
handle @404 {
respond * “Not found” 404
}
}
}

(logs) {
log {
        output file /var/log/caddy/{args.0}.log
}
}

(caching) {

    header {
Cache-Control “public, max-age=604800, must-revalidate”
    }

    header / {
        Cache-Control “public, max-age=3600, must-revalidate”
    }
    header /sitemap* {
            Cache-Control “no-cache, no-store, must-revalidate”
    }
}

(cache) {
    @assets {
path   *.webp *.otf *.eot *.woff *.woff2 *.bmp *.jpg *.png *.svg *.gif *.pdf *.css *.js
    }
    @content {
not {
path   *.webp  *.otf *.eot *.woff *.woff2 *.bmp *.jpg *.png *.svg *.gif *.pdf *.css *.js
}
    }
    header @assets cache-control max-age=31536000
    header @content cache-control max-age=0
}

linuxuzmani.com {
root * /home/user/public_html
file_server
try_files {path} index.html
encode zstd gzip
file_server
import static
    import security
    import cache
import logs linuxuzmani.com
}

Bu ayarları ekledikten sonra domain ayarımıda üstteki gibi düzenliyorum ve docker-compose restart ederek etkinleştiriyorum.

Sunucunun genel olarak kabul görmüş ayarları ile çalışır hale getirmiş oldunuz.