Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Yazı Tipi BoyutlandırıcıAa
  • Anasayfa
  • Teknoloji
    • Siber Güvenlik
    • Yapay Zeka
    • Donanım
    • Bilim
  • Yazılım
  • Savunma & İstihbarat
  • Oyun
  • Yaşam
    • Finans
    • Sinema
    • Dünyadan Haberler
  • İş Birliği
Okuma: Laravel/Statamic paket geliştirme için Docker ortamı
Paylaş
Yazı Tipi BoyutlandırıcıAa
Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Ara
Bizi Takip Et
  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti
© 2026 Teknomers. All Rights Reserved.

Anasayfa » Laravel/Statamic paket geliştirme için Docker ortamı

Yazılım

Laravel/Statamic paket geliştirme için Docker ortamı

teknomers
Son güncelleme: 7 Nisan 2026 00:56
teknomers
Paylaş
Paylaş

Son zamanlarda Vigilant uygulamasına sağlık kontrolleri gibi yeni bir özellik ekledim. Vigilant, bir web sitesinin tüm yönlerini izlemek için tasarlanmış bir açık kaynak izleme uygulamasıdır. Sağlık kontrolleri ile, kritik süreçlerin çalışıp çalışmadığını doğrulayabiliriz, örneğin bir Laravel zamanlayıcı veya Redis bağlantısı. Ayrıca bu boolen türündeki kontrollerin yanı sıra, temel sistem istatistiklerini (cpu, bellek ve disk alanı gibi) sergilememizi sağlayan metrikler de ekledim. Uygulamadaki günlük dosyalarının boyutunu ekleyerek, bu değerler yükseldiğinde bildirim alabiliriz!

Bu sağlık kontrolleri için ortak bir arayüzü tanımlamak üzere bir healthcheck-base paketi oluşturdum. Çerçeveye özgü paketler bunun üzerine inşa edilir ve sorunsuz bir şekilde entegre olurken, Vigilant olmadan da kullanılabilir hale gelir.

Daha sonra Laravel veya Statamic’e özgü kontroller ekleyen ayrı paketler oluşturdum. Bunlar, Vigilant olmadan çalışacak şekilde tasarlanmış, fakat yine de sorunsuz bir entegrasyona sahiptir.


Paket Geliştirme

Paket geliştirme için olağan yöntem, bir projenin mevcut bir dizinine composer deposu olarak eklemek ve composer’ın bir simlink oluşturmasına izin vermektir. Bu işlem hakkında bilgi burada bulunmaktadır ve geliştirme için iyi bir yöntemdir.

Statamic’in temel geliştiricilerinden biri olan Duncan McClean, bu simlinkleri manuel olarak oluşturmak için tether adında bir script oluşturdu. Ben de, her seferinde composer.json dosyasını manuel olarak düzenlemek zorunda kalmamak için, kendim de daha basit bir script yazdım. İşte script:

#!/bin/bash
# Link a local package in a Laravel project
# Usage: lpackage.sh 
projects_path=$HOME/code
package=$1
composer=$(which composer)
vendorTarget=$(find vendor -maxdepth 2 -type d -name $package)
if [ -z "$vendorTarget" ]; then
    echo "Package not found in vendor directory"
    exit 1
fi
packagePath=$(find $projects_path -maxdepth 1 -type d -name $package)
if [ -z "$packagePath" ]; then
    echo "Package not found in projects directory"
    exit 1
fi
echo "Linking $packagePath to $vendorTarget"
rm -rf $vendorTarget
ln -s $packagePath $vendorTarget
echo "Reinstalling package dependencies"
rm -rf $packagePath/composer.lock $packagePath/vendor
$composer --working-dir=$packagePath install &> /dev/null
echo "Done!"

Bu script, proje dizininden çalıştırıldığında, ön koşul olarak hedef paket projenin içinde önceden yüklenmişse, herhangi bir paketi bağlar. Bu script, kasıtlı olarak minimaldir ve yerel kurulumuma özeldir.

Bu yöntemin dezavantajı, temiz bir proje ile başlamadığınızdan, projedeki bir şeyin paketinizi etkileme riski olur. Küçük bir örnek; projenin servis sağlayıcısında Model::unguard( kullanmak, bir paket içinde atlamak kolaydır, ancak paketin başka bir projeye dahil edilmesi durumunda sorun çıkarır.

Yanlış anlamayın, bu yöntemler mükemmel bir şekilde geçerlidir fakat bazen, paketin kesinlikle çalıştığından emin olmak için temiz bir kuruluşa sahip olmak güzeldir.


Docker Ortamı Oluşturalım

Bu ortam bir temiz uygulama kurmalı ve paketimizi yüklemelidir. Tercihen, değişikliklerimiz hemen etkili olması için paketimize simlink yapmalıyız. Ek olarak, MySQL ve Redis gibi çeşitli hizmetleri kurmak için Docker Compose kullanacağım. Statamic durumunda her seferinde bir admin hesabı oluşturmak zorunda kalmamak için birkaç ayar da yapmam gerekir. Öncelikle Dockerfile ile başlayalım; aşırı yükü azaltmak için artisan serve kullanarak istekleri idare edeceğiz ve cron yerine schedule:work kullanacağız. Bu işlemlerin yürütülmesi için supervisor kullanacağız.

Peki, ne yapmamız gerekiyor?

  1. Temel bir görüntü seçin
  2. Gerekli bağımlılıkları ekleyin
  3. Composer’ı yükleyin ve yeni bir Laravel / Statamic projesi oluşturun
  4. Paketimizi yükleyin
  5. Gerekli hizmetleri çalıştırın

Temel görüntümüz ile başlayalım; PHP 8.5 içeren Debian tabanlı php:8.5-cli görüntüsünü kullanmayı tercih ettim. Dockerfile’ımızın başlangıcı şöyle görünüyor:

FROM php:8.5-cli WORKDIR /srv

Daha sonra supervisor ve PHP uzantıları gibi bağımlılıklarımızı kurmamız gerekiyor:

RUN apt-get update \
    && apt-get install -y --no-install-recommends git unzip libzip-dev supervisor \
    && docker-php-ext-install zip pcntl \
    && pecl install redis \
    && docker-php-ext-enable redis \
    && rm -rf /var/lib/apt/lists/*

Composer’ı kurabilir ve projeyi oluşturabiliriz:

COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
RUN composer create-project --no-interaction --no-progress laravel/laravel app
// Veya Statamic için:
RUN composer create-project --no-interaction --no-progress statamic/statamic app

Artık bir projemiz kurulu olduğuna göre paketimizi kopyalayıp diğer yapılandırmaları yerine getirebiliriz:

COPY . /srv/package
WORKDIR /srv/app
RUN composer config minimum-stability dev \
    && composer config prefer-stable true \
    && composer config repositories.statamic-healthchecks path /srv/package \
    && composer require --no-interaction --no-progress govigilant/statamic-healthchecks:dev-main laravel/horizon \
    && php artisan key:generate \
    && php artisan horizon:install

Son olarak, supervisor yapılandırmamızı kopyalayıp başlatabiliriz:

RUN rm -rf /var/www/html \
    && mv /srv/app /var/www/html \
    && mkdir -p /var/log/supervisor
WORKDIR /var/www/html
COPY devenv/supervisord.conf /etc/supervisor/conf.d/healthchecks.conf
EXPOSE 8000
CMD ["supervisord", "-n"]

İşte final Dockerfile’ımız:

FROM php:8.5-cli
WORKDIR /srv
RUN apt-get update \
    && apt-get install -y --no-install-recommends git unzip libzip-dev supervisor \
    && docker-php-ext-install zip pcntl \
    && pecl install redis \
    && docker-php-ext-enable redis \
    && rm -rf /var/lib/apt/lists/*
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
RUN composer create-project --no-interaction --no-progress laravel/laravel app
COPY . /srv/package
WORKDIR /srv/app
RUN composer config minimum-stability dev \
    && composer config prefer-stable true \
    && composer config repositories.statamic-healthchecks path /srv/package \
    && composer require --no-interaction --no-progress govigilant/statamic-healthchecks:dev-main laravel/horizon \
    && php artisan key:generate \
    && php artisan horizon:install
RUN rm -rf /var/www/html \
    && mv /srv/app /var/www/html \
    && mkdir -p /var/log/supervisor
WORKDIR /var/www/html
COPY devenv/supervisord.conf /etc/supervisor/conf.d/healthchecks.conf
EXPOSE 8000
CMD ["supervisord", "-n"]


Statamic Kullanıcısı

Statamic için kontrol paneline giriş yapmak üzere bir kullanıcıya ihtiyacımız var. Bunun için paket deposundaki users dizinini oluşturdum. Dockerfile’da bunu Statamic klasörüne kopyalıyorum: COPY devenv/users/ /srv/app/users/

Supervisor yapılandırması şu şekilde, stdout’un spamlanmasını önlemek için günlükleri ayrı dosyalarda tutuyoruz:

[supervisord]
nodaemon=true
[program:php]
command=php artisan serve --host=0.0.0.0 --port=8000
directory=/var/www/html
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/php.log
stderr_logfile=/var/log/supervisor/php.err.log
[program:horizon]
command=php artisan horizon
directory=/var/www/html
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/horizon.log
stderr_logfile=/var/log/supervisor/horizon.err.log
[program:scheduler]
command=php artisan schedule:work
directory=/var/www/html
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/scheduler.log
stderr_logfile=/var/log/supervisor/scheduler.err.log

Bunu hızlıca inceleyelim, şu hizmetleri başlatıyor:

  • php artisan serve — host=0.0.0.0 — port=8000 — HTTP isteklerini işlemek için
  • php artisan horizon — Paketteki Horizon kontrollerinin çalıştığını doğrulamak için
  • php artisan schedule:work — Paketteki zamanlayıcı kontrolünün çalıştığını doğrulamak için

Bilmiyorsanız, supervisor bir programdır ve başka programları çalıştırmanızı sağlar. Bir şey çöktüğünde, supervisor onu tekrar başlatır. Basit yapılandırma ile hizmetleri çalışır durumda tutmak için yararlı bir araçtır.

Şimdi Dockerfile’ımıza bir compose dosyası oluşturabiliriz. Bu dosya, hizmetleri tanımlar ve temiz uygulamamız dahil olmak üzere ihtiyaç duyduğumuz hizmetleri bir araya getirir. Bu dosya ile, tüm yığını tek bir komutla başlatabiliriz ve her şey konteynerleştirildiği için her ana sistemde aynı performansı garanti edebiliriz.

Göz önünde bulundurmanızı istediğim bir nokta; uygulama konteyneri için bir görüntü yerine, Dockerfile’ımızı geçiyoruz. Paketi ve çevre dosyasını uygulama konteynerine bağlıyoruz. Bu env dosyası, veritabanı, redis ve paket yapılandırması için bazı temel ayarları içerir.

services:
  app:
    build:
      context: ..
      dockerfile: devenv/Dockerfile
    ports:
      - "8000:8000"
    volumes:
      - ../:/srv/package
      - ./app.env:/var/www/html/.env
    depends_on:
      - mysql
      - redis
  mysql:
    image: mysql:8.4
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: laravel
      MYSQL_USER: laravel
      MYSQL_PASSWORD: secret
    volumes:
      - mysql-data:/var/lib/mysql
  redis:
    image: redis:7-alpine
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    volumes:
      - ./redis.conf:/usr/local/etc/redis/redis.conf
volumes:
  mysql-data:

Ve işte bu kadar, artık paketimizi geliştirmek ve test etmek için özel ve temiz bir ortama sahibiz.


Ekstralar

Şu anda, bunu geliştirme için kullanıyorum ve bu sunucuları (internetten erişilemeyen) sağlık kontrollerinin sunucu tarafını test etmek için kullanıyorum. Her birini güncelleyen küçük bir script yazdım ve değişiklikleri çekip konteynerleri yeniden inşa ediyorum.

Ayrıca, bu Docker görüntüsünü bir pipeline’da çalıştırmak, örneğin bir entegrasyon testi yapmak için güzel bir ekleme olabilir.


Statamic 6’ya Yükseltme

Statamic 6 piyasaya sürüldüğünde, statamic-healthchecks eklentisini uyumlu hale getirmek için güncellemeler yapmak zorunda kaldım. Bu, statamic/cms kısıtlamasını ^5.0 dan ^6.0‘e güncellemeyi ve CI matrisini güncellemeyi içeriyordu. Ayrıca Vue 2 ön yüz kaynaklarını Vue 3’e taşımak durumunda kaldım. Kod değişiklikleri tamamlandıktan sonra, her şeyin uçtan uca çalıştığını doğrulamak için Docker ortamının ne kadar işe yaradığını gördüm.

Özel bir ortam olmadan, mevcut bir Statamic projesini manuel olarak güncellemek, orada paketi kurup test etmek zorunda kalırdım. Docker yapılandırmamla, yalnızca görüntüyü yeniden oluşturmak zorundaydım. Oluşturma süreci, composer create-project statamic/statamic işlemini her defasında sıfırdan çalıştırır, bu yüzden bir yeniden yapılandırma, güncellenmiş paketi yüklemiş temiz bir Statamic 6 kurulumunu bana verdi.

Konteyner, temiz bir şekilde başlatıldı ve sağlık kontrolü uç noktası, beklenen yanıtı döndürdü, bu da özel statamic_stache kontrolünü içeriyordu. Güncellemeyi, mevcut projeye dokunmadan temiz bir Statamic 6 kurulumunda doğrulamış oldum.


Tüm paketler böyle bir ortam ile mi gönderilmeli?

Kesinlikle hayır. Bu, pakete ve hedeflere bağlı. Buradaki amaç, paketi test etmek için temiz bir kurulum elde etmek ve bir test ortamı oluşturmak. Geleneksel simlinkleme yöntemi, çoğu durumda hâlâ tercih edilen bir yöntemdir. Bu nedenle, çoğu pakette simlinkleme yeterlidir. Ancak, temiz, çoğaltılabilir bir yapılandırmaya ihtiyaç duyulduğunda, Docker’ın üstesinden gelmesi zor.

Bu yazı, https://govigilant.io adresindeki 6 Nisan 2026 tarihinde yayımlanmıştır.

Kaynak: Orijinal Makale

Contents
  • Paket Geliştirme
  • Docker Ortamı Oluşturalım
  • Statamic Kullanıcısı
  • Ekstralar
  • Statamic 6’ya Yükseltme
  • Tüm paketler böyle bir ortam ile mi gönderilmeli?
Açık Kaynak Sağlık Yapay Zeka Ajanı Geliştirdim: Vektör Veritabanı Kullanmadan (Laravel 12, React, Typescript + InertiaJS + Gemini)
Laravel’de Pest ile Temiz Testler Yazmak
Laravel’i VPS’ye GitHub Actions ile Dağıtma (Kesintisiz CI/CD)
Filament Mastery Başlangıçlarına Tam Docker Kurulumu Ekleme
Laravel’de Görsel Küçültmeleri Önceden Üretmeyi Durdurun – Bunun Yerine Anlık Olarak Yapın
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale İkinci El Elektrikli Araç Satışlarını Artıran Diğer Etkenler
Sonraki Makale Yatırımcılar Amazon, Microsoft ve Google’dan veri merkezi şeffaflığı istiyor

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

Yazın Havuz Keyfinizi Zirveye Taşıyacak En İyi Aksesuarlar (2026)
Genel
AirTrunk, Hindistan’da 5GW AI veri merkezi için 30 milyar $ yatırım yapıyor
Yapay Zeka
Yapay Zeka Verimliliği İçin Hızla Önlem Alınmalı
Donanım
Bu Kalın Tablet Çocuğumu Oyuncaklarını Toplamaya Teşvik Etti
Liste
Dota 2 Güncellemesi: Doğa Prophet ve Arc Warden Güçleniyor, Gizemli Axe Değişimi Merak Uyandırıyor
Oyun
Acil: SOC’ların Sadece %10’u AI’dan Mükemmel Değer Aldığını Söylüyor
Siber Güvenlik
//

Siber güvenlik, yapay zeka ve savunma sanayiinden; finans ve sinema dünyasına uzanan geniş bir yelpaze. Teknomers; teknoloji, strateji ve yazılım dünyasını sade bir dille sizlerle buluşturuyor.

Kurumsal

  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti

Kategoriler

  • Teknoloji
  • Oyun
  • Sinema
  • Siber Güvenlik
  • Bilim
  • Finans
  • Dünyadan Güncel Haberler

Populer

  • TV'de Ücretsiz İzlenebilen Şifresiz Erotik Kanallar (2025 Güncel Frekans Listesi)

  • The Last of Us PC Kontrolleri: Hızlı Silah Değiştirme ve Tüm Tuşlar (2025)

  • Hogwarts Legacy'de Odaklanma İksiri Nasıl Yapılır?

Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Bizi Takip Et
© 2026 Teknomers. All Rights Reserved.
Welcome Back!

Sign in to your account

Kullanıcı Adı veya E-posta Adresi
Şifre

Şifrenizi mi unuttunuz?