Symfony Yerel Web Sunucusu

Bu yazımda Symfony Yerel Web Sunucusu (ingilizce ismiyle Symfony Local Web Server) kullanımı hakkında bazı bilgiler vermeye çalıştım.

PHP web uygulamalarını geliştirme ortamında kullanmak için çeşitli yöntemler kullanıyoruz. Bunlardan öne çıkanları yerel makinemize kurduğumuz Apache, Nginx sunucuları üzerinde çalışan PHP; PHP’nin dahili web sunucusu, Docker kullanmak, Vagrant kullanmak, Laravel Valet kullanmak şeklinde sıralanabilir.

Bunların kendilerine göre avantajları ve dezavantajları mevcut. Örneğin PHP’nin dahili web sunucusu neredeyse mükemmel ancak; aynı anda tek bağlantı sağlaması, HTTP/2 desteğinin olmaması, SSL desteğinin olmaması, ortam değişkenleri değiştiğinde tekrar okumaması gibi sıralanabilir. Apache/Nginx çözümlerinde ise kurum, host bazlı ayarlamalar yapmak, ssl ayarı gibi çeşitli işlemler yapmak gerekli. Docker/Vagrant çözümlerinde ise kimi zaman kullanımı rahat değil, kimi zaman da yavaşlık sorunluları oluşuyor. Symfony sunucu uygulamalarınızı geliştirirken sizi daha üretken yapmak için kendi web sunucusunu sağlıyor.

Yayında kullanmak için uygun olmasa da web projelerinizi geliştirmek için er ya da geç ihtiyaçınızı olan HTTP/2, TLS/SSL, otomatik güvenlik sertifikaları üretimi, yerel domainler ve diğer bir çok özellikleri beraberinde sunar. Dahası bu sunucu Symfony’e özel değildir ve herhangi bir php uygulaması ve hatta HTML veya SPA (single page applications) ile de kullanabilirsiniz.

Kurulum ve detaylara girmeden önce bazı özelliklerini sıralayalım:

  • Root kullanıcı olmanıza ihtiyaç yok
  • Mümkün olduğu durumlarda PHP-FPM (olmadığı durumlarda PHP-CGI/PHP -S)
  • HTTP2 desteği
  • Tüm statik (HTML/JS/CSS) ve PHP projeler için uygun
  • Aynı makinede kurulu birden fazla PHP versiyonu ile çalışabilme
  • Uzun süre çalışacak herhangi bir komutu arka planda çalıştırma ve günlüklerini takip etme

Kurulum

Linux

Aşağıdaki kod satırını terminalinize yapıştırın.

MACOS

Aşağıdaki kod satırını terminalinize yapıştırın.

Windows

Aşağıdaki dosyayı indirin ve kurun.

Başlangıç

Symfony server her proje için bir kez başlatılır, bunun sonucu olarak her biri farklı bir portu dinleyen bir çok örneğini görebilirsiniz.

Sunucunun bu şekilde çalışması log mesajlarının konsolda gösterilmesini sağlar, bundan dolayı aynı zamanda terminalimizde diğer komutları çalıştıramazsınız. İsterseniz, Symfony sunucuyu arka planda çalıştırabilirsiniz.

PHP-FPM Aktifleştirme

Sunucu başladığında otomatik olarak ortak web/app.phpweb/app_dev.php veya public/index.php proje yapısını kontrol eder. Bunun gibi bir dosya bulunursa sunucu otomatik olarak PHP-FPM ile aktifleştirilir. Diğer türlü sunucu PHP-FPM olmadan başlayacak ve tarayıcınızda bir .php uzantılı dosyaya erişmeye çalıştığınızda Page not found sayfası gösterecektir.

Hedef klasörde index.html ve ön kontrolcü olarak index.php her ikisi birden mevcutsa sunucu otomatik olarak PHP-FPM ile aktifleştirilecek ancak index.html önceliği alacaktır. Bunun anlamı bir index.html dosyası public veya web içinde mevcut ise php uygulamanızı gösterecek index.php yerine gösterilecektir.

TLS / SSL Aktifleştirme

Uygulamalarınızın güvenli olan versiyonlarını geliştirme ortamınızda görüntülemek; sayfanızda kullandığınız HTTP ve HTTPS karmaşık içerikleri önceden belirlemek ve yalnızca HTTPS üzerinde çalışan kütüphanelerinizi (örneğin ödeme sistemleriyle ilgili bir stripe.js) çalıştırmak için önemlidir. Bu desteğin sağlanmaz bizi yayın ortamına biraz daha yaklaştırır. Geleneksel yöntemle bu oldukça uğraştırıcı ve karmaşık bir kurulumdur, fakat Symfony sunucusu her şeyi otomatik olarak gerçekleştirir. İlk olarak şu komutu çalıştırın.

Bu komut bir yere sertifika yetkilisi yaratır ve bunu sisteminizde güvenli olarak kaydeder, bunu Firefox içine kaydeder (bu yalnızca Firefox web tarayıcısı için gereklidir) ve localhost ve 127.0.0.1 için varsayılan bir sertifika oluşturur. Diğer bir deyişle gerekli şeyleri sizin için yapar.

Kullanıcı dizininizdeki .symfony/certs dizinine göz attığınızda (MacOS için şu klasör ~/.symfony/certs) şu dosyalarınızın listelendiğini göreceksiniz.

Bilgisayarınızdaki uygulamayı HTTP yerine HTTPS olarak gezinmeden önce sunucusunu durdurup çalıştırarak tekrar başlatın (uygulama klasörünüzde symfony server:stop, symfony server:start).

Her Proje İçin Farklı PHP Yapılandırması

Farklı bir PHP versiyonunu seçme

Bilgisayarınızda birden fazla PHP versiyonu kurulu ise projenizin kök dizininde .php-version isimli bir dosya yaratarak Symfony sunucusuna hangisini kullanması gerektiğini söyleyebilirsiniz.

Symfony sunucusu dizin yapısını en üst kök klasörüne kadar tarar, böylece herhangi bir üst dizinde tanımlanmış PHP versiyonu o dizin altındaki projelerde kullanılabilir.

Eğer bilgisayarınızda yüklü tüm PHP versiyonlarını hatırlamıyorsanız aşağıdaki komutu çalıştırın.

Yüklü PHP versiyonlarını gösteren liste aşağıdaki şekilde listelenecek.

Eğer macOS işletim sistemi kullanıyorsanız PHP yüklü olarak gelir. Daha farklı PHP versiyonları yüklemek isterseniz Homebrew ile kolayca yapabilirsiniz. Örneğin 7.4 versiyonunu yüklemek için brew install php@7.4 komutunu kullanabilirsiniz.

Proje bazlı PHP ayarlarını seçeneklerini değiştirme

Proje klasörünüzde php.ini isminde bir dosya yaratarak her proje için PHP çalışma anı ayar seçeneklerinizi değiştirebilirsiniz. Yalnızca üzerine yazmak istediğiniz ayarı ekleyin.

Komutları Farklı Bir PHP Versiyonu İle Çalıştırma

Farklı PHP versiyonlarında çalışıldığında, php komutları için symfony kapsayıcısını kullanmak kullanışlıdır. Bu projenize en uygun php versiyonunu seçmenize izin verir. Ayrıca ortam değişkenlerini de otomatik olarak yükler.

Yerel Alan İsimleri

Varsayılan olarak projeler 127.0.0.1 yerel IP’sinin rasgele portlarından erişilebilir. Ocak bazen onları bir alan ismi ile ilişkilendirmek tercih edilebilir.

  • Aynı proje üzerinde sürekli çalışırken port numaralarının değişmesi fakat alan isimlerinin değişmesinden dolayı hatırlanabilir olması, daha rahat olması;
  • Bazı uygulamaların davranışları onların alan isimleri veya alt alan isimlerine (subdomains) bağlı olması;
  • OAuth2 için URL yönlendirmeleri gibi işlemleri için için kararlı adreslere sahip olmak

Yerel Proxy Kurulumu

Yerel domainler Symfony server tarafından sağlanan bir yerel proxy ile mümkündür. Eğer proxy ilk kez başlatışınız ise aşağıdaki konfigürasyonları yapmalısınız:

  1. İşletim sisteminizden proxy settings kısmını açın:
  2. Otomatik Ara Sunucu Ayarları (Automatic Proxy Configuration) değerini takip eden URL’i ayarlarlayın.
    http://127.0.0.1:7080/proxy.pac

Örnek olarak MacOS’daki değişiklik şu şekilde.

Macos otomatik ara sunucu yapılandırması

Şimdi proxy’i başlatmak için bu komutu çalıştırın. Bu komutu bulunduğunuz herhangi bir klasörde çalıştırabilirsiniz. Proje bazlı değildir.

Bazı tarayıcılar (Örneğin Chrome) proxy ayarının tekrar uygulanmasına ihtiyaç duyarlar (chrome://net-internals/#proxy sayfasında Re-apply settings butonuna tıklayarak) veya proxy’i başlattıktan sonra tarayıcıyı tekrar başlatarak. Aksi taktirde This webpage is not available error (ERR_NAME_NOT_RESOLVED) hatası göreceksiniz.

Yerel Alan İsmi Tanımlama

Varsayılan olarak yerel domainler için Symfony .wip (Work in Progress) önerir. Projeniniz için aşağıdaki gibi bir yerel domain tanımlayabilirsiniz:

Eğer bir önceki kısımda açıklandığı gibi bir yerel proxy kurulumu yaptıysanız, yerel projenize özel domain ile erişmek isteriz https://my-domain.wip adresininde gezinti yapabilirsiniz.

http://127.0.0.1:7080 adresini görüntüleyerek tüm yerel projelerinizi ve onların özel domainlerini ve port numaralarını listeleyebilirsiniz.

Konsol komutlarını çalıştırırken, https_proxy ordam değişkeninizi özel alan adınızın çalıştırmak için kullanabilirsiniz.

Ortam değişkenlerinde büyük harf kullanmamıza rağmen https_proxy değişkenini küçük harfle kullanmamız gerekiyor.

.wip yerine farklı bir domain grubu kullanmak isterseniz ~/.symfony/proxy.json dosyasındaki tld değerini değiştirebilirsiniz.

Tanımlamalarınızı ~/.symfony/proxy.json dosya içeriğinden görebilirsiniz.

Uzun Süre Çalışan Komutlar

Front-end asetlerini derlemek gibi uzun süre çalışan komular terminali bloklar ve aynı terminalde başka komut çalıştıramazsınız. Symfony sunucusu run komutuyla aşağıdaki gibi kapsayıcı içinde çalıştırabilirsiniz.

symfony server:status komutunu çalıştırdığınızda server:start ile başlattığınız tüm web sunucularınız, çalışmakta olan komutlar gibi bilgiler verilir.

Bu yazımda geliştirici ortamlarında kullanılan symfony yerel web sunucusu hakkında genel bilgiler vermeye çalıştım. Bu araç yalnızca dosyalarınızı web tarayıcı üzerinden görüntüleyebileceğiniz bir araç değil aynı zamanda komutlarınızı çalıştırıp takip edeceğiniz, farklı php versiyonlarını proje bazlı veya komut bazlı kullanabileceğiniz çok faydalı bir araç. Aracın en büyük sorunu açık kaynaklı olmaması. Sunucu özellikleri Symfony CLI projesinin bir parçası. Açık kaynak kodlu olması projeyi inceleyerek öğrenmek için iyi olurdu.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir