2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği
-
Upload
burak-oguz -
Category
Technology
-
view
1.152 -
download
5
description
Transcript of 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği
Linux’ta Web Geliştiriciliği
Kocaeli ÜniversitesiLinux Günü
Burak OğuzEMO Ankara Şubesi
FindikProject ve MyDLP Geliştiricisi
14 Mayıs 2010
İçerik
Apache Linux'ta Web Geliştirme Dilleri ve Çatıları
Php Java Python Ruby Mono Diğerleri
Apache
Apache 1996 yılından bu yana en popüler web sunucusudur.
Nisan 1996'da %29 olan kullanım oranı bu günlerde %54'e kadar ulaşmıştır.
Apache
Apache
Mevcut sürümler Apache 1.3.37 - Destek modunda, geliştirme yok Apache 2.0.59 - Destek modunda, geliştirme yok Apache 2.2.15 – Mevcut sürüm
Geliştirme Apache 2.3.5-alpha
Apache – Dosyalar
Dosya lokasyonları (CentOS 5) Modüller - /usr/lib/httpd/modules Ayar dosyları - /etc/httpd Kayıt dosyaları - /var/log/httpd Döküman kökü - /var/www/html CGI klasörü - /var/www/cgi-bin
Apache – Çok Süreçlilik Modülleri
Apache Web Sunucusu, birçok değişik ortamda kullanılabilmek için çeşitli süreç modülleri barındırır. Bu süreç modülleri Ağ portlarına bağlanma İstekleri kabul etme İstekleri karşılamak için işçi kanallar oluşturma
gibi işleri üstlenirler
Apache – Çok Süreçlilik Modülleri
Sunucu, belli bir sitenin ihtiyaçlarına uygun olarak daha iyi kişiselleştirilebilmektedir. Örneğin, eski yazılım ile uyumluluk ve kararlılığa önem veren siteler prefork modülünü kullanabilirken, daha geniş ölçeklenebilirlik gerektiren siteler worker gibi evreli bir MPM modülünü seçebilmektedir. Ek olarak, farklı konakların farklı kullanıcı kimlikleri ile sunulması gibi özel oluşumlar da (perchild) sağlanabilmektedir.
Apache – Prefork MPM
Bu çok süreçlilik modülü (MPM) Apache 1.3’ün yaptığı gibi evresiz ve çocuk süreçlerin önceden çatallandığı bir HTTP sunucusu oluşturur. Evresiz kütüphanelerle uyumluluk için evrelemeden kaçınma ihtiyacında olan siteler için uygundur. Ayrıca istekleri birbirlerinden yalıtmak için en iyi MPM’dir, dolayısıyla herhangi bir istekle ilgili bir sorun diğerlerini etkilemez.
Apache – Prefork MPM
Sağlam fakat yavaştır Bir tane ana sunucu ve bunun altında çalışan
işçilerden oluşur Her işçi kendisi bir sunucu olarak hareket eder Her işçi tek defada bir bağlantı kabul edebilir Daha çok bellek tüketir Kanallar yerine işlemleri kullanır
Apache – Worker MPM
Bu çok süreçlilik modülü (MPM) hem çok süreçli hem de çok evreli olabilen melez bir sunucu oluşturur. İstekleri sunmak için evreleri kullanması sebebiyle çok süreçli bir sunucudan daha az sistem kaynağı harcayarak daha çok isteğe hizmet sunabilir. Bununla birlikte, herbiri çok sayıda evreye sahip çok sayıda süreci canlı tutarak bir çok süreçli sunucu kadar kararlı olur.
Apache – Worker MPM
Çoklu işlem ve çoklu kanal desteği bulunur Her işçi işlem birden fazla bağlantı kabul
edebilir. Çoklu işlem kararlı şekilde çalışabilir. Çoklu kanal da performanslı bir şekilde çalışır Bellek kullanımını azaltır.
Apache – Worker MPM
Ayarlar StartServers – En başta başlatılacak işçi sunucu sayısı MinSpareThreads – Yeni işçiler oluşturulmadan önce gerekli en az boş işçi
sayısı MaxSpareThreads – Sonradan oluşturulan işçi kanallarının yok edilmesi için
gerekli en fazla boş kanal sayısı MaxClients – Kanal başına en fazla istemci sayısı MaxMemFree – Ana işçi tarafından kullanılabilecek en fazla bellek miktarı ThreadsPerChild – Her işçi süreç tarafından açılabilecek kanal sayısı
Apache - Belgeler
Çoğu Türkçeleştirilmiş belgelere şu adresten ulaşabilirsiniz: http://httpd.apache.org/docs/2.2/
Ayrıca belgeler her Apache kurulumuyla birlikte dağıtılır.
Apache – httpd.conf
httpd.conf dosyası içerisinde her ayar komutunun detaylı açıklaması bulunur.
Ayar komutları dosya içerisinde belirli sırada olmak zorunda değildir.
“\” karakteri ayar komut ifadesinin aşağı satırda devam ettiğini belirtir.
“#” ile başlayan satırlar yorum satırlarıdır. <IfDefine> ifadesi, ortam değişkenlerine bağlı
olarak çeşitli ayar komutlarının devre dışı bırakılmasını sağlayabilir.
Apache - httpd.conf
Önemli ayar komutları ServerRoot – Apache kurulumunun yapıldığı dizin Timeout – Sunucunun istek üzerine bir cevap
almadığı durumda bekleme süresi – Öntanımlı 5 dakika / 300 saniye
KeepAlive – Uzun süreli bağlantıların desteklenmesi
Listen – Apache’nin bağlanacağı IP adresi ve port numarası
LoadModule – Apache modülü yükleme komutu
Apache – httpd.conf DocumentRoot – Sunucunun dosyaları sunacağı ön
tanımlı dizin Options – Belirlenen dizin için seçenekler
Indexes – Dizin listelemenin etkinleştirilmesi Multiviews – Dil anlaşmasının yapılması ExecCGI – CGI dosyalarının dizin içerisinde çalıştırılması izni
Order / Allow / Deny – Erişim kontrolü denetlemesi DirectoryIndex – İstekte dizin için herhangibir dosya
belirtilmezse sunulacak dosya ismi CustomLog – Kullanıcının tanımlayabileceği kayıt
dosyasının yeri ve kayıt biçimi Alias - <Directory>/<Location>/<Files> için URI öneki
sağlar ErrorDocument – Hata durumunda gönderilecek dosyayı
belirleyebilirsiniz.
Apache – Virtual Host
Apache’de iki tip virtual host desteği bulunmaktadır. İsim tabanlı
İstekteki alan adına göre virtual host seçimi yapılır Tek bir IP adresi üzerinden birçok alan adının sunulmasını sağlar
IP tabanlı İstekteki IP adresine göre virtual host ataması yapar Her IP adresi bir virtual hosta aittir.
Her virtual host ServerName, DocumentRoot, Alias gibi komutlarla bağımsız olarak oluşturulur.
İsim tabanlı Virtual Host
NameVirtualHost *:80<VirtualHost *:80>
ServerName www.domain.comServerAlias domain.com *.domain.comDocumentRoot /www/domain
</VirtualHost><VirtualHost *:80>
ServerName www.otherdomain.comDocumentRoot /www/otherdomain
</VirtualHost>
Linux ve Web Programlama
Linux’ta popüler olarak kullanılan web programlama dilleri şu şekilde listelenebilir PHP Java Python Ruby
Mono ile ASP.NET kodlarınızı da Linux üzerinde kullanabilirsiniz.
PHP
PHP, popüler, basit ve hafif bir sunucu-tabanlı betik dilidir. PHP ile dinamik web sayfaları oluşturabilirsiniz.
Tarihi gelişim: 1995: PHP 2, “Personal Home Page Tools” 1997: PHP 3, “PHP: Hypertext Processor” 2000: PHP 4 2004: PHP 5
PHP kullanan bazı web sayfaları: Wikipedia, Yahoo, Digg, Facebook
PHP – ZendFramework ZendFramework, basit ve gelişmiş yapısı ile birçok
konuda çok çeşitli kütüphaneler sağlar. Google, Yahoo!, Amazon ve Flickr tarafından
kullanılan güvenli, güvenilir ve modern Web2.0 uygulamalarının arkasında ZendFramework bulunmaktadır.
PHP ile gelen bir özellik olarak öğrenme eğrisi oldukça aşağıdadır. Kullanmak için ayar dosyaları düzenlemeye gerek yoktur. Genişletilebilir ve iyi test edilmiş kod tabanı Genişletilebilir mimari
PHP4 desteği bulunmamaktadır.
PHP - CakePHP CakePHP, PHP ile MVC ve ORM ile hızlı geliştirme
yapabilmenizi sağlayan bir geliştirme çatısıdır. Temel özellikleri
MVC mimarisi Uygulama iskeleti oluşturabilme Bake ile otomatik kod oluşturma HTML, Formlar, Sayfalama, AJAX, JS, XML ve RSS gibi birçok
konuda yardımcı sınıflar ACL ve yetkilendirme Onaylama sınıfları Güvenlik, oturum ve istek bileşenleri Dosyalar, dizinler, diziler, vb gereksinim ile ilgili yardımcı sınıflar
PHP - Symfony Symfony, php üzerinde geliştirme hızını arttırmak
amacı ile web sayfalarının oluşturulmasını ve bakımını kolaylaştırmayı amaçlamaktadır.
MIT lisansı ile dağıtılmaktadır. Temiz tasarım ve kod okunabilirliği öncelikli
hedefidir. PHP4 desteği bulunmamaktadır. Tutorial ve belge desteği üst seviye olduğu için
başlangıç için en çok tercih edilen PHP web çatısıdır.
Eklenti ve ORM çatıları da bulunmaktadır.
Java
Java 1995’ten bu yana önceleri Sun ve şimdilerde Oracle tarafından geliştirilen bir programlama dilidir.
Amaçları Basit, tanıdık ve nesne tabanlı bir dil oluşturmak Sağlam ve güvenli Mimari bağımsız ve taşınabilir Yüksek performanslı Dinamik, kanallı ve yorumlanan bir dil
oluşturmak.
Java
http://en.wikipedia.org/wiki/File:JavaPlatform.png
Java Web Geliştirme
Servlet barındırıcıları Tomcat Jetty
Uygulama sunucuları Sun Glassfish - Sun JBoss - RedHat Geronimo – ASF WebLogic - Oracle
Java - Maven
Maven, proje ayarlarınızın düzgün bir şekilde tutularak bağımlılıklarınızın otomatik çözümlenmesi, sürüm takibi, repo takibi, geliştirme takibi, bakım, güncelleme ve yükleme gibi işlemleri düzgün bir şekilde yapmanızı sağlayan bir altyapı sunar.
Java - Spring
Java kurumsal geliştirme için popüler ve kararlı bir uygulama çatısıdır.
Esas amacı, bağımlılıkların azaltılması hatta negatif bağımlılıklar oluşturularak, kod bakımının kolaylaştırılması ve karmaşıklığın azaltılmasıdır. Dependency Injection (IoC) AOP Taşınabilir servisler
Java - JSF
JSF bir standart(JSR-314) olup bu standartı uygulayan birçok API mevcuttur.Bu API’lar UI bileşenleri oluştururlar UI bileşenlerinin durumlarını saklar Olaylar işler Girdi onaylaması yapar Sayfalar arası yönlendirmeyi yapar Erişilebilirlik ve yerelleştirme seçeneklerini sunarlar
JSF, JSP sayfaları içerisinde kullanılmak üzere tasarlanan etiket kütüphaneleridir.
http://www.jsfmatrix.net/
Java – Apache Wicket
Apache Wicket ile amaçlanan diğer Java web geliştirme çatılarındaki eksiklik olarak görülen denetleyicideki (controller) kodun yeniden kullanımı yaygınlaştırmaktır. Bunu her sayfayı ve bileşeni SWING’deki gibi gerçek birer sınıf yaparak nesne tabanlı programlama yardımıyla gerçekleştirir.
Geliştirmesi kolaydır ve bir WYSIWYG editörü bulunmaktadır.
Java – Google Web Toolkit
Java GWT ile tarayıcı tabanlı kararlı uygulamalar geliştirebilirsiniz.
Java GWT ile yazdığınız Java kodları, Javascripte döndürülür. Ayrıca uygulamanız için sunucu tarafı için GWT Servlet veya Web Servisleri oluşturabilirsiniz.
Google birçok servisi için GWT kullanmaktadır.
Java ve Linux
Paket yöneticiniz ile Java JDK’yı kurun. Paket yöneticiniz ile Apache Maven’ı kurun. Sizin için uygun IDE’yi kurun
Eclipse Netbeans
Kullanmak istediğiniz çatı ile ilgili Maven archetype’ı bulun.
IDE’niz üzerinden archtype’ı kurun. Geliştirmenize başlayın. http://github.com/bogus/Java-Spring-Examples
Python
Python 1989 yılından bu yana geliştirilmekte olan üst seviye nesne tabanlı bir betik dilidir. Standart kütüphanesi geniş bir bileşen yelpazesi sunmakla birlikte özellikle masaüstü, web ve terminal uygulamalarında sık kullanırlır.
Python - Django Django, yüksek seviye bir Python web geliştirme çatısıdır.
Özellikleri ORM Otomatik oluşturulan yönetici arabirimi URL tasarımı
urlpatterns = patterns('', (r'^articles/2003/$', 'news.views.special_case_2003'), (r'^articles/(\d{4})/$', 'news.views.year_archive'), (r'^articles/(\d{4})/(\d{2})/$', 'news.views.month_archive'), (r'^articles/(\d{4})/(\
d{2})/(\d+)/$', 'news.views.article_detail'), )
/articles/2005/03/ news.views.month_archive(request, '2005', '03').
Şablon sistemi / dili Önbellekleme Çoklu-dil desteği
Ruby
Ruby, 1990ların ortasında Japonya’da Perl, Smalltalk, Eiffel ve Lisp özelliklerinden esinlenerek oluşturuldu. Perl ve Smalltalk benzeri bir söz dizimi vardır. İçerisinde fonksiyonel, nesne tabanlı, imperative ve reflective özellikler barındırır.
Dilin herhangibir standartı olmadığı için orijinal hali de facto olarak kabul görmektedir.
Ruby – Ruby on Rails
MVC altyapısı ile çevik geliştirme yöntemlerini birleştiren bir çatıdır. Kullanan web siteleri: Basecamp Twitter Shopify Yellow Pages Github Lighthouse
RoR genelde RubyGems ile kurulur ancak birçok paket yönetim sistemi RoR paketlerini depolarında barındırır.
Ruby – Ruby on Rails
Ayarlar üzerinde anlaşma MVC yapınız içerisinde Sale adında bir modeliniz
varsa bunun veritabanındaki tablo karşılığı sales olmalıdır.
Kendini tekrarlaMA RoR, ActiveRecord modülü ile geliştiricinin
veritabanı kolon isimlerini modelinin içerisine yazmasına gerek kalmaz. RoR onları veritabanı şemasından okuyarak kullanır.
Karşılaştırma
http://www.cmswire.com/cms/industry-news/php-vs-java-vs-ruby-000887.php
Karşılaştırma
Dil Sürüm Satır Sayısı
İterasyon başına süre (mikrosaniye)
Java Sun JDK 1.6.0.03 10186 1.6
Ruby
ruby 1.9.0 (2008-04-14 revision 16006) [i686-linux]
63
89
ruby 1.8.6 (2007-06-07 patchlevel 36) [i486-linux] 380
jruby : ruby 1.8.6 (2008-05-28 rev 6586) [i386-jruby1.1.2] 80
Python
2.5.1
41
225 192
2.5.1 with psyco 33
Jython 2.2.1 on JRE 1.6.0.03 884 632
PHP PHP 5.2.3-1ubuntu6.3 (cli) 85 593
OS : Ubuntu Gutsy Gibbon 7.10Kernel : 2.6.22-15-genericCPU : Intel(R) Core(TM) Duo CPU T2600 @ 2.16GHzRAM : 2GB http://blog.dhananjaynene.com/
Mono – Linux ama değil gibi de
.Net uygulamalarınızın Linux’ta derlenebilmesini ve kullanılabilmesini sağlar. Bileşenleri: C# derleyicisi Mono çalışma zamanı Temel sınıf kütüphanesi – MS .Net kütüphaneleri
ile uyumlu Mono sınıf kütüphanesi - Gtk+, Zip files, LDAP,
OpenGL, Cairo, POSIX gibi uygulamalar için ek kütüphaneler
Mono – Linux ama değil gibi de
Faydaları Popüler bir yapı olan .Net dilleriyle oluşturulan
uygulamalarının ve geliştiricilerinin uygulamalarını Linux’ta çalışmasını sağlar
Çapraz platform desteği Linux, Microsoft Windows, Mac OS X, BSD ve Sun Solaris, Nintendo
Wii, Sony PlayStation 3, Apple iPhone. Ayrıca x86, x86-64, IA64, PowerPC, SPARC (32), ARM, Alpha, s390, s390x (32 ve 64 bit)
Ortak Dil Çalışma Zamanı (Common Language Rumtime - CLR)
Mono – ASP .NET
ASP.NET uygulamalarınızı Apache ve mod_mono ile kolayca Linux sistemlere kurabilirsiniz. Ancak çoğu durumda bir sürü ayar ve kod
dosyasını güncellemek zorunda kalabilirsiniz. Linux dağıtımınızdan, paket yöneticiniz
üzerinden mono, mono-devel ve mod_mono paketlerini kurarak çalışmaya başlayabilirsiniz.
Bunların Dışında
Perl – CGI Erlang ve hatta Bash ile web programlama
yapabilirsiniz.
Ancak artık Linux’ta native ASP desteği bulunmamaktadır!!!
Dillerin ve IDElerin Kurulumu
Kullandığınız Linux dağıtımının paket yöneticisi ile gerekli dil paketlerini kurun ve dilin web sayfasında yer alan yönergeleri izleyerek istediğiniz dil ile geliştirmeye başlayın.
Linux’ta geliştirme yapmak diğer platformlara göre daha kolaydır.