9 Aralık 2016 Cuma


Linux - Ubuntu İşletim Sistemi Üzerinden Django- MySQL ile Web Server Çalışması 

Tanımlar :

Linux : Linux açık kaynak kodlu özgür bir yazılımdır. Gönüllüler tarafından geliştirilen ve türevleri olan bir İşletim sistemidir.

      Neden Linux?:
  • Özgür yazılım,
  • Açık kaynak
  • Kararlı bir yapı,
  • Lisans maliyetinin olmaması,
  • işlemciyi en iyi ve en verimli olarak kullanan işletim sistemi olması.
  • (Bellek kullanımı çok iyi. Çok sayıda prosesi beraber çalıştırabiliyor)

Ubuntu: Linux çekirdeğini temel alarak geliştirilen açık kaynak kodlu, özgür ve ücretsiz bir işletim sistemidir. Masaüstü, sunucu ve akıllı telefonlara yönelik olarak geliştirilen türevleri bulunur.
    
MySQL:  Altı milyondan fazla sistemde yüklü bulunan çoklu iş parçacıklı , çok kullanıcılı , hızlı ve sağlam bir veri tabanı yönetim sistemidir. 

Web Server: Web server ya da ağ sunucusu, internet üzerinde bir web sitesinin yayınından sorumlu olan sunucudur. Web server, Hosting ya da “barındırma” işlemini internet protokolü üzerinden sunan bir sunucudur. Barındırma ya da hosting, Web sayfalarını internette yayınlamak için gerekli alanın kiralanmasıdır. Diğer bir ifade ile hosting, bir Web sitesinde yayınlanmak istenen sayfaların, resimlerin veya dokümanların internet kullanıcıları tarafından erişebileceği bir bilgisayarda tutulmasıdır.

İzlenecek Adımlar:

Çalışmayı yapabilmek için öncelikle indirimini tamamladığımız ubuntu ve virtualbox programlarını bilgisayarımıza yüklememiz gerekmektedir.

Ubuntu indirmek için; https://www.ubuntu.com/download/server  adresini kullanabilirsiniz.

Virtualbox indirmek için; https://www.virtualbox.org/wiki/Downloads adresini kullanabilirsiniz.

Ubuntu ve Virtualbox bilgisayarımıza kurduktan sonra, Virtualbox programını üzerinden Ubuntu işletim sistemini kurma adımlarını izleyeceğiz.

VirtualBox sayfası açıldığında panelin sol tarafında bulunan "Yeni" linkine tıklıyoruz. Küçük ara pencere çıkacaktır, bu pencere doldurulması istenilen isim, tür ve sürüm bilgilerini verip bu adımı 'ileri' butonu ileri geçiyoruz.


           

        Not: Bu nokta da ön bir uyarı yapmak isterim, verdiğiniz tanımlamaları/isimleri bir kenara not      etmenizdir. İleri ki aşamalarda bu bilgiler sizlere gerekli olacaktır. Benim ve diğer birçok kişinin  yaşadığı problemlerinden biride verilen ifadelerin veya şifrelerin unutulması nedeniyle olmuştur.

    Bir sonraki aşamada bizden Ram miktarını  belirtmemizi isteyecek, yaklaşık 900MB yeterli olacaktır.


    Tekrar "ileri" diyoruz ve default olarak çıkan seçeneklere "ileri" diyerek "Dosya Yeri ve Boyutu" penceresine kadar geliyoruz. Burada yapacağımız işlemlerin düzeyine göre sistemden ayırmasını istediğimiz sabit disk boyutunu belirleyip "oluştur" seçeneğini seçiyoruz. (8 GB yeterli olacaktır). 


    Oluşturmuş olduğumuz ve sol taraftaki panelde görülen sanal makineye sağ tıklayıp "Ayarlar" daha sonra "Depolama" sekmesine tıklıyoruz. Aşağıdaki resimdeki adımları sırasıyla işleyerek bu aşamayı da bitirelim. 

    Daha sonra yine sol tarafta bulunan "Ağ" sekmesine tıklıyoruz. Çıkan pencerede "Bağdaştırıcı 1"i seçip "Ağ Bağdaştırıcısını Etkinleştir" diyoruz. Burada sanal makinemizin, ana makine işletim sisteminin gerçek ağına nasıl bağlanacağını belirleyeceğiz.


    Nat seçilirse: ana makine ve sanal makine iç yapılarında birbirinden tamamen bağımsız IP adreslerinden oluşurken, dışarıdan ise aynı IP adresli olarak gözükürler. Nat yapısının kötü yanı; dışarıdan sanal makineye bağlanılamaz bunun nedeni ise az önce söylemiş olduğumuz sanal makinenin dış dünyayla iletişimdeki IP adresi ana makinenin IP adresi ile aynı olmasıdır.

    Bridge(Köprü) seçilirse: ana makine ve sanal makine aynı ağ üzerinde olup farklı IP adreslerine sahip olurlar. Bunun kötü yanı ise kısıtlamalar varsa sanal makine için ikinci bir IP adresi verilemeyebilir. Bu yüzden biz "Nat"ı seçeceğiz.

    Bu sayfada port yönlendirmeleri yapıldı. Anamakine işletim sistemimizin  ilgili portuna gelen bağlantılar, sanal makinemizin portuna yönlendirildi. "2222" => "22"

             

    Ardından sol taraftaki sanal makinemiz seçili iken yukarıda bulunan panelden "Başlat" linki tıklanır ve işletim sistemi kurulumu başlar.
    Bu aşamadan sonra sırasıyla;
    • Dil seçimi yapılır
    • "Ubuntu sunucu sürümünü kurun" seçilir
    • "Kuruluma seçilen dille devam edilsin mi?" sorusuna "evet" yanıtı verilir
    • Ülke-bölge seçilir
    • Klavye düzeni ayarlanır
    • Ek bileşenlerin yüklenmesi için bekleme
    • Makine isim verilir
    • Sistem için bir parola belirlenir,
    • "Ev diziniz için şifrelensin mi?" sorusuna "hayır " yanıtı verilir
    • Saat ayarı yapılır
    • "Bölümleme Yöntemi" ekrana geldiğinde ilk seçenek yani "yardımcı ile diskin tamamını kullan" seçilir.
    • Bölümlenecek disk seçilir
    • Sistem kurulumu için beklem

    Yazılımları seçin ekranında aşağıdaki resimde belirtilen "OpenSSH Server" alanı boşluk tuşunu kullanarak işaretleyiniz. 




    • "Grub önyükleyici kaydına kurulsun mu?" sorusuna "Evet" yanıtı verilir.
    •  Kurulum bitirilme aşaması 
    •  Sistem Açılışı
    Aşağıdaki bu görüntü ile kullanıcı adı ve ardından gelecek olan şifrenizi girerek sisteme girebilir.
    istediğiniz çalışmaları yapmaya başlayabilirsiniz...




    Temel Linux Komut Bilgileri

            Bu aşamada bilmemiz gereken bazı komutlar var (hepsi bu uygulama da kullanılmadı):

    Not: Yapılan çalışmada komutların aktarımı için tercihen kullanılan Putty arayüzünü ben kullanmadım. Satır girişlerini manuel yaptım. 


    Komut satırı ve kabuk temel komutları :

    • "$" : Kullanıcı olduğunu gösterir
    • "#" : root admin olduğunu gösterir
    • "~" : Kullanıcının home dizinini ifade eder.
    • uname işletim sistemi bilgisini verir.
    • uname –a : İşletim sistemi hakkında tüm bilgiyi verir.
    • whoami : Kimlik hakkında bilgi verir (ben kimim)
    • date : Tarihi verir.
    • free : Kullanılan ve boşta kalan bellek (ram) bilgisini verir.
    • free –m : MB cinsinden Ram bilgisini verir.


    Kabuk Terminal Uygulamalarına geçiş (Linux türevlerinde farklılık gösterir)
    • Alt+F2 : gnome-terminal
    • console
    • xterm
    • Sanal Uç birimler kabuki ortamına geçiş Ctrl+Alt+F1…..F6
    • Ctrl+Alt+F7 (Masaüstüne geçiş)
    • who : sisteme giriş yapan (açık olan) kullanıcıları gösterir.
    • who –uH à sistemdeki kullanıcıların ayrıntılı bilgisini verir.
    • echo $SHELL à Hangi kabuğun kullanıldığı bilgisini verir.
    • /bin/bash
    Temel kullanılan kabuklar
    • • sh
    • • bash à Bourne Asign Shell GNU Aracı
    • • csh
    • • tsh
    • • zsh
    • who –uH komutunu verdiğimizde pts/0 …… (:0.0) : :0 grafik ekran olduğunu gösterir.

    • Not : Linux büyük ve küçük harfe duyarlıdır.
    • id komutu : kullanıcı kimliği hakkında bilgi verir. Üye olunan grupları gösterir.
    • uid – user id, gid – group id, groups-gruplar, dip-ekran kartı, video- kullanılabilecek
    • uygulamalar, plugdev- açma kapama izni, netdev-network aygıtları
    • pwd : bulunduğumuz dizini ekrana gösterir.
    • echo $HOME  : Kullanici home dizinini gösterir.
    • $ : Değişken o
    • :  bulunduğu kelimenin sonuna götürür.
    • w :  bir sonraki kelimenin başına gider.
    • d+4+sağ :  sağdan 4 karakter siler
    • v :  visiual mod
    • yy  :  satırın tamamını kopyalar
    • y :  kopyalar
    • p  :  yapıştırır
    • x :  keser
    • /aranan kelime + esc
    • n tuşuna basarak aramaya devam edilir
    • shift+n yukarı doğru arar
    • aynı şekilde ? işareti yukarı doğru arar
    • :split üstüste 2 sayfa açar
    • :split solucan_head : çalıştığım dosya ile solucan_head dosyasını beraber açar
    • :vsplit yanyana 2 sayfa açar
    • :w :  kaydeder
    • :wq :  kaydedip çıkar
    • :q! :  kaydetmeden çıkar
    • :10 :  10. satıra götürür.
    • shift+g : editörün en sonuna atar
    • gg :  editörün en başına atar
    • ctrl+r :  en son yaptığın komutları gösterir.
    • history :  daha önce yazılan komutları gösterir.
    • cp :  kopyalama yapar
    • örnek: cp kopyalayacağımız dosya kopyalanacak adres
    • cp -R :  alt dizinle birlikte kopyalar
    • mv :  taşıma işlemi yapar
    • mv :  isim değiştirmek için kullanılır

    • ls Komutu : Listeleme komutu ls –la : gizli dosyalarla birlikte ayrıntılı listeleme

    Not: Yeşil dosyalar çalıştırılabilir olduğunu, maviler ise dizin olduğunu ifade eder.
    • touch : dosya oluşturur. Örn : touch dosya_adi
    • / : Kök dizin olduğunu ifade eder.
    Not : Klasör ve dosya isimlerinde boşluk kullanılmaz.
    • cd komutu : klasörler arasında gezinmeyi sağlar.
    • cd : home dizinine gider. cd ~ : home dizinine gider.
    • cd / : kök dizine gider.
    • cd .. : bir üst dizine gider.
    • cd klasor_adi : klasöre gider.
    • echo : ekrana yazdırır.   
      Root İşlemleri

    • su komutu : root olunur. (yönetici)
    • passwd : şifre değiştirmek için kullanılır.
    • passwd user : user şifresini değiştirmek için kullanılır. sadece passwd yazarsak root şifresini
    • değiştirir.
    • /root : su kök dizini


    Sudo (Super User Do) : Sanal makine, başlangıçta bizi standart(kısıtlı) kullanıcı olarak kabul eder ve root yetkisindeki işlemlere izin vermez. Çünkü root yetkisinde yapılan işlemler yanlış yapıldığında, sistemimiz için son derece tehlikeli durumlar oluşturabilir. İşte komutların başına yazdığımız “sudo” bu kısımda devreye giriyor. Root yetkisiyle, standart(kısıtlı) hesapta işlemler yapmamızı sağlıyor. Bu direkt root yetkisine sahip olarak yapılan işlemlerden daha güvenli bir ortam sağlıyor.
    Linux’un birçok paketi-programı içerisinde barındıran bir deposu vardır. Bu depo bize oldukça kolaylık sağlar. Çünkü birkaç komutla istediğimiz paketi bu depodan kolayca indirip kurabiliriz. Bu depoyla ilgili:

    “sudo apt-cache search x” : x paketinin depoda olup olmadığını sorgular. Eğer varsa bu x paketiyle ilgili depoda bulunan veriler listelenir.

    “sudo apt-get update install x” : Eğer x paketi depoda var ise bu paketi yükler ve sistemimize kurar.

    “sudo apt-get update” : Depoda olan yeni paket sürümleri ile bizim sistemimizde olan paket sürümlerini karşılaştırır ve yeni bir sürüm varsa bu sürümleri listeler.

    “sudo apt-get update remove x” : x paketiyle ilgili olan binary verileri sistemden kaldırır. Fakat daha önce paket ile ilgili yaptığımız ayarları kaldırmaz.

    “sudo apt-get update purge x” : x paketini tamamen sistemden kaldırır. O paket ile ilgili her şey silinir.

    Not: “ps aux” yazarak görev yöneticisine gidebilir, çalışan komutları görebilirsiniz.
    Not: “ps” yazarak bizim çalıştırdığımız komutları görebilirsiniz.
    Not: Siyah terminaldeki geçmiş ekranını temizlemek için “clear” komutunu kullanabilirsiniz.
    Not: Komut yazımını yarım bırakıp 2 kez “Tab” tuşuna basarak, yarım bıraktığımız komut ifadesini tamamlayabilecek komutları görebilirsiniz.
    Not: Dosyalar – Klasörler Üzerinde İşlemler
            
    Linux’ta dosyalar-klasörler üzerinde değişiklik yapabileceğimiz “mc” eklentisi vardır. Bu eklentiyi yüklemek için :
    sudo apt-get install mc” yazalım ve gelen soruya “E” yanıtını vererek indirip kurmasını bekleyelim.
    Not: Komut satırına direkt olarak “mc” yazarak dosya yöneticisini açabilirsiniz.



    MySQL ile Veritabanı İşlemleri

    MySQL : Altı milyondan fazla sistemde yüklü bulunan çoklu iş parçacıklı, çok kullanıcılı, hızlı ve sağlam bir veri tabanı yönetim sistemidir.

    sudo apt-get install mysql-server” yazarak MySQL-Server’ı yüklüyoruz.

    sudo apt-get install python-mysqldb” yazarak MySQL veritabanı için Python arayüzünü yüklüyoruz.

    mysql –u root -p” yazıyoruz ve biz MySQL sunucusuna bir root şifresi veriyoruz. Veritabanı işlemleri yapacağımız zaman burada vereceğimiz şifreyi kullanacağız.

    Şimdi üzerinde çalışacağımız veritabanını oluşturalım. Ben veritabanıma “veritabanim” ismini veriyorum. Siz komut üzerinde değişiklik yaparak kendi istediğiniz bir isim verebilirsiniz.

    create database veritabanim;”    Not: Komutun sonuna “;” koyma şartı var.

    Eğer sistemimizde var olan veritabanlarını görmek istersek:
    show databases;” komutunu yazıyoruz.


    Az önce yazdığımız komutla veritabınının oluşup/oluşmadığını denetleyelim:







    Bu aşamada oluşturduğumuz veritabanı için bir admin ve şifresi tanımlayacağız. Ben “rky” isminde, “r” şifresiyle oluşturuyorum.

    create user ‘rky’@’localhost’ identified by ‘r’;” admin ve şifre alanları ‘ ‘ içine alınmalıdır.
    Şimdi ise oluşturduğumuz admin için, “Grant” komutuyla tüm izinleri aktif edeceğiz.

    use veritabanim;” komutuyla “veritabanim” isimli veritabanını kullanacağımızı bildiriyoruz.

    grant all on veritabanim.* to ‘rky’@’localhost’;” komutunu kullanıyoruz.

    Bir tablo oluşturalım.
    create table kisiler(kisinumarasi int, adisoyadi varchar(50));” kodu ile “kisiler” isminde, 2 alanı olan bir tablo oluşturduk.

    Bu tabloya ekleme yapmak istersek:
    insert into kisiler values(‘1’,’rky’);” komutu ile örnek amaçlı bir satır ekledik. İsterseniz bunu çoğaltabilirsiniz.

    "select * from kisiler;" yazıp eklediğiniz kayıtları görebiliriz.
    quit;” yazıyoruz ve MySQL - Server sisteminden ayrılıyoruz.


    Python İle Kodlama

    Veritabanımızı oluşturduğumuza göre Python üzerinden etkileşim işlemlerine geçebiliriz. Ama öncesinde sistemimize Python’u kuralım.
    sudo apt-get install python-pip” yazalım “Devam etmek istiyor musunuz?” soruna “E” yanıtını verelim.

    Pip : Python’da Pip paket yöneticisidir. Python’da modülleri uygulamalarınıza dahil edebilmeniz için kurduğunuz paket yöneticisi. Halihazırda kullanmanızı bekleyen binlerce python modülunuzu çok basit bir şekilde projenize entegre etmenizi sağlar.

    Framework: Geliştiricilere projelerinde kullanacakları sınıfların, eklentilerin toplu bir şekilde sunulmasıdır.


    Django Python programlama dili ile yazılmış MTV mimari desenini kullanan, yüksek seviyeli ve açık kaynak bir web frameworküdür. Django uygulama çatısı içinde veri modelleri (Python sınıfları olarak
    tanımlanır) ve ilişkisel veritabanı arasında aracı olarak çalışan bir nesne-ilişkisel eşleştirme bileşeni; düzenli ifadeler tabanlı bir url dağıtıcı; istekleri işlemek için bir görünüm sistemi; ve şablon sistemi barındırır.

    sudo apt-get install python-django” yazarak Django framework'ü, Ubuntu deposundan indirip yüklüyoruz.
    //bu özelliği ile kolaylık sağlamaktadır

    Ardından bir proje oluşturacağız ve adı  “mysite” olsun.
    django-admin startproject mysite” yazıyoruz. Ve projemiz \home\ubuntu\mysite adresinde oluşuyor.


    Şimdi dosya düzenleme işlemine gelelim. Az önce oluşturduğumuz “mysite” isimli projenin içerisinde “settings.py” isimli bir dosya var. Bu dosya içerisinde düzenlemeler yapacağız.

    sudo nano ~/mysite/mysite/settings.py” yazıyoruz ve bahsettiğimiz dosyanın içerisine giriyoruz.


    Ok tuşlarıyla dosyanın alt kısmına doğru geldiğinizde “DATABASES={” ile başlayan bir satır var. Bu satırlar üzerinde değişiklik yapacağız. Daha önce oluşturduğumuz veritabanını, bu dosya üzerinden tanıtacağız.

    DATABASES={” ile başlayan satıra geliyoruz ve bu satırlarda aşağıdaki verileri entegre ediyoruz.

    'ENGINE' = 'django.db.backends.mysql',
    'NAME' = 'veritabanim’,
    'USER' = 'rky',
    'PASSWORD' = 'r',
    'HOST' = '',
    'PORT' = '',


    Düzenleme bittiğinde “Ctrl + X” tuşlarına, sonra “E” tuşuna basıp onaylıyoruz. Düzenleme bittiğinde “settings.py” dosyasının ilgili satırları aşağıdaki gibi görünmelidir:




    projemizin içerisine girmek için komut satırına “cd mysite” yazıyoruz .


    Veritabanında gerekli şablonları otomatik olarak oluşturması için :

    python manage.py syncdb” yazıyoruz ve sorulan soruya “yes” yanıtını veriyoruz. Bizden kullanıcı adı, e-mail adresi ve şifre girmemizi istiyor. Bu alanları doldurduktan sonra süper kullanıcının başarıyla oluşturulduğu mesajı çıkıyor.


    Not: bu aşamada verilen bilgileri kaydetmeyi unutmayınız, oluşabilecek hatalara karşı önlem almış olursunuz.

    Son olarak “manage.py” dosyasını server bağlantısını yapacağız. 

    Komut satırına :
    python manage.py runserver 0.0.0.0:8000” komutunu yazıyoruz ve projemizi ağa sunmuş oluyoruz.

    Not: Eger port bağlantısı sağlanmaz ise 8000 değerinde değişiklik yapmak gerecektir.

    Ana işletim sisteminize gelip, tarayıcıda “localhost:8080” yazarak yayınladığınız siteye ulaşabilirsiniz.

    Not: Bu aşamada alınan portlar her daim açık olmayabiliyor, başlangıçta 8080 olarak değer almama rağmen bu portla sanal makineye çıkmadığım için 8080 portunu daha sonra değiştirerek uygulamamı gerçekleştirdim. Sizde bu aşamada bu tip bir sorunla karşılaşmanız muhtemeldir.

    Not: Buradaki 8080 portu; Ubuntu’yu kurarken ağ yapılandırmasındaki ana makine ile bağlantı noktasına verdiğimiz port değeridir.







    Açılış sayfamızı biraz özelleştirmek istersek, bunun için "sudo nano ~/mysite/mysite/views.py" yazalım. ve "mysite" isimli projemizde yeni bir .py uzantılı dosya oluşturalım. Bu dosyanın içerisine aşağıdakileri kod dizilimini yazalım :

    # -*- coding: utf-8 -*-
    from django.http import *
    def DjangoDeneme(request):
    return HttpResponse(u'<h1>Bilecik Şeyh Edebali Üniversitesi</h1>')

    Yani "views.py" dosyasının görünümü şu şekilde:




    Burada tanımladığımız "DjangoDeneme" fonksiyonu, tarayıcımıza return ile "Bilecik Şeyh Edebali Üniversitesi" metnini gönderecektir.



    Oluşturduğumuz views.py dosyasını, Django projesinde hazır olarak bulunan urls.py dosyasına ekleyeceğiz. Bunun için komut satırına;

    "sudo nano ~/mysite/mysite/urls.py" yazalım ve bu açılan dosyanın içeriğini aşağıdaki gibi yapalım :




    Ve projemizi ağa sunduktan sonra, ana makina tarayıcımızın urls'ine "http://localhost:8080/deneme/" yazalım.




    Projenin başında veritabanına kaydettiğimiz verileri, tarayıcıda yazdırmak istersek eğer, bunun için "views.py" dosyasını aşağıdaki gibi düzenlememiz gerekir:

    # -*- coding: utf-8 -*-
    from django.http import *
    from django.http import HttpResponse
    import MySQLdb
    def DjangoDeneme(request):
            conn = MySQLdb.connect (host = "localhost",
            user = "rky",
            passwd = "r",
            db = "veritabanim")
            cursor = conn.cursor ()
            cursor.execute ("select kisinumarasi, adisoayadi from kisiler")  //adisoayadi girmemin nedeni veri tabanına bu şekilde girmiş olmamdan bu nedenle de hatayla karşılaştım
            rows = cursor.fetchall()
            html="<html><body>"
            for row in rows:
                    html1 = "Kişi Numarası :  %s"% row[0]
                    html2 = "&nbsp&nbsp  Adı Soyadı : %s<br>"% row[1]
                    html=html+html1+html2
            kapanis="</body></html>"
            html=html+kapanis
            return HttpResponse(html)

    Yani "view.py" dosyası şu şekildedir :


    Not: Komut satırında manuel olarak ifadeleri yazdığım içim benim karşılaştığım problemlerden biri yazım hatalarıydı.Boşluk ve bazı harf hataları sanal makineye bağlantı aşamasında problem olmakta. Tavsiyem bu konuya dikkat etmenizdir. Ayrıca kullanıcı ismi şifre gibi değerleri de bu aşamada kullandığımız için bu değerleri de doğru tanımlamış olmanız önemlidir.

    Bir hata örneği:




    Komut satırına "cd mysite" ve ardından "python manage.py runserver 0.0.0.0:8000" yazıp, ana makinemizin tarayıcısına "http://localhost:8080/deneme/" yazarsak veritabanından çektiğimiz verileri görebiliriz. Ben bir değer tanımladım bu aşamada, siz sistemin sorunsuz çalıştığını gördükten sonra ayrıca değer girebilirsiniz.
    bu satır  gibi,
    insert into kisiler values(‘1’,’rky’);” komutu ile örnek amaçlı bir satır ekledik. İsterseniz bunu çoğaltabilirsiniz.





    KAYNAK: 




    Hiç yorum yok:

    Yorum Gönder