nginx multiple php running
14 Şubat 2020

Centos 7 Nginx üzerinde farklı php versiyonları çalıştırma

ile kurtitasarim

Merhabalar bugün sizlere Centos 7 Nginx üzerinde farklı php versiyonları çalıştırma işlemleri hakkında sizlere bilgi aktarmaya çalışacağım.

Kurgu

Kurgudaki amacım,
-> 2 adet farklı laravel sürümü projem var, bunlardan biri php 7.2 ile çalışıyorken diğer Laravel sürümüm ise php5.6 ile çalışmaktadır. Buradaki amacım tek nginx sunucusu üzerinde birden fazla php versiyonu ile projelerimi çalıştırmak istiyorum.

Kurulum kısımlarına geçelim;
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum install yum-utils
subscription-manager repos --enable=rhel-7-server-optional-rpms

subscription-manager hatası alırsanız yapacağınız kurulum ise;

wget -O /etc/yum.repos.d/epel-rhsm.repo http://repos.fedorapeople.org/repos/candlepin/subscription-manager/epel-subscription-manager.repo
yum install subscription-manager -y
subscription-manager register --username <username> --password <password> --auto-attach

kısa bir ara verdim, sebebi centos subscription-manager paketi hata veriyordu, sebebine bakmak istedim. Sonuç siteye erişim alamıyormuşuz ssl sorunu ile beraber bu kısmı es geçiyorum ama subscription-manager paketini yüklemek isterseniz yukarıdaki adımları izleyebilirsiniz.

Nginx ve PHP Kurulumları

yum install nginx

Bu kısımda bir veritabanı MariaDB veya MySQL ihtiyacınız olursa kullanacağınız komut ise; Yeni bir repo oluşturmak ile başlayacağız.

nano /etc/yum.repos.d/mariadb.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

yukarıdaki işlemi tamamlayıp kaydettikten sonra yapacağımız işlem ise;

yum install MariaDB-client MariaDB-server

Mysql kurulum sonrasında yapacağımız işlem ise mysql root şifremizi belirlemek olacaktır.

mysql_secure_installation

mysql_secure_installation komutu ile bir root şifresi belirleme işlemini başlattık, yeni şifremi test olarak belirleyelim.

şimdi sunucumuzu kurduk, nginx ve MariaDB yükledik erişim alabiliyormuyuz kontrol edelim.

Şimdi php 7.2 kurulumlarına geçebiliriz.

# yum-config-manager --enable remi-php72
# yum install php php-common php-fpm
# yum install php-mysql php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml php-pecl-apc php-cli php-pear php-pdo php-zip

bu kısımda dilersek ilk laravel kurulumunu yapabiliriz veya php5.6 sürümünüde kurduktan sonra da laravel kurulumlarına geçebiliriz. Benim tercihim burada php 5.6 sürümünüde kurduktan sonra laravel kurulumlarını sağlamak.

php 5.6 kurulumlarına geçebiliriz.
# yum install php56 php56-php-common php56-php-fpm
# yum install php56-php-mysql php56-php-pecl-memcache php56-php-pecl-memcached php56-php-gd php56-php-mbstring php56-php-mcrypt php56-php-xml php56-php-pecl-apc php56-php-cli php56-php-pear php56-php-pdo 

Şimdi php ayarlarını sağlayalım..

# nano /etc/php-fpm.d/www.conf
# listen = 127.0.0.1:9000 => php 7.2 bu port üzerinde çalışmaktadır.

listen.owner = nobody
listen.group = nobody
listen.mode = 0660

kullanıcı grupları okuma yazma kısımları. Ben bu kısımları nginx olarak belirliyorum.

şimdi php5.6 olarak ikinci php servisimizi ayarlamasını yapalım

# nano /opt/remi/php56/root/etc/php-fpm.d/www.conf

( bu arada 7.2 kısmında user ve group kısmını editlemeyi unuttum onuda arada düzelttim. )

$$ Şimdi bu kısma kadar neler yaptık
-> nginx kurduk
-> mariadb kurduk ve root password setledik
-> php 7.1 | php 7.2 | php 5.6 kurulumlarını sağladık

şimdi burada yapacağımız işlem servislerini başlatma ayarlarını yapacağız. Bu kısımda getenforce yaparak çıkıyı kontrol ediniz, çıktıda Enforcing alırsanız setenforce 0 yapmanız geremektedir.

# listen = 127.0.0.1:9001 => php 5.6 bu port üzerinde çalışacaktır.

Bu kısma kadar istediğimiz birçok şeyi halettik. Laravel kurulumlarına geçmeden önce virtual host kurulumu yapacağız, daha sonra laravel kurulumlarına geçeceğiz.

## nano /etc/nginx/conf.d/test1.conf => php7.2
$$ nano /etc/nginx/conf.d/test2.conf => php5.6
## conf dosyaları

server {
  listen 80;
  server_name test1.com www.test1.com;
  root   /var/www/html/test1.com/;
  index index.php index.html index.htm;
			        
  access_log /var/log/nginx/test1.com/example1_access_log;
  error_log   /var/log/nginx/test1.com/example1_error_log   error;

  location / {
       try_files $uri $uri/ /index.php?$query_string;
  }

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  location ~ \.php$ {
  root    /var/www/html/test1.com/;
  fastcgi_pass   127.0.0.1:9000;	#set port for php-fpm to listen on
  fastcgi_index  index.php;
  fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
  include         fastcgi_params;
  include /etc/nginx/fastcgi_params;
  }
}


## test 2

server {
  listen 80;
  server_name test2.com www.test2.com;

  root   /var/www/html/test2.com/;
  index index.php index.html index.htm;
			        
  access_log /var/log/nginx/test2.com/example1_access_log;
  error_log   /var/log/nginx/test2.com/example1_error_log   error;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }
  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9001
  location ~ \.php$ {

  root    /var/www/html/test1.com/;
  fastcgi_pass   127.0.0.1:9001;	#set port for php-fpm to listen on
  fastcgi_index  index.php;
  fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
  include         fastcgi_params;
  include /etc/nginx/fastcgi_params;

  }
}

conf dosyalarını kontrol edelim hata varmı diye..

nginx -t
# mkdir /var/log/nginx/test1.com/
# mkdir /var/log/nginx/test2.com/

Arkasından dosyaları oluşturalım

# touch /var/log/nginx/test1.com/example1_access_log
# touch /var/log/nginx/test2.com/example1_access_log

sonra nginx servisimizi tekrar kontrol ederek servisleri start edelim..

service nginx restart

Şimdi hosts dosyamıza test1.com ve test2.com domainlerini yönlendirme yaparak test edelim..

192.168.2.45		test1.com test2.com www.test1.com www.test2.com

Şimdi sıra geldi laravel kurulumlarına bu kısımda test1.com adresimize laravel 5.8 test2.com laravel 5.1 / 5.2 sürümünü kurulumu yapacağız.

laravel 5.8 = composer create-project --prefer-dist laravel/laravel test1.com "5.8.*"
laravel 5.2 = composer create-project --prefer-dist laravel/laravel test2.com/ "5.2.*"
chown -R nginx:nginx test1.com/
chown -R nginx:nginx test2.com/

Laravel kurulumu ve dosya izinleri sonrasında yapacağımız işlem ise;

NOT : nano /etc/nginx/conf.d/test1.conf düzenleye girelim.
NOT : nano /etc/nginx/conf.d/test2.conf düzenleye girelim.
## conf dosyaları

server {
  listen 80;
  server_name test1.com www.test1.com;
  root   /var/www/html/test1.com/public;
  index index.php index.html index.htm;
			        
  access_log /var/log/nginx/test1.com/example1_access_log;
  error_log   /var/log/nginx/test1.com/example1_error_log   error;

  location / {
       try_files $uri $uri/ /index.php?$query_string;
  }

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  location ~ \.php$ {
  root    /var/www/html/test1.com/public;
  fastcgi_pass   127.0.0.1:9000;	#set port for php-fpm to listen on
  fastcgi_index  index.php;
  fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
  include         fastcgi_params;
  include /etc/nginx/fastcgi_params;
  }
}


## test 2

server {
  listen 80;
  server_name test2.com www.test2.com;

  root   /var/www/html/test2.com/public;
  index index.php index.html index.htm;
			        
  access_log /var/log/nginx/test2.com/example1_access_log;
  error_log   /var/log/nginx/test2.com/example1_error_log   error;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }
  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9001
  location ~ \.php$ {

  root    /var/www/html/test1.com/public;
  fastcgi_pass   127.0.0.1:9001;	#set port for php-fpm to listen on
  fastcgi_index  index.php;
  fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
  include         fastcgi_params;
  include /etc/nginx/fastcgi_params;

  }
}

laravel düzgün çalışması için root yolu public dizini olacak şekilde güncellenmesi gerekmektedir.

https://www.youtube.com/watch?v=9LXpvrJbPno

Video sonrasında aklınıza takılanları yazarsanız mümkün mertebe cevaplamaya çalışacağım.

Not ! Centos firewall aktif olan sunucularda kurulum sonrası hata alabilirsiniz, bunun için çalıştıracağınız komut:

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload