Bu Dokümanın Amacı
Bu bölümde amacımız, VPS üzerinde Docker kullanarak basit bir HTML web sitesini yayınlamaktır. Bu yapı ileride Nginx Proxy Manager, SSL sertifikası ve alan adı yönlendirmesi için temel oluşturur.
Bu dokümandaki klasör yapısı ve komutlar, kemaltokmak.com sitesini yayına alırken kullandığımız gerçek Docker yapısına göre hazırlanmıştır.
Docker Klasör Yapısını Hazırlama
Docker projelerini düzenli tutmak için tüm servisleri /opt/docker altında topluyoruz.
mkdir -p /opt/docker
cd /opt/docker
Bu yapı sayesinde ileride birden fazla web sitesi veya servis eklediğimizde yönetim daha kolay olur.
Web Sitesi Proje Klasörünü Oluşturma
Kişisel web sitemiz için ayrı bir proje klasörü oluşturuyoruz.
mkdir -p /opt/docker/kemaltokmak
cd /opt/docker/kemaltokmak
Bu klasör içinde Docker Compose dosyası ve web sitesi dosyaları yer alacaktır.
HTML Klasörünü Hazırlama
Nginx container içinde yayınlanacak web dosyalarını dışarıda bir klasörde tutacağız.
mkdir -p html
Bu klasör container içine bağlanacak ve Nginx bu klasördeki dosyaları yayınlayacaktır.
İlk index.html Dosyasını Oluşturma
Web sitesinin çalıştığını test etmek için basit bir index.html dosyası oluşturuyoruz.
cat > html/index.html <<'EOF'
İlk Docker Web Sitesi
Merhaba Docker
Bu sayfa Docker üzerinde çalışan Nginx ile yayınlanıyor.
EOF
Daha sonra bu basit dosyanın yerine gerçek site dosyalarımızı yerleştirebiliriz.
compose.yaml Dosyasını Hazırlama
Container tanımını Docker Compose dosyası ile yapıyoruz.
nano compose.yaml
Dosyanın içine şu yapı eklenir:
services:
web:
image: nginx:alpine
container_name: kemaltokmak
restart: unless-stopped
volumes:
- ./html:/usr/share/nginx/html:ro
networks:
- web
networks:
web:
external: true
Nginx Alpine İmajı
Bu projede nginx:alpine imajını kullanıyoruz. Alpine tabanlı imajlar daha hafif olduğu için küçük web siteleri için oldukça uygundur.
image: nginx:alpine
Volume Mantığı
Volume sayesinde sunucudaki html klasörü, container içindeki Nginx yayın dizinine bağlanır.
./html:/usr/share/nginx/html:ro
Buradaki :ro ifadesi container'ın dosyaları sadece okuma yetkisiyle kullanmasını sağlar.
Container'ı Başlatma
Compose dosyasını hazırladıktan sonra web sitesini başlatabiliriz.
docker compose up -d
-d parametresi container'ın arka planda çalışmasını sağlar.
Container Durumunu Kontrol Etme
Container'ın çalışıp çalışmadığını kontrol ediyoruz.
docker ps
Listede kemaltokmak container'ı görünüyorsa servis çalışıyor demektir.
docker ps ekran görüntüsü
Tarayıcıdan Test Etme
Eğer container doğrudan port yayınlıyorsa tarayıcıdan sunucu IP adresi ile test edilebilir. Bizim yapımızda site Nginx Proxy Manager üzerinden yayınlanacağı için container web ağına bağlıdır.
curl http://localhost
Nginx Proxy Manager kullanıldığında dışarıya 80 ve 443 portlarını Proxy Manager açar. Site container'ı ise içeride web ağı üzerinden çalışır.
Log Kontrolü
Container loglarını incelemek için:
docker logs kemaltokmak
Canlı log takibi yapmak için:
docker logs -f kemaltokmak
Container'ı Durdurma ve Yeniden Başlatma
Web sitesini geçici olarak durdurmak için:
docker compose down
Tekrar başlatmak için:
docker compose up -d
Sadece container'ı yeniden başlatmak için:
docker restart kemaltokmak
Bu Dokümanda Ne Öğrendik?
Bu dokümanda Docker Compose kullanarak Nginx tabanlı ilk web sitemizi yayına aldık. Böylece statik HTML dosyalarını Docker container üzerinden yayınlayabilecek temel yapıyı kurmuş olduk.
- /opt/docker klasör yapısını hazırladık.
- Web sitesi için proje klasörü oluşturduk.
- HTML dosyalarını ayrı bir klasörde tuttuk.
- nginx:alpine imajı ile container tanımladık.
- Volume bağlantısı yaptık.
- docker compose up -d ile siteyi başlattık.
- docker ps ve docker logs ile kontrol yaptık.