Dokploy ile Laravel 12 Self-Hosting

Search for a command to run...

No comments yet. Be the first to comment.
Giriş: Neden Result Pattern'e İhtiyacımız Var? Yazılım geliştirmede hata yönetimi kritik bir konudur. Geleneksel olarak, özellikle C# gibi dillerde, hata durumlarını belirtmek için istisnalar (exceptions) kullanılır. Ancak istisnalar, beklenmedik ve ...
Uygulamalarımızın can damarı olan yapılandırma (configuration) ayarlarını nasıl yönetiyorsunuz? Veritabanı bağlantıları, API anahtarları, servis adresleri... Bu değerli bilgileri kodun içine gömmek (hard-coding) kabul edilemez. Peki bu ayarları yönet...
Go’da html/template ile sunucu tarafı HTML üretimini daha düzenli ve güvenli hale getiriyoruz. Layout sistemiyle tekrar eden yapıları azaltıyor, FuncMap ile şablonlara küçük ama etkili yardımcılar ekliyoruz. Arayüzü de TailwindCSS ile sade ve şık tut...
Mikroservis mimarileri, günümüz yazılım dünyasının parlayan yıldızı. Esneklik, ölçeklenebilirlik ve bağımsız geliştirme imkanı sunarken, karmaşık iş mantığını yönetmek ve sürdürülebilir bir kod tabanı oluşturmak çoğu zaman büyük bir meydan okuma hali...

CQRS ve MediatR kulağa karmaşık geliyor olabilir. Ama aslında doğru yerden bakarsan, gayet okunabilir ve sade bir yapı sunuyor. Bu yazıda hiç veritabanına bulaşmadan, sadece bellekte (in-memory) bir ToDo listesi örneğiyle CQRS + MediatR nasıl kullanı...

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?
Laravel 12 uygulamamızı Dokploy üzerinden deploy edebilmek için Dockerfile ve .dockerignore gibi dosyalarla projeyi hazırlamamız gerekiyor.
Laravel 12 projesi (GitHub repo)
Dockerfile
Ubuntu sunucu (IP/domain hazır)
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"]
.dockerignorenode_modules
vendor
storage/logs
storage/framework/sessions
storage/framework/views
storage/framework/cache
.env
.git
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.
Sol menüden SSH Keys bölümüne gel.
Add SSH Key diyerek yeni bir anahtar ekle.
Remote Servers sekmesine gel.
"Setup Server" seçeneğini kullanarak sunucunu oluşturduğun SSH anahtarıyla tanımla.
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.
Sol menüden Projects sekmesine git.
Create Project butonuna tıkla.
Proje adını ve environment’ı belirle.
Oluşturduğun projeye gir.
Sağ üstten Create Service → Application seç.
Sunucunu ve uygulama adını girip Create butonuna tıkla.
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.
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 panelinden A kaydı ile IP'ye yönlendir
Dokploy panelinden domain ekle
SSL otomatik yüklenir (Let's Encrypt)
Proje build edildikten sonra uygulama yayınlanacak:
https://senin-uygulaman.dokploy.app
veya bağladığın domain ile.
Self-hosting artık çok daha erişilebilir. Dokploy, Laravel projeni kolayca kendi sunucunda barındırmanı sağlar.
Kolay kurulum
Git push ile deploy
Otomatik SSL
Docker bilmeyen için eğitici olabilir
Özel durumlar için el ile ayar gerekebilir