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