Centos Nginx + Php-fpm + mysql kurulumu (Sadece 10 saniye) - Panelsiz web sunucusu

Centos sunucularda Panel kullanmadan webserver kuralim. Bu webserver nginx + php + mysql ile bizlere dinamik siteler olusturma imkani versin. Dunyanin heryerindende bu websitesine ulasilsin. O zaman makalemi dikkatlice takip edin, cunku daha once hic bu kadar basit anlatmamistim.

Anlatimim yeni kurulmus Centos 6 x64 (minimal) isletim sistemleri uzerinden olacaktir. Kullandigim sunucunun ozellikleri (vps): 1 CPU (intel), 15gb SSD hdd, 750 mb ram..

UYARI: Centos 6 versiyonunda denendi. Centos 5 versiyonunda php-fpm kurulmadigindan uygun degildir..

Anlatim konulari

  1. Nginx proxy web sunucusunu kuracagiz
  2. Sitemizi ekleyecegiz ve online duruma getirecegiz (calisir duruma)
  3. Calisir durumda bir web sunucumuz ve bir websitemiz olacak (html)
  4. Php calistirmak icin php-fpm kuracagiz.
  5. php dosyalarini calisir duruma getirmek icin nginx site konfigurasyonu yapacagiz
  6. Sitemizdeki php dosyalar calisir duruma gelecek, dunya bize hayran kalacak
  7. Nginx icin url rewrite olayini inceleyecegiz ve calisir ornek yapacagiz. (http://site.com/index/kuaza)
  8. Mysql server kurup calisir duruma getirecegiz.
  9. PDO ve mysql-pdo butunlesmesi icin gerekli bilesenleri kuracagiz.

Bu makalemde sizlere bir surpriz yaparak iki anlatima yer verecegim. Ilk anlatimda 3 adimda butun bilesenleri kurup, websitenizi ekleyeceksiniz. Diger anlatimda da detaylara yer vererek biraz daha uzun aciklamalar yapacagim. iki anlatimda ayni yola cikiyor arkadaslar, ilk anlatim 15 saniye surmekte ve acemiler icin onermekteyim. Sirf ilk anlatim icin 2 gundur bash script hazirliyorum, umarim herkesin isini gorecektir.

Yapilan degisiklikler ve guncellemeler

 

1. Yontem – Bash scripti ile kurulum ve site ekleme

Bu yontem icin iki dosya hazirladim. Kullanimi cok basit, bunlar:

  1. Gerekli programlarin kurulumunu yapacak dosya (nginx, php-fpm, mysql, pdo)
  2. Yeni site ekleyeceginiz zaman kullanacagimiz dosya.

1. dosyayi sadece kurulum icin kullanacagiz, 2. dosyayida site eklemek icin kullanacagiz. Ilk olarak ssh panelimizi acalim ve bu dosyalari islem yapacagimiz dizine cekelim.

* Programlari kuralim (nginx, php-fpm, mysql)

Sonrasinda ihtiyacimiz olan programlari kuralim, ssh terminaline asagidaki kodu yazarak enter yapin:

Bu islemden sonra ihtiyacimiz olan: Nginx, Php-fpm, Mysql, Pdo (php-mysql, php-pdo) programlari kurulmus olacak. Cok basit oldu dimi 🙂 birde site ekleme olayina bakin 🙂

* Yeni site ekleme

Asagidaki sekilde yeni site ekleyebilirsiniz. Parametreleri alt kisimda verecegim:

Bundan sonra size bir kac soru soracak, sorulara gereken evet|hayir cevabini verdikten sonra site ekleme isini bitirin. Yeni site ekleyeceginiz zaman bu islemi tekrar etmeniz yeterli olacaktir. Uygulamada bir kac parametre mevcut, bunlari default ayarlar yerine degistirebilirsiniz.

Site dosyalari icin default olarak public_html klasoru olusturarak acar. bunu degistirmek isteyebilirsiniz.

Default site dosyalari dizini bu sekilde olusturulur: /home/yeni-site.com/public_html

public_html klasorunun ismini degistirmek isterseniz, site eklerken asagidaki sekilde yapmaniz gerekli:

goreceginiz gibi site_dosyalari kismi bizim sitemiz icin gerekeli olan (index.php v.s) dosyalarinin bulundugu klasor oldu. Site dosyalarinizi bu klasore yukleyeceksiniz: /home/yeni-site.com/site_dosyalari

Uygulamada ornek site dosyalari yuklemek istermisiniz diye sordugunda evet derseniz site dizin icerisinde: index.php, index.html, 404.html, phpinfo.php dosyalari olusturacak ve calisir duruma getirecek.

Sonraki 3. parametre /home dizinini degistirmeye yariyor. 4. parametre ise nginx site konfigurasyon dosyalarinin oldugu klasoru degistirmeye yariyor. Bu kisimlari default ayarlarinda birakmanizi tavsiye ederim, tecrubeli kisilerin konuya hakim arkadaslari icin ekledim.

Ornek parametreler: default ayarlar

Sitenizi tarayicida acin, ve artik yayinda 🙂

Yukaridaki islemin basitligini anlatmak icin kucuk bir video ile kurulum ve site ekleme islemini anlatacagim. Konu hakkiinda acemi arkadaslar icin ornek niteliginde olacaktir.

Kolayca Mysql veritabani olusturma ve kullanici ekleme *20/03/2015*

Panelsiz websunucusu kullanan arkadaslarin ki benimde devamli kullanacagim bir uygulama daha ekleyrek dokumani ve uygulamayi bir adim gelistirmek istedim. ssh panelinden kolayca veritabani eklemek cok kolay. Sadece asagidaki kod ile mysql veritabaninda veritabani olusturabilir, kullanici ve sifre ekleyebilirsiniz.

Yukaridaki kodu her defasinda ekleyeceginiz veritabani ve kullanici adi/sifre duzenleyerek uygularsaniz veritabani aninda olusturulacak, kullanima hazir hale gelecektir.

Bu ozelligi basligin yanindaki tarihte ekledim makaleye, ilk kisimdaki °programlari kuralim° basliginda yer alan kodu tekrar calistirarak veritabani olusturma dosyamizida indirmeniz gereklidir.

Guncelleme: 21/07/2015

Arkadaslar mysql sunucusu farkli sunucularda olanlar icin db yi birden fazla ip yada sunucu ismi ile baglayabilmeniz icin eklemeler yaptim. Localhost haricinde +4 sunucu ip si yada ismi ekleyebilirsiniz.

Yukardaki kod blogunda son kisimdaki ayarlarin hepsini doldurmak zorunda degilsiniz, ihtiyaciniz kadar olan kisimlari kullanmaniz yeterli olacaktir.

Veritabani ekleme kismini manuel yapmak isterseniz, burdaki: SSH ile Mysql database oluşturma, kullanıcı oluşturma, database silme konusunu takip edebilirsiniz.

2. Yontem – Detayli anlatim

Oncelikle sistemimize EPEL deposunu ekleyelim, cunku normal depolarda nginx bulunmuyor sanirim. Epel deposunu yum listemize eklemek icin buradaki konuyu takip edin.

Sonrasinda asagidaki kodu ssh terminal ekranindan yazarak enter yapin:

Bu islemden sonra gerekli olan programlari kurduk: Nginx php-fpm, mysql pdo ve mysql baglantisi icin php-mysql

Sonrasinda asagidaki islemleri yaparak uygulamarimizi baslatalim:

Yeni kullanici, site ekleyelim:

Kullanicimiz yani domainimiz eklenmis oldu. Yukaridaki islemleri sirasi ile uyguladiginizda site dosyalari icin kullanilacak klasorumuzude olusturmus olacagiz. Ayrica kullanici ve grup izinlerini, chmod ayarlarini yapacagiz. Boylece dosya izinleri ile ilgili sorun yasamamis olacagiz.

Nginx site konfigurasyon dosyasi olusturalim.

Nginx programina siteyi tanitmamiz gerekli, aksi durumda sitemize erisim olmayacak, nginx uyari sayfasi cikacaktir.

Oncelikle ssh terminalinden nano yardimi ile bir dosya acalim, site-ismi.com kismini sitenize gore duzenlemeyi unutmayin (yukardaki ile ayni olacak)

Sonrasinda icerisine asagidaki kodlari kendinize duzenledikten sonra yapistirin:

Bu islemden sonra ctrl + x – y – enter yaptiginizda ayarlari kaydedip dosyadan cikacaktir (duzenlemeden)..

Sonrasinda nginx e restart atarak siteyi ekledigimizi ve yeni ayarlari kabul etmesini rica edecegiz 🙂

Bu islemlerin sonunda sitenizin aciliyor olmasi gerekli, ancak sitenizin ana dizinine bir kac dosya yukleyip oyle deneyin, cunku site dosyalari klasoru suanda bos 🙂

Guvenlik duvari icin 80. portu acalim

Bazi durumlarda 80. port acik olmayabilir ve iptables guvenlik yazilimida buraya gelen istekleri engelleyebilir. Bu sebeple asagidaki kodu ssh terminalinde yazarak enter yapin:

Ayarlari kaydedip, yeniden baslatalim:

Kurdugumuz programlarin, sunucu acilirsa yada yeniden baslatilirsa otomatik olarak acilmasi icin asagidakileri yayaplim, onemlidir, ne olur ne olmaz:

php-rpm programimizda da bir kac duzenleme yapmamiz gerekli. Asagidaki dosyayi acalim:

Icerisinde bulun, her sayiri ayri ayri duzenleyecegiz:

apache yazan yerleri nginx olarak degistirin ve kaydedin. Sonrasinda php ye restart atalim:

Php Sessiyon sorununa çözüm: 16/01/2016 (güncelleme)

Phpile session işlemi yaptığınızda kaydetme sorunu yaşayabilirsiniz, böyle bir durumda session klasörünün chmod ayarını 777 yapmamız yeterli olacaktır. Bunun için ftp programından yada ssh programından /var/lib/php/session klasörünün chmod ayarını 777 yapın.

ssh den yapmak için:

Resim işleme programlarının kurulumu

Sitenizde resimlerle ilgili işlem yapıyorsanız mutlaka olması gereken programlardan birisi GD (GD kurulumu (centos) yum install) bir diğeride IM (ImageMagick kurulumu (centos) – yum install) dir. Bu kurulumları yaptıktan sonra aşağıdaki şekilde php ye restart atmayı unutmayın.


Bu Anlatiminda sonuna geldim arkadaslar, ilk yontemde kullandigim bash shell scriptini gelistirebilirim, ilerki zamanlarda oneri ve goruslerinize gore eklemelerde yapabilirim..

Anlamadiginiz yerde sorarsaniz geri donus olacaktir. Kolay gelsin..

24 Yorumlar

  1. Eline sağlık güzel anlatım olmuş. Peki bunların yaptıktan sonra ne gibi güvenlik önlemleri almamız lazım. Symlikn okumaması, userların kendi yetkisi dışında dosya okumaması vs. gibi

    • Bu konu ile ilgili herhangi bir calisma yapmadim. Coklu kullanicili bir sistem icin makaleyi kisa bir zaman sonra guncelleyebilirim. Ancak her kullanici ve dosyalarina kendi grup ve kullanidi adi yetkisi atandigi icin, farkli bolumlerde islem yapabilme durumu olmamasi lazim. Bu konuda kisa bir guvenlik testi yapip size geri donus yapacagim. Ornegin domain.com sitesinden shell amacli komut calistirilirsa ust klasorlere ulasilabiliyormu (root, home)..

      • Genelde paylaşımlı hostinglerde en büyük sorun dizin atlamaları ve başka user gruplarının dosyasını okunması. Çok nadir olsada cat /home/user/public_html/index.php şeklinde dosyalar okunabiliyor veya ln -s /home/user/public_html/index.php şeklinde farklı kullanıcının dosyasının symlink’i oluşturulup gerekli önlemler alınmamışsa kaynak kodlar okunabiliyor.

        Bir soru daha eklemek istiyorum DNS ile ilgili kısım göremedim galiba makalede. DNS’leri nasıl ayarlıyaca?

        • Dosya ve kullanici yetkilendirmesi basli basina bir olay sanirim. Yaptigim kucuk arastirma ve calisma, denemelerde bir sonuc alamadim. Bu konuya ozel genis bir zaman araliginda detayli bir inceleme yapmam gerekecek ancak onemli oldugunu dusunuyorum. Yakin zamanda konuyla ilgilenecegim. Uyari ve oneri icin tesekkurler.

    • Bunun icin sizi biraz bekletecegim. DNS olayini cloudflare uzerinden yaptigim icin dokumanda atladim sanirim. Simdi test domainini test sunucusunun ip sine yonlendirip, ornek bir dns calismasi ile makaleyi guncelleyecegim.

  2. Merhaba. İnternnete okuduğum bir kaç yazıda htaccess sorunularında bahsetmişler ama yazı tarihleri eskiydi. Şuanda .htaccess kullanımı nginxde mevcut mu veya sorun yaratıyor mu?

    • Hocam ben sizi unuttum kusura bakmayin. Bir is aldim, bu ayin sonuna bitiriyorum, ondan once bos zamanim olmuyor fazla. Ama konuya intikal edecegim zaman buldukca.

      Burdaki anlatimda sitenizin ana dizinindeki .htaccess dosyasini kullanamazsiniz. Url rewrite ayarlarini nginx site konfigurasyon dosyasi uzerinden gerceklestirmeniz gerekli. Bu konuda da bir anlatimla sizleri bilgilendirmeye calisacagim yakin zamanda.

      Site ana dizinindeki .htaccess dosyasindaki ayarlari kullanabilmeniz icin nginx ‘ apache ile kurmaniz gerekli. Bu sekilde bir anlatimim vardi ama eski sitemde (makaleci.com) bulunuyor. Yakin zamanda burada da daha guncel bir anlatima yer verecegim.

  3. Merhaba. Laravel kurulumu yapacam kurulum “php” konutu çalıştırmak gerekiyor fakat çalışmıyor

    “-bash: php: command not found”

    Hatası veriyor.

  4. Merhaba. Panelsiz sunucularda mail server olayını nasıl çözebiliriz acaba?

    Mail server kurma, domainlere yeni mail hesapları açma,roundCube ile mail okuma gönderme gibi?

    • O kısım aynen kalıyor siz içini kendinize göre düzenlemeni gerekli. WordPress kullanıyorsanız hazır tek satırlık kodu vardı eklemeniz yetiyor ama farklı bir script kullanıyorsanız ona göre düzenlemeniz gerekiyor. Siz yapacağınız şeyi yazın burdan ben uyarlayıp yazarım tekrar..

    • yum ile kuramazsiniz istediginiz verdiyonu, sanirim direkt php derlenmesi lazim. Bu konuda bir yazim yok ancak zaman bulursam hazirlayabilirim.

Bir Cevap Yazın