Tag

, ,

Untuk tulisan ini saya memiliki XAMPP yang telah digunakan untuk melakukan developing beberapa project aplikasi berbasis WEB menggunakan Apache + MySQL + PHP5.

Akan tetapi dikarenakan komputer yang semakin menua, serta sudah beberapa kali komputer yang saya gunakan untuk melakukan pengembangan mengalami gagal loading akibat proses yang terlalu berat saya pikir sudah saatnya untuk melakukan perubahan dengan cara menggantikan komponen Apache dengan Nginx. Akan tetapi untuk MySQL dan komponen lain yang saya anggap penting seperti PHPMyAdmin saya tetap menggunakan milik XAMPP.

Mematikan Proses XAMPP

Untuk mematikan proses XAMPP saya tinggal menjalankan script yang telah disediakan.

$ sudo /opt/lampp/lampp stop

Hal ini dilakukan untuk memastikan tidak ada service yang dijalankan oleh XAMPP akan mengganggu proses instalasi berikutnya. Selain itu kita hanya akan menjalankan beberapa service dari XAMPP yang kita butuhkan saja.

Instalasi Nginx dan PHP-FPM

Awalnya saya lakukan instalasi untuk nginx.

$ sudo apt-get install nginx

Setelah itu untuk memastikan nginx telah sukses terinstall saya mengakses alamat http://localhost dari browser dan pesan yang terkenal Welcome to nginx! pun keluar dilayar browser.

Selanjutnya agar agar script PHP bisa dieksekusi melalui nginx saya membutuhkan PHP-FPM (sila baca disini untuk penjelasan tentang PHP-FPM).

$ sudo apt-get install php-fpm php5-gd php5-mcrypt

Selain melakukan instalasi php-fpm saya juga melakukan instalasi modul gd dan mcrypt karena dalam pengembangan aplikasi menggunakan beberapa framework yang membutuhkan modul tersebut.

Testing PHP di nginx

Secara default setting untuk host default yang ada di nginx ada di /etc/nginx/sites-available, dan seperti halnya apache2 untuk mengaktifkan host tersebut kita harus membuat soft-link dari folder /etc/nginx/sites-enable.

Untuk testing terhadap php saya melakukan editing terhadap file /etc/nginx/sites-available/default dan mengaktifkan baris untuk eksekusi script PHP menggunakan PHP-FPM.

Berikut ini adalah isi file tersebut setelah di edit …

server {
	#listen   80; ## listen for ipv4; this line is default and implied
	#listen   [::]:80 default_server ipv6only=on; ## listen for ipv6

	root /usr/share/nginx/www;
	index index.html index.htm index.php;

	# Make site accessible from http://localhost/
	server_name localhost;

	location / {
		# First attempt to serve request as file, then
		# as directory, then fall back to displaying a 404.
		try_files $uri $uri/ /index.html;
		# Uncomment to enable naxsi on this location
		# include /etc/nginx/naxsi.rules
	}

	location /doc/ {
		alias /usr/share/doc/;
		autoindex on;
		allow 127.0.0.1;
		allow ::1;
		deny all;
	}

	# Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
	#location /RequestDenied {
	#	proxy_pass http://127.0.0.1:8080;
	#}

	#error_page 404 /404.html;

	# redirect server error pages to the static page /50x.html
	#
	#error_page 500 502 503 504 /50x.html;
	#location = /50x.html {
	#	root /usr/share/nginx/www;
	#}

	# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
	#
	location ~ \.php$ {
		try_files $uri = 404;
		fastcgi_split_path_info ^(.+\.php)(/.+)$;
	#	# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
	#
	#	# With php5-cgi alone:
	#	fastcgi_pass 127.0.0.1:9000;
	#	# With php5-fpm:
		fastcgi_pass unix:/var/run/php5-fpm.sock;
		fastcgi_index index.php;
		include fastcgi_params;
	}

	# deny access to .htaccess files, if Apache's document root
	# concurs with nginx's one
	#
	location ~ /\.ht {
		deny all;
	}
}

Kemudian saya tambahkan file untuk menampilkan phpinfo ke document root milik nginx yang secara default berada di /usr/share/nginx/www/.

$ sudo touch /usr/share/nginx/www/phpinfoer.php
$ sudo echo "<?php phpinfo(); " > /usr/share/nginx/www/phpinfoer.php

Apabila berhasil maka yang tampil saat mengakses http://localhost/phpinfoer.php adalah hasil eksekusi info tentang PHP.

Aktifasi MySQL dan PHPMyAdmin

Seperti yang saya sampaikan bahwa untuk beberapa komponen XAMPP saya masih gunakan, salah satunya adalah MySQL dan PHPMyAdmin.

Untuk PHPMyAdmin sangat mudah, saya tinggal tambahkan soft-link dari folder root localhost ke folder PHPMyAdmin milik XAMPP yang berada di /opt/lampp/phpmyadmin.

$ cd /usr/share/nginx/www
$ sudo ln -s /opt/lampp/phpmyadmin

Kemudian tinggal di test dari browser dengan mengakses http://localhost/phpmyadmin. Saat muncul pesan kesalahan tidak dapat mengakses file config milik PHPMyAdmin, hal ini dikarenakan hak akses antara nginx dan Apache di xampp menggunakan user yang berbeda. Di settingan saya Apache menggunakan nobody sedangkan di nginx menggunakan www-data. Untuk mengatasinya tinggal dilakukan pergantian owner file config milik PHPMyAdmin saja.

Namun karena koneksi ke MySQL belum dilakukan setting yang benar, maka aplikasi akan komplain karena tidak dapat terhubung dengan MySQL server. Maka langkah selanjutnya adalah untuk setting file socket MySQL.

Secara default socket MySQL yang dijadikan referensi koneksi dari PHP adalah di /var/run/mysqld/mysqld.sock, sedangkan XAMPP berada di /opt/lampp/var/mysql/mysql.sock. Apabila ini tidak disesuaikan maka PHPMyAdmin serta aplikasi PHP lainnya tidak akan bisa melakukan koneksi ke MySQL.

Untuk menyesuaikan settingan ini bisa langsung mengubah file /etc/php5/fpm/php.ini. Akan tetapi apabila terdapat upgrade paket dilain waktu, sistem instalasi akan komplain karena file php.ini berbeda dan dalam prakteknya tidak disarankan untuk melakukan perubahan langsung di file php.ini, mengingat saat upgrade setting kita bisa di override oleh proses instalasi. Untuk PHP-FPM kita bisa melakukan perubahan variable php.ini dengan menambahkan perintah di konfigurasi pool PHP-FPM, yang secara default ada di file /etc/php5/fpm/pool.d/www.config serta menambahkan baris perintah ini di bagian bawahnya …

;ubah nilai dari default_socket
;arahkan ke miliknya lampp di /opt/lampp/var/mysql/mysql.sock
php_admin_value[pdo_mysql.default_socket]=/opt/lampp/var/mysql/mysql.sock
php_admin_value[mysql.default_socket] =/opt/lampp/var/mysql/mysql.sock
php_admin_value[mysqli.default_socket] =/opt/lampp/var/mysql/mysql.sock

Setelah itu lakukan proses restart untuk PHP-FPM dan nginx.

$ sudo service php-fpm restart
$ sudo service nginx restart

Setelah langkah ini seharusnya PHPMyAdmin bisa berjalan dengan normal.