İnternetteki dökümanlar genelde konu güncel iken yazıldığı için, siz bir yazılım dilinin daha önceki versiyonlarına ait kurulumlar yapmak istediğinizde, varsayılan paket yöneticisi tarafından hep en son sürümü kurulmakta, ve bu da bizim o anki ihtiyaçlarımızı karşılamamaktadır.
Ben de birkaç tane projedeki php 5.3 gereksinimim sebebiyle böyle bir şey yapmak durumunda kaldım. (aslında vagrant daha güzel bir çözüm tabi ki dileyen araştırabilir.)
Öncelikle Mac’inizde homebrew (http://brew.sh/) yüklü değilse, bunu yüklememiz gerekiyor. Bunun için konsolunuzda
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
komutunu çalıştırmanız gerekiyor.
Nginx kurulumu
brew install nginx
Bu kadar basit 
Nginxi başlatmak için
nginx
komutunu yazmanız yeterli. (Evet konsola sadece nginx yazacağız, ubuntu gibi değil) Ancak sudo olarak çalıştırmanız gerekebilir.
Php kurulumu
php yi Nginx ile iletişim kurabilmesi için 2 şekilde kurabiliriz. 1. yöntem cgi ile. 2. yöntem ise, php-fpm ile. php-fpm ile kurmak daha mantıklı, çünkü fcgi process manager ile yönetilmeyen bir cgi kullanımı aynı anda çok fazla processi handle etmenizi yani stress test vb toolları çalıştırdığınız kısımlarda size problem çıkartabilir. Ben de bu ve birkaç sebepten dolayı php-fpm ile kurmayı anlatacağım. Ancak cgi ile kurmak isteyen için de sadece 1 parametre değişiyor 
brew install php53 --with-mysql --with-suhosin --with-intl --with-imap --with-fpm
sondaki —with-fpm kısmı yerine –with-cgi yazarsanız da cgi ile kurmuş olursunuz.
Mac OS X içerisinde PHP, Ruby, Python gibi dillerin CLI (konsol üzerinden çalıştırılabilir) versiyonları ile birlikte geldiği için şu anda halen konsolda php -v yazdığınızda php 5.4.24 veya benzeri başka bir versiyonu görürsünüz. Ancak web arayüzünden (Yani browserdan nginx ile) girdiğinizde ilgili php 5.3 sürümünü çalıştırmış olacağız.
Eğer siz konsoldan da php 5.3 çalıştırmak istiyorsanız,
export PATH=/usr/local/Cellar/php53/5.3.28/bin:$PATH
şeklinde komut çalıştırmanız gerekiyor. (sudo ile çalıştırmanız icap edebilir).
Ancak bu şekilde yaparsanız da bilgisayarınızı yeniden açtığınızda (ya da konsoldaki oturumu kapattığınızda) bu ayar kaybolacaktır. Bunu kaybetmemek için bu komutu /usr/local/Cellar/php53/5.3.28/bin i sudo ile /etc/paths e yazmalısın.
Mac OS X üzerinde php-fpm ubuntudaki gibi /etc/init.d/php-fpm start stop, vb.. şeklinde kullanılamıyor. Bu yüzden kullanımı biraz farklı.
Php-fpm yi hemen başlatmak için
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php53.plist
Bilgisayarınız her açıldığında otomatik başlasın istiyorsanız da
ln -sfv /usr/local/opt/php53/*.plist ~/Library/LaunchAgents
şeklinde işlem yapmanız gerekiyor.
Şimdi sıra php-fpm.conf dosyasını bulup, buradaki ayarlardaki loglara veya dosyalara izin vermek kısmında.
php-fpm.confu bulup ilgili pid ve log dosyasını ve access log dosyasını yazabilmesi için yetki vb verip o gerekli klasörleri oluşturursan gerisi tamamdır. (Yine ubuntunun aksine, /var/run/php-fpm.pid yerine phpnin kendi klasörüne yapmanız daha mantıklı olacak ben bu şekilde yaptım. Log için de aynı yeri belirttim.)
percona-server kurulumu
Nginx kadar basit aslında.
brew install percona-server
Percona server’i hemen başlatmak için
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.percona-server.plist
Bilgisayar her başladığında başlatmak için ise,
ln -sfv /usr/local/opt/percona-server/*.plist ~/Library/LaunchAgents
komutlarını çalıştırmanız gerekiyor.
Bu yazı nginx ayarları, php ayarları ve mysql ayarlarının nasıl yapıldığı ile ilgili olmadığı için o detayları burada paylaşmıyorum. Ancak ihtiyacı olan tabi ki danışabilir.
Umarım yararlı olur.
]]>Çözümü için logrotate işleminin akabinde çalışacak bir hook eklemeniz gerekiyor. Bu hook nginx’i reload etmesi yeterli oluyor. (restart’a gerek yok)
İşyerinden bir arkadaşım durumu tespit etmişti, bana da yazmak düştü.
]]>Boot ayarlarından USB’ye öncelik verdik ve içerisinde Ubuntu bulunan usb ile bilgisayarı başlattık. Install etmeden çalıştırdık. Ardından terminali açtık. Aşağıdaki komutları çalıştırdıktan sonra bilgisayarı restart ettik.
sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update sudo apt-get install -y boot-repair && boot-repair
Bu şekilde sorunu halletmiş olduk.
]]>Sanal sunucu yani virtual host ayarlarının nasıl yapılacağına bakalım şimdi.
Örnek olarak, web sitelerimi barındırdığım dizin /home/khantunckale/sites
Bunun içerisinde test diye bir klasörümüz olsun, içerisinde de index.html olsun.
cd /home/khantunckale/sites mkdir test gedit test/index.html /*düzenleyip içine bişeyler yazalım*/
Amacımız, buradaki index.html dosyasını browserımız üzerinden http://www.test/ olarak çağırmak.
Şimdi nginx ayarlarını yapalım.
Önce ayarları yapmak için nginx’in sites-available klasörüne gidiyoruz.
cd /etc/nginx/sites-available
Default config dosyasının bir kopyasını oluşturuyoruz.
cp default test
Ardından bu dosyayı bir editör ile açıp düzenleyelim. (gedit, nano vs.) Ben kendi ayarlarımı şu şekilde yaptım.
server {
server_name www.test;
access_log /home/khantunckale/sites/test/access.log;
error_log /home/khantunckale/sites/test/error.log;
root /home/khantunckale/sites/test/public_html;
location / {
index index.html index.htm index.php;
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /host/web/emfw/public_html$fastcgi_script_name;
}
}
server_name : sitemizi çağırdığımız adres.
root : sitenin index dosyasının olduğu dizin.
access_log ve error_log parametreleri de yukarıda göründüğü üzere loglarla ilgilidir.
Bu dosyayı kaydettiğiniz zaman, sitemiz sadece uygun durumda olur (available). Sitemizi aktifleştirmek için, sites-enabled klasörüne bir sembolink link yaratmamız gerekiyor. O yüzden şu komutu çalıştırmalıyız.
ln -s /etc/nginx/sites-available/test /etc/nginx/sites-enabled/test
Ardından da service nginx restart diyelim.
]]>Bir shell script olduğu için, bu scripti kullanıcılara ait programların olduğu dizine (usr/local/bin) koyarak, kurulumunu yapmış oluruz. Kullanabilmek için ek olarak gawk paketini de kurmamız gerekmekte.
Aşağıdaki komutları uyguladığımızda kurulum tamamlanır;
apt-get install gawk cd /usr/local/bin && wget -Nc smxi.org/inxi && chmod +x inxi
Kullanımı ise şu şekilde; eğer tüm sistem bileşenleri ile ilgili bilgiyi aklmak istiyorsak inxi -F , sadece CPU bilgisini almak istiyorsak inxi -f , network adaptörü ile ilgili bilgiyi almak istiyorsak inxi -n , kullandığımız makinenin bilgilerini almak istiyorsak inxi -M komutları ile görebiliyoruz.
Parametre listesinin tamamı burada mevcut; https://code.google.com/p/inxi/wiki/inxi
]]>Ubuntu platformunda rewrite kurulumunu(etkinleştirilmesi) anlatacağım. İşinize yarayacaktır diye düşünüyorum. (apache kurulu varsayılmıştır)
Ne işe yarar bu modül?
Apache web sunucusunda URL yi yeniden yazma ve düzenleme iznini verir.
Tam olarak ne işe yaradığını öğrenmek için arşivimizdeki bu yazıyı okumanızı tavsiye ediyorum.
sudo a2enmod rewrite
Yukarıdaki komutu çalıştırarak modülü etkinleştiriyoruz. Daha sonra ilgili projenizin vhost dosyasında birkaç düzenleme yapmamız gerekecek.
sudo nano /etc/apache2/site-available/default
Açılan vhost dosyasında aşağıdaki değişiklikleri yapmanız gerekiyor. İlk açtığınızdaki durumunu ve yanına okla yapmanız gereken düzenlemeyi belirtiyorum.
AllowOverride None -> AllowOverride All
Görmüş olduğunuz tüm “AllowOverride None” ları “AllowOverride All” a çeviriyoruz ve kaydedip çıkıyoruz. Son olarak apache‘yi yeniden başlatacağız.
sudo /etc/init.d/apache2 restart
Modül artık aktifleşti. Projenizde kullanabilirsiniz, hayırlı olsun.
]]>Aşağıdaki komut ile sistemimize gerekli paketleri kuralım.
apt-get install php5-cli php5-cgi spawn-fcgi psmisc
Artık sistemimizde php fcgi ile ilgili paketler yüklendi. Ancak bunu dürtecek bir mekanizmamız henüz yok. Bu yüzden nginx ayarlarında henüz bunu çağıramıyoruz. Şimdi bunu dürtebilir hale getirelim.
Aşağıdaki içerikler ile /usr/bin/php-fcgi adında bir dosya üretelim. Bu dosyaya göre php 9000 nolu portta çalışacak, ve 127.0.0.1 (localhost) için hizmet verecektir. Bu hizmet www-data adlı kullanıcı ve www-data adlı grup ile ilgili oluşacaktır.
/usr/bin/php-fcgi dosyası
#!/bin/bash FASTCGI_USER=www-data FASTCGI_GROUP=www-data ADDRESS=127.0.0.1 PORT=9000 PIDFILE=/var/run/php-fcgi/php-fcgi.pid CHILDREN=6 PHP5=/usr/bin/php5-cgi /usr/bin/spawn-fcgi -a $ADDRESS -p $PORT -P $PIDFILE -C $CHILDREN -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5
Chmod vererek de çalıştırabilir hale getirelim. Bunun için de aşağıdaki kodu çalıştıralım :
chmod +x /usr/bin/php-fcgi
Her şey yolunda gidiyor gibi gözüküyor. Ancak bu bir hizmet ve başlatma durdurma gibi özellikleri olması gerekiyor.
yani özetle, /etc/init.d/ içerisine bir şeyler yapmamız gerekiyor.
/etc/init.d/php-fcgi adlı bir dosya üretiniz.
/etc/init.d/php-fcgi dosyası :
#!/bin/bash
PHP_SCRIPT=/usr/bin/php-fcgi
FASTCGI_USER=www-data
FASTCGI_GROUP=www-data
PID_DIR=/var/run/php-fcgi
PID_FILE=/var/run/php-fcgi/php-fcgi.pid
RET_VAL=0
case "$1" in
start)
if [[ ! -d $PID_DIR ]]
then
mkdir $PID_DIR
chown $FASTCGI_USER:$FASTCGI_GROUP $PID_DIR
chmod 0770 $PID_DIR
fi
if [[ -r $PID_FILE ]]
then
echo "php-fcgi already running with PID `cat $PID_FILE`"
RET_VAL=1
else
$PHP_SCRIPT
RET_VAL=$?
fi
;;
stop)
if [[ -r $PID_FILE ]]
then
kill `cat $PID_FILE`
rm $PID_FILE
RET_VAL=$?
else
echo "Could not find PID file $PID_FILE"
RET_VAL=1
fi
;;
restart)
if [[ -r $PID_FILE ]]
then
kill `cat $PID_FILE`
rm $PID_FILE
RET_VAL=$?
else
echo "Could not find PID file $PID_FILE"
fi
$PHP_SCRIPT
RET_VAL=$?
;;
status)
if [[ -r $PID_FILE ]]
then
echo "php-fcgi running with PID `cat $PID_FILE`"
RET_VAL=$?
else
echo "Could not find PID file $PID_FILE, php-fcgi does not appear to be running"
fi
;;
*)
echo "Usage: php-fcgi {start|stop|restart|status}"
RET_VAL=1
;;
esac
exit $RET_VAL
Neredeyse geldik. Aşağıdaki komutlarla da php-fcgi yı başlatabilirsiniz.
chmod +x /etc/init.d/php-fcgi update-rc.d php-fcgi defaults /etc/init.d/php-fcgi start
Tabi bu noktada nginx imizi de artık ayarlamamız gerekiyor.
/etc/nginx/sites-available/www.deneme.com dosyası oluşturalım.
server {
server_name www.deneme.com deneme.com;
access_log /srv/www/www.deneme.com/logs/access.log;
error_log /srv/www/www.deneme.com/logs/error.log;
root /srv/www/www.deneme.com/public_html;
location / {
index index.html index.htm;
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /srv/www/www.deneme.com/public_html$fastcgi_script_name;
}
}
Artık /srv/www/www.deneme.com/public_html/index.php dosyamızı ve içerisine phpinfo(); komutunu yazıp çalıştırabilir hale geldik. hemen bir nginx i başlatalım, veya çalışıyorsa yeniden başlatalım.
service nginx restart]]>
Nginx kurulumu, kısa anlatımdan göreceğiniz gibi gayet basit.
Aşağıdaki komut ile Ubuntu sisteminize doğrudan nginx’i kurabilirsiniz.
root@ubuntu:/home/emre# : apt-get install nginx
Bu komuttan sonra
service nginx start service nginx stop
gibi komutlar ile nginx hizmetinizi başlatıp durdurabilirsiniz.
nginx in çalışıp çalışmadığını ise,
ps aux | grep nginx
yazarak ayıklayabilirsiniz.
]]>Bu hatayı , apache nin error loglarından görebiliyordum, son kademe log olarak burada yakalayabildim. Ancak bir detay vermiyordu.
Php 5.2 sistem, mysql 5.1 kullanıyorum.
Daha sonra hatayı tespit etmek için tüm veritabanını local bilgisayarıma aktardım, ve aynı hatayı almaya çalıştığımda, windows ortamında , (php5.3, mysql 5.5) bana “Maximum function nesting level of ‘100’ reached” diye bir hata verdi. Yani diyor ki, “içiçe 100den fazla derinliğe kadar indin, sınıra ulaştın”. Anladığım kadarıyla, php5.2 de bunu handle edebilecek bir mekanizma yok. Hatanın sebebi , sınıf içinde recursive olarak kendi sınıfından üreten bir metodun es kaza yanlış çalışması durumu vardı. Şöyle :
class X{
function load(){
//...bişeyler bişeyler...
$this->load();
}
}
Nitekim, koddan bu tarz bir döngü oluşturabilecek durumun önüne geçtim, ve hata düzeldi.
]]>
Şimdi Apachenin bu dosyayı ilgili sitemiz için görmesini sağlayalım.
2 yöntem var.
.htaccess dosyasının içinden yapabiliriz. Bunu anlatan bir sürü site var. (biri budur).
ilgili klasörü tagiyle apache ye tarif edelim. İçinde de htpasswd dosyasını gösterelim.
Linux :
<directory “/var/www/sites/deneme”>
AuthName “sifre giriniz”
AuthType Basic
AuthUserFile /var/www/sites/deneme/htpasswd_olan_dosya_adi
require valid-user
</directory>
Windows :
Windowstaki tek fark, dosya yollarının başında disk sürücünüzü yazmaktır.
<directory “D:/web/deneme”>
AuthName “sifre giriniz”
AuthType Basic
AuthUserFile D:/web/deneme/htpasswd_olan_dosya_adi
require valid-user
</directory>
Daha sonra da , apache’mize restart attıktan sonra, işlem tamamlanmış olur.
]]>