46
Linux’ta Web Geliştiriciliği Kocaeli Üniversitesi Linux Günü Burak Oğuz EMO Ankara Şubesi FindikProject ve MyDLP Geliştiricisi 14 Mayıs 2010

2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

Embed Size (px)

DESCRIPTION

Kocaeli Linux Günlerinde Web Geliştiriciliği ile ilgili yaptığım sunum

Citation preview

Page 1: 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

Page 2: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

İçerik

Apache Linux'ta Web Geliştirme Dilleri ve Çatıları

Php Java Python Ruby Mono Diğerleri

Page 3: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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.

Page 4: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

Apache

Page 5: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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

Page 6: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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

Page 7: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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

Page 8: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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.

Page 9: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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.

Page 10: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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

Page 11: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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.

Page 12: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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.

Page 13: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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ı

Page 14: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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.

Page 15: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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.

Page 16: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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

Page 17: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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.

Page 18: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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.

Page 19: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

İ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>

Page 20: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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.

Page 21: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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

Page 22: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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.

Page 23: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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

Page 24: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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.

Page 25: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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.

Page 26: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

Java

http://en.wikipedia.org/wiki/File:JavaPlatform.png

Page 27: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

Java Web Geliştirme

Servlet barındırıcıları Tomcat Jetty

Uygulama sunucuları Sun Glassfish - Sun JBoss - RedHat Geronimo – ASF WebLogic - Oracle

Page 28: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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.

Page 29: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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

Page 30: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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/

Page 31: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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.

Page 32: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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.

Page 33: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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

Page 34: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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.

Page 35: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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

Page 36: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliğ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.

Page 37: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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.

Page 38: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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.

Page 39: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

Karşılaştırma

http://www.cmswire.com/cms/industry-news/php-vs-java-vs-ruby-000887.php

Page 40: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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/

Page 41: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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

Page 42: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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)

Page 43: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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.

Page 44: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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!!!

Page 45: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

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.

Page 46: 2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği

Teşekkürler

Sorularınız?

[email protected]