Skip to content

Instantly share code, notes, and snippets.

@suleymanfatih
Last active December 3, 2025 19:31
Show Gist options
  • Select an option

  • Save suleymanfatih/b61b6468fa217828d28380c73b5f91a8 to your computer and use it in GitHub Desktop.

Select an option

Save suleymanfatih/b61b6468fa217828d28380c73b5f91a8 to your computer and use it in GitHub Desktop.
Docker Nextcloud + Cloudflare Tunnel

🚀 Nextcloud Docker Kurulumu ve Cloudflare Tunnel ile Dış Erişim 🌐


🛠 Docker ve Nextcloud Kurulumu (Debian Uyumlu Sistemler için)

Aşağıdaki komutlar, Debian tabanlı sistemlerde Docker Engine, CLI ve Docker Compose eklentisinin kurulumu için gereklidir.

🔹1️⃣ Sistem Güncelleme ve Gerekli Paketlerin Kurulumu

sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo tee /etc/apt/keyrings/docker.asc >/dev/null
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

🛠️ Çalışma dizini oluşturma ve docker-compose dosyası yazma

mkdir -p /home/dietpi/nextcloud
cd /home/dietpi/nextcloud
nano docker-compose.yml

docker-compose.yml dosyasına aşağıdaki içeriği yapıştırın:

version: '3'
services:
  nextcloud:
    image: nextcloud:apache
    restart: unless-stopped
    ports:
      - 8080:80
    volumes:
      - nextcloud_data:/var/www/html
    environment:
      - NEXTCLOUD_ADMIN_USER=admin          # 👤 Nextcloud admin kullanıcı adı
      - NEXTCLOUD_ADMIN_PASSWORD=StrongPass123  # 🔒 Güçlü bir parola belirleyin
      - SQLITE_DATABASE=nextcloud.db        # 💾 SQLite veritabanı dosyası

volumes:
  nextcloud_data:

Kaydedip çıkın (CTRL + O, ENTER, CTRL + X).

▶️ Nextcloud konteynerini başlatma

sudo docker compose up -d

Bu komut Nextcloud servisini arka planda çalıştırır. 🐳


2️⃣ Cloudflare Tunnel Kurulumu ve Konfigürasyonu

☁️ Cloudflared aracı kurulumu (Debian/DietPi)

sudo mkdir -p /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared any main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt-get update
sudo apt-get install -y cloudflared

Cloudflare'ın resmi paket deposunu ekleyip cloudflared aracını kurarız. ✅

🔐 Cloudflare hesabıyla oturum açma

cloudflared tunnel login

Tarayıcıda açılan sayfadan hesabınıza giriş yaparak bağlantıyı yetkilendirirsiniz. 🔑

🌉 Tünel oluşturma

cloudflared tunnel create nextcloud-tunnel

Tünelinize bir isim verilir ve UUID ile kimlik bilgileri oluşturulur. UUID'yi not edin. 📝

⚙️ Konfigürasyon dosyası oluşturma

🏠 Ev dizinine config (lokal test için):

Dosya yolu: /home/dietpi/.cloudflared/config.yml

mkdir -p /home/dietpi/.cloudflared
nano /home/dietpi/.cloudflared/config.yml
tunnel: <TUNNEL_UUID>   # Not ettiğiniz UUID ile değiştirin
credentials-file: /home/dietpi/.cloudflared/<TUNNEL_UUID>.json
url: http://localhost:8080   # Nextcloud'un çalıştığı yerel adres

Kaydedip çıkın (CTRL + O, ENTER, CTRL + X).

📡 Global yapılandırma (hostname yönlendirmesi için):

Dosya yolu: /etc/cloudflared/config.yml

mkdir -p /etc/cloudflared
nano /etc/cloudflared/config.yml
tunnel: <TUNNEL_UUID>
credentials-file: /root/.cloudflared/<TUNNEL_UUID>.json

ingress:
  - hostname: nextcloud.orneksite.com
    service: http://localhost:8080
  - service: http_status:404

Kaydedip çıkın (CTRL + O, ENTER, CTRL + X).

Bu dosya, tünelin hangi alan adına ve servise yönlendirme yapacağını belirler. 🔄


3️⃣ DNS Yönlendirmesi (Route) ve Tünel Başlatma

🌐 DNS yönlendirmesi ekleme

cloudflared tunnel route dns nextcloud-tunnel nextcloud.orneksite.com

Tünelinizi alan adınıza bağlar. 🧭

▶️ Tüneli geçici olarak başlatma

cloudflared tunnel run nextcloud-tunnel

Terminal kapatılsa da tünel çalışır, ancak güvenilir değildir. ⚠️

🔄 Cloudflared'ı sistem servisi olarak kurma ve başlatma

cloudflared service install
sudo systemctl start cloudflared

Bu sayede sistem yeniden başlasa bile tünel otomatik çalışır. 🔄


4️⃣ HTTPS Yönlendirme ve Cloudflare Ayarları

  • Cloudflare Tunnel ile gelen trafik Cloudflare sertifikaları ile HTTPS olarak korunur. 🔒

  • Cloudflare panelinden:

    • SSL/TLS Ayarları > Edge Certificates kısmından
      Always Use HTTPS seçeneğini aktif edin.
      Böylece HTTP istekler otomatik olarak HTTPS'ye yönlendirilir. 🔁

Bu, dış erişimde güvenliği artırır ve SSL problemlerini önler. ✔️


5️⃣ Nextcloud Son Kontroller ve Güvenlik Ayarları

📋 Docker konteyner durumunu kontrol edin

docker ps

🐳 Nextcloud konteynerine bağlanın (örn: nextcloud-app)

docker exec -it nextcloud-app bash

📝 Konfigürasyon dosyasını düzenleyin

cd /var/www/html/config
apt update
apt install nano
ls -l
nano config.php

config.php dosyasında trusted_domains kısmını aşağıdaki gibi güncelleyin:

'trusted_domains' =>
array (
  0 => 'localhost',
  1 => 'nextcloud.orneksite.com',  // Cloudflare tunnel ile erişilen domain
),

🔄 Değişiklik sonrası konteyneri yeniden başlatın

docker compose restart

🎯 Özet

  • 📦 Nextcloud Docker ile kuruldu
  • ☁️ Cloudflare Tunnel ile güvenli dış erişim sağlandı
  • 🌐 DNS ile alan adı tünele bağlandı
  • 🔄 Cloudflared sistem servisi yapıldı, otomatik başlatıldı
  • 🔒 Cloudflare panelinden HTTPS zorlandı
  • 🛡️ Nextcloud'da trusted_domains ayarlandı

Her adımı doğru uygularsan, güvenli ve sürekli erişilebilir Nextcloud ortamın hazır! 🚀

@metalkafa
Copy link

Teşekkürler hocam 🎉👍🏼

@zapo20
Copy link

zapo20 commented Dec 3, 2025

Hocam merhaba,

Acaba Cloudflare kurulumu ile birlikte Nginx Proxy Manager (Farklı VM yada LXC Conteyner da) kullanımıda yapsak daha güvenilir olur mu?

Bu konuda mevcut paylaşımınızda nasıl kurmalıyız?

Ek olarak kurulumunuzda yer alan adınlar tüneli local olarak mı yönetiyor? Yoksa external Cloudflare Cloud mı yönetmiş oluyor?

Ellerinize sağlık.
Teşekkür ederim.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment