• 28-06-2013, 20:26:31
    #1
    Oncelikle klavyemde Turkce karakterler olmadigi icin yazida Turkce karakterler kullanamayacagim icin ozur dilerim.

    Bu yazida Ubuntu isletim sistemi kullanicilari icin lokalde kullanmaniz icin bir uzanti yaratacagiz ve bu uzantiya sanal host acacagiz.

    Kullanacagimiz Yazilimlar:
    • Apache
    • PHP
    • MySQL
    • Bind9
    • nscd
    • PHPMyAdmin
    • Python
    Dikkat: Bitene kadar terminali kapatmayin. Her seferinde Root girisi yapmak zorunda kalirsiniz.

    Terminali Acalim ve Root Yetkilerini Alalim
    sudo -i
    MySQL Server Kuralim
    apt-get install mysql-server mysql-client
    Kurulum esnasinda sizden Root Parolasi isteyecektir. Lutfen bos gecmeyelim. Her ne kadar lokal calisiyor olsakta guvenligi elden birakmamakta yarar var.


    Apache Web Server'i Kuralim
    apt-get install apache2
    Kurulum tamamlandiktan sonra Internet Tarayicimizi acarak http://localhost adresine girelim. Eger karsimiza sayfa acildiysa Apache duzgun bir sehilde kurulmustur.


    PHP Kurulumu ve Apache Eklentisi

    apt-get install php5 libapache2-mod-php5
    Apache'yi Yeniden Baslatalim
    /etc/init.d/apache2 restart
    Apache yeniden basladiktan sonra ornek bir PHP sayfasi yaratalim ve PHP calisiyormu kontrol edelim.


    gedit /var/www/info.php
    <?php
    phpinfo();
    ?>
    Simdi http://localhost/info.php adresine girelim ve PHP bilgileri gosteriliyor mu bakalim. Eger PHP Info sayfasini gorduyseniz sorun yoktur.


    PHP icin MySQL ve Diger Gerekli Eklentilerin Kurulumu
    apt-get install php5-mysql php5-curl php5-gd php5-idn php-pear  php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming  php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy  php5-xmlrpc php5-xsl php5-json
    Apache'yi Yeniden Baslatalim
    /etc/init.d/apache2 restart
    Simdi yine http://localhost/info.php adresine girelim ve eklentiler kurulmus mu gorelim.


    PHP artik calisir durumda ama sitelerimizi ya localhost altinda, alt klasorde denememiz gerekiyor yada her seferinde /etc/hosts dosyasini duzenleyerek kendi domainimizi olusturuyorduk.


    Birazdan gosterecegim yolla istedigimiz domain uzantisi ile lokal site acmayi gosterecegim.


    Bu Sistem Nasil Calisiyor?
    Bu sistem lokalimiz icin bir DNS Server kurarak calisiyor. Biz aslinda bir Web Sitesini Cpanel, DA yada diger panellerin otomatik yaptigi islemleri yaparak acacagiz.

    Bu sistemi yapmaniz; ilerde kendi sunucunuza panel kurmadan da site acabilmenizi saglayacak bilgileri ogrenmenizi saglayacak.

    Ag Yapilandirmaniz
    Bu sistemin duzgun calismasi ve agdaki diger bilgisayarlardan da erisilebilir olmasi icin ag yapilandirmanizla biraz oynamaniz gerekiyor.

    Kullandigim sistem 13.04, WiFi kullaniyorum ve dili Ingilizce, bu yuzden burda yapacagim ayarlar sizin sisteminizde biraz daha farkli olabilir. Fakat temel mantigini anlarsaniz yapmakta sorun yasamazsiniz.

    Not: Eger IP Ayarlarini otomatik almiyorsaniz bu asamayi gecebilirsiniz. Dogrudan DNS Ayarlamaya gidebilirsiniz.



    Bu secenekten (Eger kablolu kullaniyorsaniz fis gibi gorunur) Baglanti Bilgileri (Connection Information) Secenegine girerek IP bilgilerimizi goruyoruz.



    Bu bilgileri kaydedince yine ayni yerden bu sefer Baglanti Ayarlari (Edit Connection) bolumune girin.



    Buradan kullandiginiz agi secerek Duzenle (Edit) diyerek asagidaki kutuyu acin.



    1. IPv4 Secenegine giriyoruz ve Method olarak Manuel seciyoruz.
    2. Ekle (Add) diyerek az once kaydettigimiz IP Adreslerini giriyoruz.
    3. Onemli: DNS Server olarak kendi IP adresimiz sonrasinda ise Google (yada hangisini kullaniyorsaniz) DNS Adreslerini girmelisiniz.
    Not: Eger daha onceden otomatik kullanmiyorduysanizda 3. Adimi yapmaniz gerekmekte.


    DNS Server (BIND9) Kurulumu
    apt-get install bind9 dnsutils
    Kurulum tamamlandiktan sonra Bind icin ayaralar yapmamiz gerekmektedir. Ben uzanti olarak loc kullaniyorum ve ayarlarim loc uzanti icin. Sizde istediginiz uzantiyi ayarlayabilirsiniz.


    cd /etc/bind
    Yukardaki kod ile Bind ayarlarinin oldugu dizine gireriz.


    gedit named.conf.default-zones
    Bu kod ile varsayilan alanlari duzenleyebilecegimiz dosya acilir. Bu dosyada


    zone "localhost" {
        type master;
        file "/etc/bind/db.local";
    };
    kodunu bularak altina


    zone "loc" {
        type master;
        file "/etc/bind/db.loc";
    };
    kodlarini ekleyin ve kaydedip cikalim.


    Not: Eklediginiz kodlardaki loc alanlari (zone "loc" ve db.loc) uzantimizi belirliyor.


    gedit db.loc
    kodu ile uzantimizin yapilandirmasini yapalim.


    ;
    ; BIND data file for local loopback interface
    ;
    $TTL    604800
    @    IN    SOA    localhost. root.localhost. (
                      2        ; Serial
                 604800        ; Refresh
                  86400        ; Retry
                2419200        ; Expire
                 604800 )    ; Negative Cache TTL
    ;
    @    IN    NS    localhost.
    @    IN    A    127.0.0.1
    @    IN    AAAA    ::1
    
    *    IN    A    192.168.2.222
    Bu kodlarda 192.168.2.222 adresi sizin kendi lokal ip adresiniz olmali.


    Bu dosyayida kaydedip cikalim.


    NSCD Programini Kuralim (DNS onbellegini temizler)
    apt-get install nscd
    BIND9'u ve NSCD'yi Yeniden Baslatalim
    /etc/init.d/bind9 restart
    /etc/init.d/nscd restart
    Host Dosyalari icin Dizin Belirleme
    Ileride yedek almak veya dosyalar ile daha rahat calismak icin ben MySQL dosyalari, Apache ayarlari ve site dosyalari icin tek bir dizin kullaniyorum. Hatta bu dizin bende ayri bir SSD bolumu.


    Simdi anlatacagim yerlerde kullandigim dizinleri asagida aciklayacagim.


    /host: Root (/) icinde host ile alakali verileri tuttugum dizin
    /host/mysql: MySQL veri tabanlarini burada tutuyorum.
    /host/settings: Apache icin site ayarlari burada bulunuyor.
    /host/sites: Site dosyalari burada bulunuyor.
    /host/programs: Host acmak ve yeniden baslatmak icin yazdigim Python programciklari burada bulunuyor.


    Host Dizini Acma
    cd /
    mkdir /host
    mkdir /host/settings
    mkdir /host/sites
    mkdir /host/programs
    mkdir /host/mysql
    chmod -R 777 /host
    Not: Bundan sonra ben site dosyalari icin bu dizini kullanacagim fakat siz kendi istediginiz dizini ayarlayabilirsiniz.



    MySQL Database Tasima (Zorunlu Degil ama Yararli Oluyor)
    /etc/init.d/mysql stop
    cp -pr /var/lib/mysql/* /host/mysql/
    chown -R mysql:mysql /host/mysql
    Burada MySQL Dizinini yeni dizine kopyaladik. Fakat bunu MySQL'e tanitmadik. Simdi onu yapalim:
    gedit /etc/mysql/my.cnf
    datadir degiskenini bulup kendimizinki ile degistirelim ve kaydedip cikalim.

    datadir= /host/mysql
    Apparmor Ayarlari (MySQL icin)

    gedit /etc/apparmor.d/usr.sbin.mysqld
    Bu dosyada


    /var/lib/mysql/ r,
    /var/lib/mysql/** rwk,
    kodlarini bulup


    /host/mysql/ r,
    /host/mysql/** rwk,
    ile degistirelim ve kaydedip cikalim.


    Apparmor ve MySQL Yeniden Baslatalim

    /etc/init.d/apparmor reload
    /etc/init.d/mysql start
    Apache Ayarlari
    cd /etc/apache2
    Komutu ile Apache ayar dizinine girelim.


    gedit apache2.conf
    Kodu ile apache ayarlari dosyasini acalim ve en altina

    Include /host/settings/
    ekleyelim.

    Artik sanal siteler icin gerekli ayarlari tamamladik.

    Ilk Sanal Sitemiz
    Artik loc (yada kullandiginiz uzanti) uzantili siteler acabiliriz.

    cd /host/settings
    gedit phpmyadmin
    Kodlari ile phpMyAdmin icin bir site olusturmak ile baslayabiliriz.

    Acilan Gedit penceresi icine asagidaki kodlari ekleyelim.

    <VirtualHost *:80>
        ServerAdmin mail@adresim.com
        ServerName phpmyadmin.loc
        ServerAlias www.phpmyadmin.loc
        DocumentRoot /host/sites/phpmyadmin/www
        ErrorLog /host/sites/phpmyadmin/logs/error.log
        CustomLog /host/sites/phpmyadmin/logs/enter.log combined
    </VirtualHost>
    Kaydedip ciktiktan sonra gerekli dizinleri acalim.

    cd /host/sites
    mkdir phpmyadmin
    mkdir phpmyadmin/www
    mkdir phpmyadmin/logs
    chmod -R 777 phpmyadmin
    Bu adresten (http://www.phpmyadmin.net/home_page/index.php) phpMyAdmin indirelim. Nautilus (Dosya Yoneticisi) ile Downloads (Indirilenler) Dizinine gidelim ve phpMyAdmin-4.0.4-all-languages.zip dosyasina sag tiklayarak Extract Here (buraya cikar) diyelim.

    Simdi phpMyAdmin-4.0.4-all-languages adli bir dizin olusmus olamli. O Dizine girelim ve icindekilerin hepsini /host/sites/phpmyadmin/www icine kopyalayalim.

    Apache'yi Yeniden Baslatalim
    /etc/init.d/apache2 restart
    Simdi http://www.phpmyadmin.loc adresine girelim ve sitemizin calistigini gorelim.

    Not: Eger sayfa bulunamiyor hatasi aliyorsaniz bir kac kez CTRL+F5 yaparak sayfaya ulasabilirsiniz.

    phpMyAdmin Yapilandirmasi
    phpMyAdmin su anda yapilandirilmamis sekilde, biz onu yapilandirmamiz gerek.

    Terminalden

    cd /host/sites/phpmyadmin/www
    Komutu ile phpMyAdmin dosyalarinin oldugu dizine girelim ve

    mkdir config
    chmod o+rw config
    cp config.sample.inc.php config/config.inc.php
    chmod o+w config/config.inc.php
    Komutlari ile yazilabilir config dizin olusturalim ve icine ornek ayar dosyasi atalim.

    phpMyAdmin Kurulumuna Baslayalim
    http://www.phpmyadmin.loc/setup adresine girelim ve Yeni Sunucu baglantisina tiklayalimdirek Kaydet diyelim.

    Asagida Yapılandırma dosyası alaninda localhost icin ayarlar gelmis olamli, ordan varsayilan dilinizi secerek ve Kaydet diyelim.

    Simdi terminalden asagidaki komutlari calistirmamiz gerekiyor.

    mv config/config.inc.php .
    chmod o-rw config.inc.php
    rm -rf config
    Simdi http://www.phpmyadmin.loc adresine girerek MySQL Root ile giris yapabiliriz. (Kullanici adi: root Sifre: MySQL Kurarken girdiginiz sifre)

    Yeni Site Acmak ve Kolay Server Baslatma Icin Python Programi
    cd /host/programs
    gedit restart.py
    Kodlarini calistirarak restart.py programina basliyoruz.

    Not: Python yazarken bosluklarin onemi vardir. O yuzden kopyala/yapistir yaptiginizda veya elle girerken bosluklerin dogru yapilandirilmis oldugundan emin olun. (Eger program calismazsa asagida gorludugu gibi olacak sekilde bosluklari silip yetine TAB koyun.)

    #!/usr/bin/env python
    #-*-coding:utf-8-*-
    
    from os import system
    
    def restart():
        system('/etc/init.d/apache2 restart')
        system('/etc/init.d/bind9 restart')
        system('/etc/init.d/nscd restart')
    
    if __name__ == '__main__':
        restart()
    Kaydedip cikalim ve terminalde asagidaki komutu calistirarak izinleri verelim.

    chmod 777 restart.py
    Asagidaki kod ile calisip calismadigini deneyelim.

    ./restart.py
    Not: Normalde terminali acar acmaz asagidaki komutu yazarak calistirabilirsiniz.

    sudo /host/programs/restart.py
    Bu Program Ne Ise Yariyor?
    Eger bir nedenden dolayi Apache'yi yeniden baslatacaksaniz yada DNS onbellegini temizlemeniz gerekiyorsa bu programcik kolaylik sagliyor.

    Python MySQL Destegi
    apt-get install python-mysqldb
    Yeni Site Acma Programcigi
    gedit sh.py
    Kodunu calistirarak sh.py (Sanal Host) programcigina basliyoruz.

    #!/usr/bin/env python
    #-*-coding:utf-8-*-
    
    from sys import exit, argv
    from os import makedirs, system
    from restart import restart
    import MySQLdb
    
    class Host(object):
    
        def __init__(self):
            len_argv = len(argv);
            if len_argv > 1:
                if argv[1] == 'restart':
                    restart()
                    exit()
                self.domain = argv[1]
                if len_argv > 2 and (argv[2] == 'Y' or argv[2] == 'y'):
                    if len_argv == 4:
                        self.mysql(argv[3])
                    else:
                        self.mysql(False)
            else:
                self.domain = raw_input('Domain: ')
                db = raw_input('Database? (Y/N): ')
                if db == 'Y' or db == 'y':
                     self.mysql(raw_input('Password: '))
            
             if not self.domain:
                 print 'Domain adı olmadan olmaz!!!'
                 exit()
    
            self.mkdirs()
            self.apache()
            self.index()
            self.settings()
    
             exit()
    
        def apache(self):
            dosya = open('/host/settings/' + self.domain, 'w')
            dosya.write('<VirtualHost *:80>\n\tServerAdmin mail@adresiniz.com\n\tServerName ' + self.domain + '.loc\n\tServerAlias www.' + self.domain + '.loc\n\tDocumentRoot /host/sites/' + self.domain + '/www\n\tErrorLog /host/sites/' + self.domain + '/logs/error.log\n\tCustomLog /host/sites/' + self.domain + '/logs/enter.log combined\n</VirtualHost>')
            dosya.close()
    
        def mkdirs(self):
            makedirs('/host/sites/' + self.domain + '/logs')
            makedirs('/host/sites/' + self.domain + '/www')
    
        def index(self):
            dosya = open('/host/sites/' + self.domain + '/www/index.php', 'w')
            dosya.write('<!doctype html>\n<html>\n\t<head>\n\t\t<meta charset="utf-8">\n\t\t<title>' + self.domain + ' kullanıcısının sitesi açıldı</title>\n\t</head>\n\t<body>\n\t\t<? echo "Merhaba Dünya"; ?>\n\t</body>\n</html>')
            dosya.close()
    
        def mysql(self, password):
            if not password:
                password = 'Var Sayilan Parola'
    
            bag = MySQLdb.connect('localhost', 'root', 'MySQL Root Parolasi')
            im = bag.cursor()
    
            database = self.domain + '_db'
    
            im.execute('CREATE DATABASE ' + database)
            im.execute('GRANT ALL ON ' + database + '.* TO ' + self.domain + '@localhost IDENTIFIED BY \'' + password + '\'')
            im.execute('FLUSH PRIVILEGES')
    
            bag.commit()
            bag.close()
    
        def settings(self):
            system('ln -s /host/sites/phpmyadmin/www /host/sites/' + self.domain + '/www/phpmyadmin')
            system('chmod -R 777 /host/sites/' + self.domain)
            restart()
    
    host = Host()
    Yukardaki kodlarda kalin yazilan yerleri kendinize gore duzenleyin ve kaydedip cikin.

    chmod 777 sh.py
    Kodu ile izinleri verin ve

    ./sh.py
    kodu ile programi calistirin. Eger calisirsa size Domain adini (www ve .loc olmadan) girmenizi, ardindan database acmak isteyip istemediginizi ardinda da bu database icin vermek istediginiz parolayi soracaktir.

    Not: Eger database istemezseniz parola sormaz ve parola kismini bos gecerseniz programda belirtiginiz varsayilan parola database icin parola olur.

    Kisayol:
    Eger kendi database sifreniz ile acmak istiyorsaniz:
    ./sh.py domainadi Y mysql_parolasi
    Eger varsayilan database sifreniz ile acmak istiyorsaniz:
    ./sh.py domainadi Y
    Eger database olmadan acmak istiyorsaniz
    ./sh.py domainadi
    Not: Normalde terminali acar acmaz asagidaki komutu yazarak calistirabilirsiniz.

    sudo /host/programs/sh.py
    Kisayol:
    Eger kendi database sifreniz ile acmak istiyorsaniz:
    sudo /host/programs/sh.py domainadi Y mysql_parolasi
    Eger varsayilan database sifreniz ile acmak istiyorsaniz:
    sudo /host/programs/sh.py domainadi Y
    Eger database olmadan acmak istiyorsaniz
    sudo /host/programs/sh.py domainadi


    Acilan Database Adi ve Kullanici Adi
    Acilan database adiniz domainadiniz_db seklindedir ve bu database icin acilan kullanci domainadiniz seklindedir.

    Not:Bu her domain icine otomatik olarak phpmyadmin kisayolu olusturulur. Buraya ulasmak icin http://www.domainadiniz.loc/phpmyadmin adresini kullanabilirsiniz. Kullanci adi olarak domainadiniz ve sifresi icin belirlediginiz sifre yada varsayilan sifre kullanilabilir.

    Sistemin Son guzelligi:
    Eger /host/settings/domainadiniz dosyasina girip
    ServerAlias www.domainadiniz.loc
    kismini
    ServerAlias *.domainadiniz.loc
    olarak degistiriseniz tum sub domainler sizin sitenizi acacaktir. Bu sekilde wildcard kullanabilirsiniz.

    Not: Bu uzanltili sitelere agdaki diger bilgisayarlardan girmek icin o bilgisayarda DNS olarak ilk siraya sizin IP Adresinizi vermeniz gerekmektedir.

    Iyi gunlerde kullanmaniz dilegi ile. Bol Linux'lu Gunler

    Saygilarimla
    Umurcan Gorur
    AdAjans - Simturk
  • 29-06-2013, 00:19:33
    #2
    Çok kral yazı olmuş Umur Sen buralara yazar mıydın (:
  • 29-06-2013, 00:27:43
    #3
    Ya komutlar duruyodu pc de LibreOffice dosyasi icinde paylasayim, Ubuntu icin kaynak olsun sitede dedim