
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
- Nginx proxy web sunucusunu kuracagiz
- Sitemizi ekleyecegiz ve online duruma getirecegiz (calisir duruma)
- Calisir durumda bir web sunucumuz ve bir websitemiz olacak (html)
- Php calistirmak icin php-fpm kuracagiz.
- php dosyalarini calisir duruma getirmek icin nginx site konfigurasyonu yapacagiz
- Sitemizdeki php dosyalar calisir duruma gelecek, dunya bize hayran kalacak
- Nginx icin url rewrite olayini inceleyecegiz ve calisir ornek yapacagiz. (http://site.com/index/kuaza)
- Mysql server kurup calisir duruma getirecegiz.
- 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
## v1.2 - Wget ve nano kurulumu eklendi.
1. Yontem – Bash scripti ile kurulum ve site ekleme
Bu yontem icin iki dosya hazirladim. Kullanimi cok basit, bunlar:
- Gerekli programlarin kurulumunu yapacak dosya (nginx, php-fpm, mysql, pdo)
- 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)
cd /root wget https://makaleci.com/dosyalar/nginx/kuaza_programlari_kur.sh https://makaleci.com/dosyalar/nginx/kuaza_site_ekle.sh https://makaleci.com/dosyalar/nginx/kuaza_veritabani_ekle.sh
Sonrasinda ihtiyacimiz olan programlari kuralim, ssh terminaline asagidaki kodu yazarak enter yapin:
sh kuaza_programlari_kur.sh
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:
sh kuaza_site_ekle.sh yeni-site.com
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:
sh kuaza_site_ekle.sh yeni-site.com site_dosyalari
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
sh kuaza_site_ekle.sh yeni-site.com public_html /home /etc/nginx/conf.d
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.
sh kuaza_veritabani_ekle.sh VERI_TABANI_ISMI KULLANICI_ADI SIFRE
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.
sh kuaza_veritabani_ekle.sh VERI_TABANI_ISMI KULLANICI_ADI SIFRE MYSQL_SUNUCU_IP MYSQL_SUNUCU_ISMI ERISIM_IZINLI_SUNUCU_IPSI EXTRA_SUNUCU_IPSI
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:
yum -y install nginx php-fpm mysql mysql-server php-mysql php-pdo
Bu islemden sonra gerekli olan programlari kurduk: Nginx php-fpm, mysql pdo ve mysql baglantisi icin php-mysql
Sonrasinda asagidaki islemleri yaparak uygulamarimizi baslatalim:
service nginx restart service php-fpm restart service mysqld restart
Yeni kullanici, site ekleyelim:
useradd yeni-site.com chmod 0711 /home/yeni-site.com mkdir -p /home/yeni-site.com/public_html chown -R yeni-site.com:yeni-site.com /home/yeni-site.com/public_html
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)
nano /etc/nginx/conf.d/yeni-site.com.conf
Sonrasinda icerisine asagidaki kodlari kendinize duzenledikten sonra yapistirin:
# # $site_ismi icin nginx konfigurasyon dosyasi # makaleci.com # server { listen 80; server_name yeni-site.com; #charset koi8-r; #access_log logs/host.access.log main; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { root /home/yeni-site.com/public_html; index index.php index.html index.htm; try_files $uri @kuaza_rewrite; } #Statik dosyalari direk nginx ile isleyelim.. #baska dosyalarda ekleme ihtiyaci duyarsaniz asagidaki listeye dahil edebilirsiniz. location ~*.*\.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt|js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso)$ { # 1 Aylik cache suresi veririz. expires 1M; root /home/yeni-site.com/public_html; } # url rewrite ozelligi kismi # makaleci.com location @kuaza_rewrite { #rewrite ^/$ /index.php last; rewrite ^/index/([a-z0-9_-]*)/?$ /index.php?kuaza=\$1 last; } error_page 404 /404.html; location = /404.html { root /home/yeni-site.com/public_html; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /home/yeni-site.com/public_html; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { root /home/yeni-site.com/public_html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/yeni-site.com/public_html$fastcgi_script_name; include fastcgi_params; } }
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 :)
service nginx restart
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:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Ayarlari kaydedip, yeniden baslatalim:
service iptables save service iptables restart
Kurdugumuz programlarin, sunucu acilirsa yada yeniden baslatilirsa otomatik olarak acilmasi icin asagidakileri yayaplim, onemlidir, ne olur ne olmaz:
chkconfig mysqld on chkconfig nginx on chkconfig php-fpm on
php-rpm programimizda da bir kac duzenleme yapmamiz gerekli. Asagidaki dosyayi acalim:
nano /etc/php-fpm.d/www.conf
Icerisinde bulun, her sayiri ayri ayri duzenleyecegiz:
user = apache group = apache
apache yazan yerleri nginx olarak degistirin ve kaydedin. Sonrasinda php ye restart atalim:
service php-fpm restart
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:
chmod 777 /var/lib/php/session
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.
service php-fpm restart
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..
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.
Dns ile iligi bilgiyi bekliyorum :) kolay gelsin
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.
Tamamdır beklemedeyim:)
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.
Merhaba. Bir kaç döküman var mesala https://www.digitalocean.com/community/tutorials/how-to-install-laravel-with-an-nginx-web-server-on-ubuntu-14-04 bu .
burada analamadığım kısım her site için ayrı ayrı tanımalamayı nasıl yapacağımız
Size tam olarak ne lazim o konuda yardimci olayim ? Konuda yeni site ekleme olayi mevcut, onu yaprsaniz siteniz eklenmis ve ayarlari yapilmis olarak acilacak sekilde hazirlanacaktir.
Ancak var olan site icin ayni islemi yaparsaniz hayirlamiyorum ama sorun cikarmayacak ve kaydedecektir, yinede var olan sitenin klasor ismi v.s farkli olabileceginden nginx site dosyasini acip duzenlemeniz gerekebilir.
Merhaba. Yeni site oluşturduumuz zaman sitenin ftp şifresi ne oluyor
Konuda ftp kurulumuna yer vermedim. Umarim en kisa zamanda o konuda da bir makalem olacaktir.
Merhaba. Laravel kurulumu yapacam kurulum “php” konutu çalıştırmak gerekiyor fakat çalışmıyor
“-bash: php: command not found”
Hatası veriyor.
php nin kuruldugundan eminmisiniz ? isletim sisteminiz, kac bit, yazarmisiniz. Ve yukardaki dokumana goremi yaptiginiz kurulumlari ?
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?
Musait bir zaman yaratip, bu konuda da icerik hazirlamaya calisacagim hocam, takip etmeye devam edin siz.
Takipteyim :)
Centos 7 üzerinde php-fpm, dns, mysql, ngnix olaylrını hallettim gibi. Araştırarakta güvenlik önlemleri almaya çalışıyorum ama mail olayıda önemli benim için. Kişisel mailim bile [email protected] şeklinde. Diğer sitelerimin iletşim mail adresleri aynı şekilde ve mecbur mail olayınıda çözmeme lazım.
Ellerine Sağlık..Güzel bir anlatım olmuş..
location @kuaza_rewrite
Yazan kısmı biz kendimize nasıl uyarlayacağız acaba?
Yani @kuaza_ yerine ne yazacağız
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..
php 5.6 sürüme nasıl tanıtacagız ben bunu mereka ediyorum her deneme yaptım olmadı
yum ile kuramazsiniz istediginiz verdiyonu, sanirim direkt php derlenmesi lazim. Bu konuda bir yazim yok ancak zaman bulursam hazirlayabilirim.