# 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

```markdown
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.

```dockerfile
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`

```dockerfile
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:

```markdown
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

```markdown
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:

```markdown
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
