{"id":133,"date":"2013-06-05T15:55:44","date_gmt":"2013-06-05T07:55:44","guid":{"rendered":"http:\/\/matnet.my\/blog\/?p=133"},"modified":"2013-06-06T16:02:05","modified_gmt":"2013-06-06T08:02:05","slug":"nginxphp-fpmvarnishmysqldphpdrupalunisonbind-roundrobin-on-fbsd-9-1","status":"publish","type":"post","link":"https:\/\/matnet.my\/blog\/2013\/06\/nginxphp-fpmvarnishmysqldphpdrupalunisonbind-roundrobin-on-fbsd-9-1\/","title":{"rendered":"nginx+php-fpm+varnish+mysqld+php+drupal+unison+bind-roundrobin on fbsd 9.1"},"content":{"rendered":"<p>I got two machine that will act as web and name server.<\/p>\n<p>Both servers running with same services and will replicate each other using unison.<\/p>\n<p>The name server configured with round robin.<\/p>\n<p>1. Bind Setup<\/p>\n<p># cd \/usr\/ports\/dns\/bind99 &amp;&amp; make install clean<br \/>\n# mkdir -p \/var\/chroot\/named\/etc\/namedb\/log<br \/>\n# mkdir -p \/var\/chroot\/named\/dev<br \/>\n# mkdir -p \/var\/chroot\/named\/var\/run<br \/>\n# cd \/var\/chroot<br \/>\n# chown -R bind:bind named<br \/>\n# chmod 700 named<br \/>\n# cp \/etc\/localtime \/var\/chroot\/named\/etc<br \/>\n# cp \/etc\/namedb\/named.root \/var\/chroot\/named\/etc\/namedb\/<br \/>\n# cd \/var\/chroot\/named\/dev<br \/>\n# mknod zero c 2 12<br \/>\n# ln -s \/dev\/random .<br \/>\n# mknod null c 2 2<br \/>\n# chmod 666 zero random null<br \/>\n# cd \/etc<br \/>\n# mv namedb old.namedb<br \/>\n# ln -s \/var\/chroot\/named\/etc\/namedb .<br \/>\n# rndc-confgen -a -c \/etc\/namedb\/rndc.conf -k rndc-key -b 512<br \/>\n# edit \/etc\/rc.conf<br \/>\nnamed_enable=&#8221;YES&#8221;<br \/>\nnamed_program=&#8221;\/usr\/local\/sbin\/named&#8221;<br \/>\nnamed_chrootdir=&#8221;\/var\/chroot\/named&#8221;<br \/>\nnamed_flags=&#8221;-c \/etc\/namedb\/named.conf&#8221;<br \/>\nnamed_pidfile=&#8221;\/var\/run\/named.pid&#8221;<\/p>\n<p>2. Nginx Setup<\/p>\n<p># cd \/usr\/ports\/www\/nginx# make install clean; rehash<\/p>\n<p>Required module for nginx<br \/>\ni. HTTP_MODULE<br \/>\nii HTTP_ADDITION_MODULE<br \/>\niii. HTTP_CACHE_MODULE<br \/>\niv. HTP_GEOIP_MODULE<br \/>\nv. HTTP_GZIP_STATIC_MODULE<br \/>\nvi. HTTP_PERL_MODULE<br \/>\nvii. HTTP_REALIP_MODULE<br \/>\nviii. HTTP_REWRITE_MODULE<br \/>\nx. HTTP_STATUS_MODULE<\/p>\n<p>3. Setup PHP-FPM<\/p>\n<p># cd \/usr\/ports\/lang\/php5<br \/>\n# make install clean; rehash<\/p>\n<p>Select Build Option &#8211; CLI , CGI , FPM<\/p>\n<p>edit \/etc\/rc.conf<\/p>\n<p>php_fpm_enable=&#8221;YES&#8221;<br \/>\nnginx_enable=&#8221;YES&#8221;<\/p>\n<p>cp \/usr\/local\/etc\/php.ini-production \/usr\/local\/etc\/php.ini<\/p>\n<p>edit php.ini with this settings:<\/p>\n<p>error_reporting = E_ALL | E_STRICT<br \/>\ncgi.fix_pathinfo=1 &lt;&#8211; change 0 for drupal<br \/>\nexpose_php = Off<br \/>\nupload_max_filesize = 200M<br \/>\npost_max_size = 200M<br \/>\nmax_execution_time = 600<br \/>\nmax_input_time = 600<br \/>\nmemory_limit = 256M<br \/>\nmysql.allow_persistent = Off<br \/>\nregister_argc_argv = On<br \/>\ndate.timezone = Asia\/Kuala_Lumpur<br \/>\nregister_globals = Off<br \/>\nallow_url_fopen = Off<br \/>\nmagic_quotes_gpc = Off<br \/>\nmagic_quotes_runtime = Off<br \/>\n\/usr\/local\/etc\/rc.d\/php-fpm start<br \/>\nInstall Maxmind GeoIP<br \/>\n# cd \/opt\/conf<br \/>\n# wget http:\/\/geolite.maxmind.com\/download\/geoip\/database\/GeoLiteCountry\/GeoIP.dat.gz<br \/>\n# gunzip .\/GeoIP.dat.gz<\/p>\n<p>edit \/usr\/local\/etc\/nginx\/nginx.conf<\/p>\n<p>user www www;<br \/>\nworker_processes 4;<br \/>\nerror_log \/var\/log\/nginx\/error.log crit;<br \/>\npid \/var\/run\/nginx.pid;<br \/>\nevents {<br \/>\nworker_connections 1024;<br \/>\n}<br \/>\nhttp {<br \/>\ngeoip_country \/opt\/conf\/GeoIP.dat;<br \/>\ninclude \/usr\/local\/etc\/nginx\/mime.types;<br \/>\ndefault_type application\/octet-stream;<br \/>\naccess_log off;<br \/>\nserver_tokens off;<br \/>\nsendfile on;<br \/>\nclient_max_body_size 200m;<br \/>\nclient_body_buffer_size 1m;<br \/>\nkeepalive_timeout 1;<br \/>\nport_in_redirect off;<br \/>\ngzip on;<br \/>\ngzip_http_version 1.1;<br \/>\ngzip_vary on;<br \/>\ngzip_comp_level 6;<br \/>\ngzip_proxied any;<br \/>\ngzip_types text\/plain text\/css application\/json application\/x-javascript application\/xml application\/xml+rss text\/javascript;<br \/>\ngzip_buffers 16 8k;<br \/>\ngzip_disable &#8220;MSIE [1-6].(?!.*SV1)&#8221;;<br \/>\ninclude \/usr\/local\/etc\/nginx\/conf.d\/*.conf;<br \/>\n}<\/p>\n<p># mkdir \/usr\/local\/etc\/nginx\/conf.d<\/p>\n<p># mkdir \/var\/www\/domain.com<br \/>\n# chown www:www \/var\/www\/domain.com<br \/>\n# chmod 755 \/var\/www\/domain.com<\/p>\n<p># sh -c &#8216;echo &#8220;&lt;?php phpinfo(); ?&gt;&#8221; &gt; \/var\/www\/domain.com\/info.php&#8217;<\/p>\n<p>create \/usr\/local\/etc\/nginx\/conf.d\/domain_com.conf<\/p>\n<p>server {<br \/>\nlisten 80;<br \/>\nserver_name www.domain.com;<br \/>\nrewrite ^ http:\/\/domain.com$request_uri?;<br \/>\n}<br \/>\nserver {<br \/>\nlisten 80;<br \/>\nserver_name domain.com;<br \/>\nserver_name_in_redirect off;<br \/>\nroot \/var\/www\/domain.com;<br \/>\nlocation ~* ^.+\\.(ico|js|gif|jpg|jpeg|png|bmp)$ {<br \/>\nexpires 30d;<br \/>\n}<br \/>\nlocation \/ {<br \/>\nindex index.php;<br \/>\n}<br \/>\nlocation ~ \\.php$ {<br \/>\nfastcgi_pass 127.0.0.1:9000;<br \/>\nfastcgi_index index.php;<br \/>\nfastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;<br \/>\nfastcgi_param GEOIP_COUNTRY_NAME $geoip_country_name;<br \/>\nfastcgi_param SCRIPT_FILENAME \/var\/www\/domain.com$fastcgi_script_name;<br \/>\ninclude fastcgi_params;<br \/>\n}<br \/>\nlocation ~ \/\\.ht {<br \/>\ndeny all;<br \/>\n}<br \/>\n}<\/p>\n<p># mkdir -p \/var\/tmp\/nginx\/client_body_temp<br \/>\n# touch \/var\/log\/nginx\/error.log<\/p>\n<p>3. Install some more packages that required by drupal.<\/p>\n<p># cd \/usr\/ports\/databases\/mysql-server# make install clean; rehash<\/p>\n<p>edit rc.conf<\/p>\n<p>mysql_enable=&#8221;YES&#8221;<\/p>\n<p># \/usr\/local\/etc\/rc.d\/mysql-server start<\/p>\n<p># cd \/usr\/ports\/databases\/php5-mysql<br \/>\n# make install clean<\/p>\n<p># cd \/usr\/ports\/www\/php5-session<br \/>\n# make install clean<\/p>\n<p># cd \/usr\/ports\/graphics\/php5-gd<br \/>\n# make install clean<\/p>\n<p># cd \/usr\/ports\/security\/php5-hash<br \/>\n# make install clean<\/p>\n<p># cd \/usr\/ports\/security\/php5-mcrypt<br \/>\n# make install clean<\/p>\n<p># cd \/usr\/pors\/devel\/php5-json<br \/>\n# make install clean<\/p>\n<p># cd \/usr\/ports\/textproc\/php5-dom<br \/>\n# make install clean<\/p>\n<p># cd \/usr\/ports\/security\/filter\/php5-filter<br \/>\n# make install clean<\/p>\n<p># cd \/usr\/ports\/databases\/php5-pdo<br \/>\n# make install clean<\/p>\n<p># cd \/usr\/ports\/textproc\/php5-simplexml<br \/>\n# make install clean<\/p>\n<p># cd \/usr\/ports\/textproc\/php5-xml<br \/>\n# make install clean<\/p>\n<p># cd \/usr\/ports\/converters\/php5-mbstring<br \/>\n# make install clean<\/p>\n<p># cd \/usr\/ports\/databases\/php5-pdo_mysql<br \/>\n# make install clean<\/p>\n<p>4. Drupal setup<\/p>\n<p>Upload drupal content to \/var\/www\/domain.com<\/p>\n<p>Run the URL and setting up the installer.<\/p>\n<p>5. Varnish setup<\/p>\n<p># cd \/usr\/ports\/www\/varnish<br \/>\n# make install clean<\/p>\n<p>change nginx port to 8080<\/p>\n<p>edit \/usr\/local\/etc\/varnish\/default.vcl<\/p>\n<p>backend default {<\/p>\n<p>.host = &#8220;127.0.0.1&#8221;;<\/p>\n<p>.port = &#8220;8080&#8221;;<\/p>\n<p>}<\/p>\n<p>edit rc.conf<\/p>\n<p>varnishd_enable=&#8221;YES&#8221;<\/p>\n<p>varnishd_listen=&#8221;:80&#8243;<\/p>\n<p>varnishd_config=&#8221;\/usr\/local\/etc\/varnish\/default.vcl&#8221;<\/p>\n<p>varnishd_storage=&#8221;malloc,4G&#8221;<\/p>\n<p>varnishd_admin=&#8221;:6082&#8243;<\/p>\n<p>\/usr\/local\/etc\/rc.d\/varnishd start<\/p>\n<p>6. Setup unison for replication<\/p>\n<p>Why unison and not rsync ? unison can deal with upate from both replicas.<\/p>\n<p># cd \/usr\/ports\/net\/unison# make install clean<\/p>\n<p>Directory to sync :<br \/>\ni. \/var\/www\/domain.com<br \/>\nii. \/var\/db\/mysql\/drupal<\/p>\n<p>Create sync.sh<br \/>\n#!\/usr\/local\/bin\/bash<br \/>\n# set paths \/ dirs<br \/>\n_paths=&#8221;\/var\/www\/domain.com\/ \\<br \/>\n\/var\/db\/mysql\/drupal\/&#8221;<br \/>\n# binary file name<br \/>\n_unison=\/usr\/local\/bin\/unison<br \/>\n# server names<br \/>\n_rserver=&#8221;ns2.matnet.com.my&#8221;<br \/>\n# sync it<br \/>\nfor r in ${_rserver}<br \/>\ndo<br \/>\nfor p in ${_paths}<br \/>\ndo<br \/>\n${_unison} -batch &#8220;${p}&#8221;\u00a0 &#8220;ssh:\/\/${r}\/${p}&#8221;<br \/>\ndone<br \/>\ndone<\/p>\n<p>Run the script on the crontab.<br \/>\nFinish \ud83d\ude42<\/p>\n<p>Thanks to :<br \/>\nhttp:\/\/www.cyberciti.biz\/faq\/unison-file-synchronizer-tool\/<br \/>\nhttp:\/\/bin63.com\/how-to-install-nginx-and-php-fpm-on-freebsd<br \/>\nhttp:\/\/www.freebsdonline.com\/content\/view\/504\/506\/<br \/>\n<a href=\"http:\/\/linax.wordpress.com\/2008\/11\/08\/bind-9-freebsd-installation\/\">BIND 9 FreeBSD&nbsp;Installation<\/a><br \/>\nhttp:\/\/blog.ijun.org\/2012\/01\/install-nginx-php-fpm-and-varnish-on.html<br \/>\nhttp:\/\/bin63.com\/how-to-install-varnish-cache-on-freebsd<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I got two machine that will act as web and name server. Both servers running with same services and will &hellip; <a href=\"https:\/\/matnet.my\/blog\/2013\/06\/nginxphp-fpmvarnishmysqldphpdrupalunisonbind-roundrobin-on-fbsd-9-1\/\" class=\"more-link\">More <span class=\"screen-reader-text\">nginx+php-fpm+varnish+mysqld+php+drupal+unison+bind-roundrobin on fbsd 9.1<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,5,3],"tags":[],"class_list":["post-133","post","type-post","status-publish","format-standard","hentry","category-bsd-nix","category-cs778","category-www","standard"],"_links":{"self":[{"href":"https:\/\/matnet.my\/blog\/wp-json\/wp\/v2\/posts\/133","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/matnet.my\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/matnet.my\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/matnet.my\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/matnet.my\/blog\/wp-json\/wp\/v2\/comments?post=133"}],"version-history":[{"count":7,"href":"https:\/\/matnet.my\/blog\/wp-json\/wp\/v2\/posts\/133\/revisions"}],"predecessor-version":[{"id":140,"href":"https:\/\/matnet.my\/blog\/wp-json\/wp\/v2\/posts\/133\/revisions\/140"}],"wp:attachment":[{"href":"https:\/\/matnet.my\/blog\/wp-json\/wp\/v2\/media?parent=133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matnet.my\/blog\/wp-json\/wp\/v2\/categories?post=133"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matnet.my\/blog\/wp-json\/wp\/v2\/tags?post=133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}