Dokploy ile Laravel 12 Self-Hosting


Giriş: Neden Self-Hosting, Neden Dokploy?
Yazılım geliştirme dünyasında her geçen gün daha fazla kişi, uygulamalarını kendi kontrolünde barındırmak istiyor. "Self-hosting" dediğimiz bu yaklaşım, verilerini büyük platformlara emanet etmek istemeyenler için hem özgürlük hem de tam kontrol anlamına geliyor. Ancak self-hosting'in klasik yolu genellikle karmaşık konfigürasyonlar, sunucu yönetimi ve zaman alıcı devops süreçleriyle dolu.
Tam da bu noktada, Dokploy gibi modern araçlar devreye giriyor. Dokploy, hem açık kaynak hem de son derece kullanıcı dostu bir self-hosting platformu. GitHub hesabını bağlayarak projeni birkaç tıklamayla kendi sunucuna kurabiliyorsun. Kendi sunucunda, ama zahmetsizce.
Ben de bu yazıda, Laravel 12 ile geliştirdiğim bir web uygulamasını, Dokploy kullanarak nasıl kendi sunucuma self-host ettiğimi adım adım paylaşacağım. Bu rehberde şu sorulara yanıt bulacaksın:
Dokploy nedir ve nasıl çalışır?
Laravel projesi nasıl deploy edilir?
SSL, veritabanı ve .env ayarları nasıl yapılır?
Deployment sonrası neler kontrol edilmeli?
⚙️ Gereksinimler + Proje Hazırlığı
Laravel 12 uygulamamızı Dokploy üzerinden deploy edebilmek için Dockerfile ve .dockerignore gibi dosyalarla projeyi hazırlamamız gerekiyor.
✅ Gerekli Araçlar
Laravel 12 projesi (GitHub repo)
Dockerfile
Ubuntu sunucu (IP/domain hazır)
🐋 Dockerfile (Octane + Swole)
composer.json dosyasına eklenmesi için projenizde terminal üzerinden
composer require laravel/octane
php artisan octane:install --server=swoole
yarn
yarn build
bir kerelik bu komutları çalıştırmalısınız. Ardından aşağıdaki dockerfile ve .dockerignore dosyalarını proje kök dizininde oluşturun.
FROM php:8.3-cli AS base
# Sistem paketleri ve PHP extension'ları
RUN apt-get update && apt-get install -y \
git unzip curl libpng-dev libonig-dev libxml2-dev \
libzip-dev libpq-dev libcurl4-openssl-dev libssl-dev \
zlib1g-dev libicu-dev g++ libevent-dev procps \
&& docker-php-ext-install pdo pdo_mysql pdo_pgsql mbstring zip exif pcntl bcmath sockets intl
# Swoole GitHub üzerinden kuruluyor
RUN curl -L -o swoole.tar.gz https://github.com/swoole/swoole-src/archive/refs/tags/v5.1.0.tar.gz \
&& tar -xf swoole.tar.gz \
&& cd swoole-src-5.1.0 \
&& phpize \
&& ./configure \
&& make -j$(nproc) \
&& make install \
&& docker-php-ext-enable swoole
# Node.js 18 (vite uyumlu) ve yarn kurulumu
RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \
&& apt-get install -y nodejs \
&& npm install -g yarn
# Composer kurulumu
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
WORKDIR /var/www
# Composer dosyaları ve artisan dosyasını kopyala
COPY composer.json composer.lock artisan ./
# Laravel'in temel dizin yapısını oluştur
RUN mkdir -p bootstrap/cache storage/app storage/framework/cache/data \
storage/framework/sessions storage/framework/views storage/logs
# Composer bağımlılıklarını yükle (post-scripts olmadan)
RUN composer install --no-dev --optimize-autoloader --no-interaction --prefer-dist --no-scripts
# Node dosyaları (vite build için cache)
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile
# Proje dosyalarının geri kalanını kopyala
COPY . .
# Composer post-scripts'leri çalıştır
RUN composer dump-autoload --optimize
# Vite build
RUN yarn build
# Laravel config cache (runtime'da yapılacak, build sırasında değil)
RUN php artisan config:clear \
&& php artisan route:clear \
&& php artisan view:clear
# Dosya izinleri
RUN chown -R www-data:www-data /var/www \
&& chmod -R 775 /var/www/storage /var/www/bootstrap/cache
EXPOSE 9000
# Startup script
RUN echo '#!/bin/bash\n\
# Cache configurations after environment variables are loaded\n\
php artisan config:cache\n\
php artisan route:cache\n\
php artisan view:cache\n\
# Start the server\n\
exec php artisan octane:start --server=swoole --host=0.0.0.0 --port=9000\n\
' > /start.sh && chmod +x /start.sh
CMD ["sh", "-c", "echo 'APP_KEY:' $APP_KEY && php artisan config:cache && php artisan route:cache && php artisan view:cache && php artisan octane:start --server=swoole --host=0.0.0.0 --port=9000"]
⚠️ .dockerignore
node_modules
vendor
storage/logs
storage/framework/sessions
storage/framework/views
storage/framework/cache
.env
.git
🚀 Dokploy Sunucusu Kurulumu
1. Dokploy Kurulumu
Sunucuna SSH ile bağlandıktan sonra aşağıdaki tek satırlık komutla Dokploy'u kurabilirsin:
curl -sSL https://dokploy.com/install.sh | sh
Bu komut Docker dahil tüm bağımlılıkları otomatik olarak kurar. Kurulum tamamlandıktan sonra tarayıcında http://sunucu-ip:3000
adresine giderek bir "root" hesabı oluşturabilirsin.
2. SSH Anahtarı Oluşturma
Sol menüden SSH Keys bölümüne gel.
Add SSH Key diyerek yeni bir anahtar ekle.
3. Sunucu Tanımlama
Remote Servers sekmesine gel.
"Setup Server" seçeneğini kullanarak sunucunu oluşturduğun SSH anahtarıyla tanımla.
4. GitHub Entegrasyonu
Git sekmesine gelerek bir GitHub uygulaması oluştur ve bağlantıyı kur.
Bu bağlantı ile GitHub’daki repolarına erişim sağlar.
🔗 Dokploy Panelinden Projeyi Deploy Etmek
1. Yeni Proje Oluşturma
Sol menüden Projects sekmesine git.
Create Project butonuna tıkla.
Proje adını ve environment’ı belirle.
2. Yeni Servis Tanımlama
Oluşturduğun projeye gir.
Sağ üstten Create Service → Application seç.
Sunucunu ve uygulama adını girip Create butonuna tıkla.
3. GitHub Repo Bağlantısı
- Oluşturulan serviste kaynak kısmına gelip GitHub repo ve branch bilgisini tanımla.
4. Docker Build Ayarları
Build Type olarak Dockerfile seç.
Dockerfile adı:
Dockerfile
Docker context path:
.
Build stage (opsiyonel): -boş bırakıyoruz-
İki tarafı da kaydettikten sonra Deploy butonuna tıklayarak kurulumu başlatabilirsin. Dokploy geri kalan tüm işlemleri (build, deploy, container başlatma) senin yerine halleder.
5. Veritabanı Oluşturma
Aynı projeye bir servis daha ekleyerek Database tipi seçilebilir.
Gerekli bağlantı bilgileri oluşturulduktan sonra
.env
dosyasında bu bilgiler kullanılır.
şu anki Dockerfile dosyasından dolayı, Dokploy üzerinden proje kısmı açıkken ‘open terminal‘ ile terminali açın. Sonrasında güncellenmesi için
php artisan optimize:clear
php artisan optimize
🌐 Domain ve SSL Ayarları
Domain panelinden A kaydı ile IP'ye yönlendir
Dokploy panelinden domain ekle
SSL otomatik yüklenir (Let's Encrypt)
📅 Uygulama Yayında
Proje build edildikten sonra uygulama yayınlanacak:
https://senin-uygulaman.dokploy.app
veya bağladığın domain ile.
🫠 Sonuç
Self-hosting artık çok daha erişilebilir. Dokploy, Laravel projeni kolayca kendi sunucunda barındırmanı sağlar.
Artılar:
Kolay kurulum
Git push ile deploy
Otomatik SSL
Eksiler:
Docker bilmeyen için eğitici olabilir
Özel durumlar için el ile ayar gerekebilir
Subscribe to my newsletter
Read articles from Uygar Öztürk Ceylan directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
