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
Terminali Acalim ve Root Yetkilerini Alalim
sudo -iMySQL Server Kuralim
apt-get install mysql-server mysql-clientKurulum 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 apache2Kurulum 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-php5Apache'yi Yeniden Baslatalim
/etc/init.d/apache2 restartApache 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-jsonApache'yi Yeniden Baslatalim
/etc/init.d/apache2 restartSimdi 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.

- IPv4 Secenegine giriyoruz ve Method olarak Manuel seciyoruz.
- Ekle (Add) diyerek az once kaydettigimiz IP Adreslerini giriyoruz.
- Onemli: DNS Server olarak kendi IP adresimiz sonrasinda ise Google (yada hangisini kullaniyorsaniz) DNS Adreslerini girmelisiniz.
DNS Server (BIND9) Kurulumu
apt-get install bind9 dnsutilsKurulum tamamlandiktan sonra Bind icin ayaralar yapmamiz gerekmektedir. Ben uzanti olarak loc kullaniyorum ve ayarlarim loc uzanti icin. Sizde istediginiz uzantiyi ayarlayabilirsiniz.
cd /etc/bindYukardaki kod ile Bind ayarlarinin oldugu dizine gireriz.
gedit named.conf.default-zonesBu kod ile varsayilan alanlari duzenleyebilecegimiz dosya acilir. Bu dosyada
zone "localhost" {
type master;
file "/etc/bind/db.local";
};kodunu bularak altinazone "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.lockodu 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.222Bu 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 nscdBIND9'u ve NSCD'yi Yeniden Baslatalim
/etc/init.d/bind9 restart /etc/init.d/nscd restartHost 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 /hostNot: 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/mysqlBurada MySQL Dizinini yeni dizine kopyaladik. Fakat bunu MySQL'e tanitmadik. Simdi onu yapalim:
gedit /etc/mysql/my.cnfdatadir degiskenini bulup kendimizinki ile degistirelim ve kaydedip cikalim.
datadir= /host/mysqlApparmor Ayarlari (MySQL icin)
gedit /etc/apparmor.d/usr.sbin.mysqldBu 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 startApache Ayarlari
cd /etc/apache2Komutu ile Apache ayar dizinine girelim.
gedit apache2.confKodu 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 phpmyadminKodlari 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 phpmyadminBu 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 restartSimdi 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/wwwKomutu 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.phpKomutlari 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 configSimdi 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.pyKodlarini 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.pyAsagidaki kod ile calisip calismadigini deneyelim.
./restart.pyNot: Normalde terminali acar acmaz asagidaki komutu yazarak calistirabilirsiniz.
sudo /host/programs/restart.pyBu 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-mysqldbYeni Site Acma Programcigi
gedit sh.pyKodunu 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.pyKodu ile izinleri verin ve
./sh.pykodu 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_parolasiEger varsayilan database sifreniz ile acmak istiyorsaniz:
./sh.py domainadi YEger database olmadan acmak istiyorsaniz
./sh.py domainadiNot: Normalde terminali acar acmaz asagidaki komutu yazarak calistirabilirsiniz.
sudo /host/programs/sh.pyKisayol:
Eger kendi database sifreniz ile acmak istiyorsaniz:
sudo /host/programs/sh.py domainadi Y mysql_parolasiEger varsayilan database sifreniz ile acmak istiyorsaniz:
sudo /host/programs/sh.py domainadi YEger 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.lockismini
ServerAlias *.domainadiniz.locolarak 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
Sen buralara yazar mıydın (: