Kategoriler
Centos hakkında Günlük hayat Linux Web sunuculari Nginx Webmaster yardım

Centos sunucularda panelsiz Websunucusu (php, mysql) ve NGINX kurmak, yonetmek!

Sunucu bazli yardimsal makalelerime hizlica devam ediyorum arkadaslar. Bu yazimda size panelsiz olarak websunucusu kurmayi anlatacagim.

Bu anlatimla neler yapabileceksiniz ?:
* Bir websunucunuz olacak (apache)
* php uygulamalarini calistirabileceksiniz
* Mysql veritabani yonetim yazilimini kuracagiz.
* BIND (dns) kuracagiz (ama calistirmayacagiz)
* Yeni domain eklemeyi, web tarayicisi ile bu domaine erismeyi ogreneceksiniz.
* Bu islemlerden sonra NGINX ile daha hizli bir websunucusu kuracagiz.
* Yardimci olabilecek modulerede yer verecegim.

Makale sirasinda bize gereken programlari bilgisayariniza indirip kurun:
* Winscp (Windows ortaminda sunucunuza erismenizi ve kolayca duzenleme yapabilmenizi saglar, bir ftp programi gibi)
* Putty (ssh ile sunucuya erismemizi ve unix ortaminda programlari kurmamizi saglayacak)

Gerekli olan programlari kurup actiktan sonra sunucunuza baglanin, bundan sonraki anlatim bunu dusunerek anlatilacaktir..

l: Websunucusu apache dahil bize yardimci olacak php, mysql ve bind modullerini kuralim
Ssh programimizi acalim (putty), ardindan asagidaki kodu yazarak onaylayin:

yum -y install httpd php mysql bind mysql-server php-mysql

Bu islemden sonra sunucumuza apache http websunucusu, bunun yaninda dns uygulamalariniz icin yonetmenize imkan verecek bind (named), php ve mysql, ve bunlarin bir arada derlenmesi islemi bitmis olacak..

A: Apache ve mysql programlarini, sunucunuza restart (reebot) atildiktan sonrada, otomatik baslatilmasi icin, asagidaki kodu sshden uygulayin:

/sbin/chkconfig httpd on
/sbin/chkconfig mysqld on

Apache’yi ve mysql’yi baslatalim:

service httpd start
service mysqld start

B: Mysql root sifrelerimizi olusturalim
mysql kurulduktan sonra sifre degistirilmesi gereklidir, bunun icin asagidaki kodu ssh ekranindan calistirin, ancak once SIFRENIZ kismini kendi yeni sifrenize gore degistirin, bu sifre mysql ye erismede kullanacaginiz guvenlik kodu olacak.

/usr/bin/mysqladmin -u root password 'YENI-SIFRENIZ'
/usr/bin/mysqladmin -u root -h test.kuaza.com password 'YENI-SIFRENIZ'

Restart atmak icinde asagidaki kodu kullanabilirsiniz:

service mysqld restart

C: Yeni domain ve dosyalari icin kullanici ekleme (kullanici izinleri dahil)
ilk olarak sunucunuzun IP adresine yada Hostname domainine girildiginde acilmasini istediginiz alanlari tanimlayalim. Bu ilk domain ekleme islemimiz olacak, dikkatlice takip edin, sonraki adimlarda yeni domain eklemek istediginizde ayni islemi tekrarlamaniz gerekecek.

Oncelikle Hostname (Ornek: test.kuaza.com) domaini icin kullanici ve izinlerini olusturalim: Bu hostname sunucunuzun ismi niteligindedir, asagidaki kodu ssh ile uygulayin:

useradd DOMAIN-ISMI

Ornek: useradd test.kuaza.com

Sonrasinda sunucunuzda /home/ dizini altina kullanici klasoru olusturulmus oldu. Sitemizin dosyalari bu klasor altinda yer alacak, ornegin: resim, html ve php dosyalariniz. Burada olusturulan kullanici klasorune chmod ayari verecegiz. Kullanici klasorunun chmod ayari 711 olmali. Ornek resimdeki gibi:

Simdi /home/ klasoru altinda olusturulan yeni kullanici klasoru icine girin ve asagidaki isimlerde 2 tane klasor olusturun: bunu winscp programi ile yapin.

public_html
logs

Sonrasinda sag tik yapin acilan listede en altdakini secin: Properties ‘i secin: Bu kisimda klasorlere kullanici izinlerini verecegiz, boylece icerisine yukleyecegimiz dosyalara tarayicimiz ile erisim mumkun olacak. Ornek Winscp ile asagidaki resimdeki gibi yapabilirsiniz: Group ve Owner kisimlarini ayni secin, root olmamasi gerek, secmek icin tiklayin orda diger kullanici ismi cikacaktir, onu secin, ornek resimde mevcut. Eger root secili ise tarayici ile dosyalariniza erismek mumkun olmayacaktir:

Simdi public_html kalasoru icine ornek bir resim, php yada html dosyasi yukleyin, bu dosya deneme yaparken calisip calismadigini anlamak icin kullanacagiz.

D: Apache konfigurasyon dosyasina domain ile bilgileri girelim:
Bunu yapmamiz gerekli, cunku gelen istekleri apache hanki klasore yonlendirecek bunun tanimlamasini girecegiz.

Bu ayarida C: anlatimi kisminda oldugu gibi her domain ve kullanici eklendiginde yapmaniz gerekli. Cunku apachenin domain calistirilmak istendiginde hangi klasoru acacagini belirlememiz gerekli, aski halde siteye girilmek istendiginde apache standart dosyasi acilacaktir.

Apache yapilandirma dosyasini acalim (winscp ile): /etc/httpd/conf/httpd.conf

Bunu aratin ve bulun:

#NameVirtualHost *:80

Bu sekilde duzeltin: 

NameVirtualHost SUNUCU-IP-ADRESINIZ:80

Eger sunucunuzda birden fazla ip belirlemek istiyorsaniz altina yeni IP yi asagidaki sekilde eklemeniz gerekli:
NameVirtualHost YENI-SUNUCU-IP-ADRESINIZ:80

Bunu her yeni IP icin yapmaniz gerekli.

Sonrasinda en alta gelerek her domain icin ayri ayri ekleyecegimiz asagidaki kodlari ekleyin:

ServerName test.kuaza.com
ServerAlias www.test.kuaza.com

##Domain ve dosyalar icin kok dizin belirliyoruz
DocumentRoot /home/test.kuaza.com/public_html
##Domain ve dosyalar icin kok dizin belirliyoruz

ServerAdmin kuaza.ca[AT]gmail.com
UseCanonicalName Off

## Hata dosyalarinin tutulacagi yeri belirtiyoruz
ErrorLog /home/test.kuaza.com/logs/test.kuaza.com-error_log
CustomLog /home/test.kuaza.com/logs/test.kuaza.com-access_log common
## Hata dosyalarinin tutulacagi yeri belirtiyoruz

##Bu kisim useradd XXX diye belirledigimiz domaine ozel kullanici izinleri

suPHP_UserGroup test.kuaza.com test.kuaza.com

SuexecUserGroup test.kuaza.com test.kuaza.com

##Bu kisim useradd XXX diye belirledigimiz domaine ozel kullanici izinleri

Bu kodu her domain ekleyeceginiz zaman kopyalayarak yeni domaine uyarladiktan sonra en alta ekleyin. Bunu hostname domaini ve ip adresiniz icinde uygulayin, boylece ip adresini adres satirina girerek ulasmak istendiginde istediginiz bir sayfayi actirabilirsiniz. aksi halde ilk tanimladiginiz domain acilacaktir IP adresi ile girilmeye calisildiginda :)

Bu ayardan sonra apache sunucusuna restart atalim:

service httpd restart

Eger bir hata vermez ise sorunsuz sekilde domaini adres satirindan calistirdiginizda acilacaktir.
Ornek: http://test.kuaza.com
Ornek resim:

Gordugunuz gibi bu adimlardan sonra panelsiz olarak websunucumuz hazir oldu, calisiyor. Suanda BIND yani dns yonetici uygulamasi isimize yaramiyor, daha dogrusu baslatmadik. Baslatsakta calismaz, hata verecektir, cunku konfigurasyon dosyasi ve sunucuda bagli domainler icin yapilandirma dosyalari olusturmamiz gerekli. bu suan icin gerekli degil, cunku gelismis ozellikleri kullanmak isterseniz yapmanizi tavsiye ederim. Ornegin webmail, yeni ns olusturmak, Domaine ozel ip belirlemek gibi. Ilerleyen donemlerde zamanim olursa BIND (dns zone) uygulamasi hakkinda da makale yazacagim, bu makaleye hitafen.

Sizde artik panelsiz olarak sunucunuzu kurabilir, yonetebilirsiniz.

2: Panelsiz sunucuda NGINX kurulumu
Sunucumuzu nginx ile guclendirerek daha hizli ve rahat bir sunucu hazirlayabiliriz. Apache tek basina yuksek hitli sitelerde bunun altindan kalkamayabilir. Cunku apache her dosya icin yeni bir slot yani islem baslatir. Bu statik, resim, html,css,js gibi dosyalarida icerir. Buda kisa surede apachenin uygulayacagi islem gucunun dolmasina neden olur. cogu zaman bu islem gucu asildiginda sitenize ulasilamama, gec acilma gibi bir cok sorunla karsilasirsiniz. Ancak Nginx websunucusu ile statik dosyalarin islenmesi cok daha kolay olur ve apache ye diger uygulamalari calistirmak icin alan ve islem gucu saglanir. isterseniz panelsiz bir sunucuda nginx kurulumu icin detayli bir dokumanin anlatimina baslayalim :)

Oncelikle nginx’i yum yardimi ile kuralim: Nginx derlemesi yum deponuzda olmayabilir, bu yuzden asagidaki adimlari takip edin.

Sunucunuza uygun olani secin ve ssh den calistirin:
CentOS 5

rpm -Uvh http://nginx.org/packages/centos/5/noarch/RPMS/nginx-release-centos-5-0.el5.ngx.noarch.rpm

CentOS 6

rpm -Uvh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

Kendinize uygun olan kismi uyguladiktan sonra nginx otomatik kurulum dosyasi yum depolarina eklenmis oldu, ilk kullandigimiz kurulum kodunu tekrar sshden calistiralim:

yum install nginx

Bunun ardindan nginx’in kurulmus olmasi gerekli. Bu adimdan sonra tek yapacagimiz sey hesabimizdaki domainleri tanimlamak.

Orjinal kurulan nginx konfigurasyon dosyasinda cogu sey belirtilmemistir ve eksiktir. Ozellikle nginx in gzip ozelligi bile acik degildir ve bununla beraber cogu faydali ozellikleri acmak icin asagidaki islemleri sshden uygulayin:

rm -rf /etc/nginx/nginx.conf
cd /etc/nginx/
wget www.makaleci.com/dersler/nginx/nginx.conf

Bu islemden sonra hesabimizdaki siteleri nginx’e tanitalim. Bunun icin her siteyi ayri ayri tanitacagimiz konfigurasyon dosyasini acalim (winscp ile):

/etc/nginx/conf.d/default.conf

Dosya icerisindekileri komple silin ve asagidakileri ekleyin:

server {
access_log off;
error_log /var/log/httpd/nginx.errors.DOMAIN.com.log warn;
listen 80;
server_name DOMAIN.com www.DOMAIN.com;

# Nginx'in calistirmasini istediginiz statik dosya uzantilarini belirleyin.
location ~* .(gif|jpg|jpeg|png|wmv|avi|mpg|mpeg|mp4|js|css)$ {
root /home/DOMAIN.com/public_html; # Burda domaine ait kok dizini belirtiyoruz.
}

location / {
proxy_send_timeout 90;
proxy_read_timeout 90;

proxy_buffer_size 4k;
proxy_buffers 16 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

proxy_connect_timeout 30s;

proxy_redirect http://www.DOMAIN.com:81 http://www.DOMAIN.com;
proxy_redirect http://DOMAIN.com:81 http://DOMAIN.com;

proxy_pass http://DOMAIN-IP ADRESI:81/;

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

Sonrasinda icerisinde goreceginiz BUYUK harfle yazdigim yerleri nginx’e tanitacaginiz domaine gore duzenleyin.
NOT: Bu kod kalibini her domain icin ayri ayri, alt alta ekleyerek yeniden eklemeniz gerekli. Yani her domain icin bu kalibi kullanin ve alt alta ekleyerek kaydedin.

E: Ilk acacagimiz domaini belirttikten sonra bu ayar ile apache’yi acalim ve port ile tanimladigimiz domaine ozel bolumu nginx icin duzenleyelim.

Apache yapilandirma dosyasini acalim (winscp ile): /etc/httpd/conf/httpd.conf
Bunu aratin:

Listen 80

Bununla degistirin: 

Listen 81

Sonrasinda ekledigimiz sunucu ve domain ip lerinin sonundaki port numarasini nginx e yonlendirecegimiz port ile degistirelim:
Bunu aratin:

NameVirtualHost SUNUCU-IP-ADRESINIZ:80

Bununla degistirin: 

NameVirtualHost SUNUCU-IP-ADRESINIZ:81

 

Ve domain kisimlarindaki portuda 81 ile degistirin. Yukarida apache kurulduktan sonra domaini belirttigimiz kod kismi var, en sonda olmasi gerekli. O koddaki 80 kisimlarinida 81 ile degistirecegiz.

Her domain icin ayridir, BULUN:

<VirtualHost IP-ADRESI:80>

DEGISTIRIN:

<VirtualHost IP-ADRESI:81>

Yani kisaca arkadaslar apache yapilandirma dosyasi icindeki acik olan :80 portunu :81 ile degistiriyoruz. Boylece Domaine gelen istekleri NGINX e gondermis olacagiz.

F: mod_rpaf kurulumu
Oncelikle mod_rpaf kurulumu icin gerekli olan uygulamalari yum yardimi ile kuralim:

yum install httpd-devel gcc

Sonrasinda mod_rpaf i kuralim ve derleyelim:

cd /usr/local/src
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar xzvf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

Sonrasinda tekrar apache konfigurasyon dosyasini acalim: /etc/httpd/conf/httpd.conf

Aratin: 

LoadModule

 


Bu kismi buldugunuzdan emin olur, apache modullerinin listesini goreceksiniz, alt alta 20-30 tane olmasi gerekli. Bu listenin en sonuna, bir satir asagiya gecip asagidaki kodu ekleyin:

LoadModule rpaf_module modules/mod_rpaf-2.0.so
# mod_rpaf Konfigurasyon alani, Sunucunuzda bulunan IP adreslerini eklemeyi unutmayin
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 10.0.0.1 SUNUCU-IP-ADRESI
RPAFheader X-Forwarded-For

 

Sunucunuzda kac tane ip adresi belirlenmis ise bunlari SUNUCU-IP-ADRESI kismina ve her birini bir bosluk birakarak ard arda ekleyin., Kaydedip cikin.

G: PCRE kütüphanesini Yüklemek (Guncel versiyon: pcre 8.20)

Son sürümü buradan indirebilirsiniz:

cd /usr/local/src
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.20.tar.gz
tar xvfz pcre-8.20.tar.gz
cd pcre-8.20
./configure

Sanirim suanda herseyi sorunsuz halletmissinizdir, yani umuyorum :) Asagidaki son adimida uygulayarak ayarlari duzenledigimiz modullerle birlestirelim, etkinlestirelim:

Apache restart atalim:

service httpd restart

Nginx restart atalim:

service nginx restart

Bu adimlardan sonra eklediginiz domaini adres satirindan acarak gozlemleyin, aciliyorsa guzel. acilmiyorsa atladiginiz bir yer var yada yaparken hata almis, hata yapmis olabilirsiniz. Eger nginx in calisip calismadigini kontrol etmek istiyorsaniz bu siteye girerek sorgulatin.

Server kismindan nginx ve versiyon numarasini goruyorsaniz sorunsuz sekilde nginx calisiyor demektir. Tabi en ustdeki kisminda boyle olmasi gerekli: HTTP/1.1 200 OK =>

Ornek calisma ve testler sirasinda kullandigim domaini sorgulattigimda cikan sonuc:

3: Panelsiz sunucuda Mysql kullanimi= Mysql database olusturma, kullanici olusturma, database silme
Sitelerimize erisiliyor, php, html dosyalarimizda calisiyor, nginxde sorunsuz olarak isliyor. O zaman gelin bir wordpress sitesi kuralim :) Ama once mysql database ve kullanici olusturmamiz lazim, bunu bir cozelim once :)

SSH panelimize girelim (putty), ardindan asagidakini yazip enter yapin: (mysql’ye baglanalim)

mysql -u root -p

Ardindan mysql sifrenizi isteyecek sizden, dokumanin baslarina dogru mysql sifrenizi yenilemeyi gormustunuz, burda yaptiginiz sifreyi yazip enter yaparak mysql programina baglanin.

Sonrasinda asagidaki kodu kullanarak database olusturalim:

CREATE DATABASE db-isminiz-buraya;

db-isminiz-buraya: bu kismi olusturacaginiz database ismi ile degistirin ve enter yapin, sonrasinda asagidaki gibi bir mesaj cikacak, bu islemi dogru yaptiginiz anlamina gelir, aksi halde hata yapmissiniz demektir:

Query OK, 1 row affected (0.00 sec)

Simdide Database adina kullanici ve sifre belirleyelim:

GRANT USAGE ON db-isminiz-buraya.* to [email protected] IDENTIFIED BY 'db-sifreniz-buraya';

db-isminiz-buraya: az once olusturdugumuz db ismi aynen yazin.
db-kullanici-adiniz-buraya: database icin kullanici adini yazin.
db-sifreniz-buraya: Olusturdugunuz kullanici icin sifre belirleyin.

Ve Database ile kullanici ismini birbirine baglayalim:

GRANT ALL ON db-isminiz-buraya.* to [email protected] ;

db-isminiz-buraya: az once olusturdugumuz db ismi aynen yazin.
db-kullanici-adiniz-buraya: database icin kullanici adini yazin.

Olusturdugunuz bir datebaseyi silme:

DROP database db-isminiz-buraya;

db-isminiz-buraya: Silmek istediginiz db ismi aynen yazin.

Bu islemlerin her kademesinde Query OK seklinde cikti verecek, bu sorunsuz islemleri hallettiniz anlamina gelecektir. Suanda database ve kullanici hesaplarini olusturmus olduk. Artik wordpress kurarken db bilgilerini istediginde yukarida yaptigimiz kullanici adi, database adi ve sifreyi kullanabilirsiniz..

Arkadaslar dokumani hazirlamak bekledigimden uzun surdu. Bir ara sizofreniye baglamaya baslamistim. Sanirim 2-3 gundur uzerinde calisiyorum. Bu test icin 2 vds ile calistim, bu vdslerin sponsorlugunu saglayan kisi ve kurumlar ile ilgili yakin zamanda bir yazi yazacagim, burdan hepsine gonulden tesekkur ediyorum.

Galiba biraz yoruldum, dinlenme moduna gececegim. Dokumanda gozunuze carpan bir yanlislik, hata varsa yorum olarak yazmanizi rica ediyorum. Ayrica kurulum yapmaya calisan arkadaslar, olaki bir sorunla karsilasirsaniz lutfen yorum birakin, dokumani en iyi haliyle guncellemeye calisacagim.

Dokumanda Turkce karakter kullanamiyorum, klavyemden oturu, epey uzun ve yorucu oldugu icinde Turkce karakterleri duzeltmeye zamanim yok. Bu konuda anlayis gostereceginizi umuyor, arkamdan kufretmeyeceginizi dusunuyorum :)

Kategoriler
PhpKF Forum Web Site Tanıtımları Webmaster yardım

Türk yapımı php+mysql forum sistemi (PhpKF)

Bu yazimda sizlere tamemen turk yapimi bir forum sistemi olan PhpKF hakkinda bir kac sey yazacagim. Bunlarin basinda devamli olarak acik kaynak ve Turk projelerinin desteklenmesi gerektigini belirtmek istiyorum. Pardus gibi bu sistemde acik kaynak ve grur listemizden. Simdi uzun suredir bildigim ama ancak detayli incelemeye zaman ayirabildigim phpKF ‘nin gercekten cok basarili bir calismanin urunu oldugunu soylemek istiyorum. Bir cok ucretli forum sisteminin dengi niteliginde.

PhpKF hakkinda daha fazla bilgiye buradan ulasabilirsiniz. Sistemi denedigimde gercekten hizi ilk gozume takilan konu oldu. Nasil bir kodlama, nasil bir cache sistemi var bilmiyorum ama paralis atilan bir cok forum sisteminden cok daha verim alabileceginiz bir alt yapiya sahip.

Anladigim kadariyla 3-4 yildir gelistirme asaminda ve devamli gelistirilmeye devam ediyor. Bu sistemin ilk zamanlarini hatirliyorumda suan geldigi nokta gercekten etkileyici. Bence gelistirici arkadaslarinda katki saglayabilecegi ve adini tum dunyaya duyurabilecegi bir sistem olabilir. Bunun icin sizde yeni bastan bir forum sistemi yazmak yerine phpKF catisi altinda gelistirici niteliginde calisabilirsiniz. Script yazarinin buna hayir diyecegini dusunmuyorum acikcasi.

Forum sisteminden bahsetmek gerekirse baslica ozellikleri tema desteginin olmasi, eklenti desteginin olmasi, portal sisteminin olmasi, profesyonel forum sistemlerindeki bir cok ozelligi icerisinde barindirmasi, yonetim paneli, uyelik, paneli forum yonetimi bir cok konuda ihtiyaclari karsilayabilecek duzeyde. Birgun MJ de de kullanmak istedigim bir sistem :)

Bu sorum sistemi beni cok memnun etti gercekten. Grurlanmayi kenara birakip sistemin cok iyi islemesi ve hizi: Vay canina! dedirtir cinsden. Bu yapinin bir parcasi olmak bence guzel olurdu. Suanki durumum da benim icin zor gibi gorunebilir ama php bilen veya gelistirmek isteyen arkadaslarimizin bu sistem uzerinde de eklenti, tema gibi uygulamalar hazirlamasi cok iyi olurdu.

Son olarak phpKF yi bize kazandiran arkadaslara cok tesekkur ederim, destek sitesinde yazan isimleri bu konu altinda da yayinlayalim:
Sistemi Sıfırdan Kodlama ve Tasarım – Adem YILMAZ
Portal özelliği, tasarımı ve bazı grafikler – Yücel KAHRAMAN
SEO Özelliği – Gündüz Can YILMAZ

Bu listenin dahada artmasi dilegiyle, hepinize tesekkurler..