Tag Archive for 'vps'

Setting up multiple hosts for Nginx (on a Gentoo VPS)

These are the steps I took to setup multiple hosts for Nginx on a 256MB Slicehost VPS running Gentoo Linux. They should work in other similar Linux environments. YMMV.

I followed this multiple hosts layout intended for a single admin/user, and adapted for Nginx this virtual host permissions setup written for Apache.

Place your user account in the web server (Nginx) group:

sudo usermod -a -G nginx myuser

Logout, login again, check if you are in the “nginx” group by typing:

groups

Create the “public_html” or “htdocs” or whatever directory that will hold all your websites:

mkdir /home/myuser/public_html

Create a directory for your “default” or “catch-all” website:

mkdir /home/myuser/public_html/default

Make sure the “public_html” directory is owned by your user and belongs to the web server group:

sudo chgrp -R nginx /home/myuser/public_html

Make any files and directories created in the future under “public_html” inherit the same ownership and permissions, so you don’t have to set these permissions again:

sudo chmod -R 2750 /home/myuser/public_html

Edit Nginx’s config file:

sudo nano /etc/nginx/nginx.conf

Modify the “server” section to look something like this: (source)

        server {
                listen          80 default;
                server_name     _ *;
 
                access_log      /var/log/nginx/localhost.access_log main;
                error_log       /var/log/nginx/localhost.error_log info;
 
                location / {
                        index   index.html,index.htm,index.php;
                        root    /home/myuser/public_html/default;
                }
                location ~ .*.php$ {
                        include /etc/nginx/fastcgi_params;
                        fastcgi_pass    127.0.0.1:1026;
                        fastcgi_index   index.php;
                        fastcgi_param   SCRIPT_FILENAME  /home/myuser/public_html/default/$fastcgi_script_name;
                }
        }

Start Nginx:

sudo /etc/init.d/nginx start

Set Nginx to automatically start on bootup:

sudo rc-config add nginx

And you’re done! If you need to add another website in the future, simply add another “server” section to nginx.conf.

If you liked this post, please subscribe to my feed. Thanks for visiting!

Optimize hard disk performance in Linux; benchmarks on Slicehost

A three-pronged attack on performance” is a good read on improving performance in Linux. One performance enhancing setting is the hard disk’s readahead value. Unfortunately, there is no magical readahead value that will optimize your hard disk’s performance; you must run your own benchmarks. I used the following code to benchmark disk performance (12 times) at each readahead value on my 256MB Slicehost VPS.

for ((i=0;i<12;i++)); do sudo hdparm -t /dev/sda1; done

The average disk read speeds at each readahead value are as follows:

“hdparm -a128 /dev/sda1″ - 65.69 mb/sec
“hdparm -a256 /dev/sda1″ - 104.44 mb/sec
“hdparm -a512 /dev/sda1″ - 114.54 mb/sec
“hdparm -a1024 /dev/sda1″ - 119.39 mb/sec
“hdparm -a2048 /dev/sda1″ - 122.82 mb/sec

It appears that on my Slicehost VPS, “hdparm -a2048” yields the best performance. To ensure that this readahead value is used at all times, I instruct hdparm to set it on every bootup by adding the following line to /etc/conf.d/local.start

hdparm -a2048 /dev/sda1

More details and documentation on Slicehost’s Wiki.

Speed up PHP with XCache on Gentoo Linux

XCache is a PHP opcode cacher created by the same developer who brought us Lighttpd. An opcode cacher significantly increases PHP’s performance by caching the compiled state of PHP code to avoid time-consuming recompilation each time a script is executed. There are a handful of great opcode cachers on the market currently, incuding APC and eAccelerator (here’s a more comprehensive list). APC is written by some of the developers of PHP and will be bundled with PHP6. eAccelerator has a long history and might be the most popular and widely supported opcode cacher. I chose XCache due to its reputation for superior performance (source) and its ability to take advantage of multi-core processors.

Setting up XCache on Gentoo Linux is dead simple.

Install XCache

emerge -va dev-php5/xcache

Configure XCache

nano /etc/php/cgi-php5/ext-active/xcache.ini

Edit anything you see fit. See this page for details.
Since Slicehost is running on twin dual-core processors, I changed “xcache.count” to 5 (n+1 where n is the number of processors) to take advantage of the Splitted Cache feature.

Restart PHP
I have PHP running as a FastCGI daemon, so I restart with

/etc/init.d/fcgi.php restart

Check phpinfo() to verify that XCache is loaded. You should see the following in the “Powered by Zend” box:

with XCache v1.2.1, Copyright (c) 2005-2007, by mOo

Convert your Linux filesystem safely and easily (even on a VPS)

I was shocked to discover that converting one’s filesystem is simple as pie and totally safe. The process goes like this:

  1. Remove cruft from your system (optional)
  2. Reboot into a LiveCD environment (optional if the partition you want to convert can be mounted read-only without rebooting)
  3. Mount the partition you want to convert in read-only mode
  4. Copy the contents of the partition somewhere temporarily (ex. another partition, external drive, DVD, etc.)
  5. Unmount the copied partition
  6. Format the partition with your desired filesystem
  7. Mount the formatted partition and copy all the files back
  8. Edit /etc/fstab to reflect the new filesystem
  9. Reboot and profit

Thanks to Slicehost’s wonderful Rescue Mode with a 2GB Rescue Slice, I was able to use this method to convert my Gentoo VPS from ext3 to XFS. Here’s a step-by-step account. These steps were performed on a 256MB VPS at Slicehost. YMMV.
Continue reading ‘Convert your Linux filesystem safely and easily (even on a VPS)’

Slicehost’s Rescue Mode rocks; Gentoo’s Xen guest /proc /sys mounting bug

This is a tutorial / fan post for Slicehost’s Rescue Mode. Rescue Mode saved me from my own stupid mistakes and also a known Gentoo bug.

While fiddling around in my /etc/fstab file (added “data=writeback” to the mount options), I rendered my Gentoo VPS unbootable. Oh well, I just need to boot a LiveCD and fix my stupid fstab. Wait, this isn’t a physical Gentoo box in front of me, but a virtual server hosted miles away from me…

Ta da, Slicehost’s Rescue Mode to the, uhh, rescue. I log into SliceManager, go to the Rescue panel of my slice, and click “Enter Rescue Mode”. SliceManager gives me a temporary root password, and finishes building the Rescue Slice in a few minutes. Instant LiveCD-like rescue environment!

To fix my fstab, I SSH into my Rescue Slice with the temporary root password. The partition holding my regular slice is available as /dev/sda1 (and my swap partition is /dev/sda2 if I need that for some reason). I mount my regular slice,

mkdir /mnt/slice
mount /dev/sda1 /mnt/slice

fix my fstab file,

nano /mnt/slice/etc/fstab

and finally return to SliceManager and click “Exit Rescue Mode”. Problem solved. Slicehost’s Rescue Mode rocks!

Unfortunately, my VPS failed to boot again but with a different error. It died upon trying to mount /proc.

The "mount" command failed with error: proc already mounted

It turns out this is a known Gentoo bug when working with Xen. Apparently Gentoo Xen guests should not try to mount /proc and /sys. I don’t understand what triggered this problem or why I did not encounter it before.

So back I go into Rescue Mode to fix this by commenting out the section of /sbin/rc that attempts to mount /proc and /sys (if you only skip /proc mounting, the next bootup will die trying to mount /sys).

mkdir /mnt/slice
mount /dev/sda1 /mnt/slice
nano /mnt/slice/sbin/rc

Around line 217, comment out these chunks of code like so: (source)

#       check_statedir /proc
#
#       ebegin "Mounting proc at /proc"
#       if [[ ${RC_USE_FSTAB} = "yes" ]] ; then
#               mntcmd=$(get_mount_fstab /proc)
#       else
#               unset mntcmd
#       fi
#       try mount -n ${mntcmd:--t proc proc /proc -o noexec,nosuid,nodev}
#       eend $?

and a few lines later:

#       if [ "$(get_KV)" -ge "$(KV_to_int '2.6.0')" ] ; then
#               if [[ -d /sys ]] ; then
#                       ebegin "Mounting sysfs at /sys"
#                       if [[ ${RC_USE_FSTAB} = "yes" ]] ; then
#                               mntcmd=$(get_mount_fstab /sys)
#                       else
#                               unset mntcmd
#                       fi
#                       try mount -n ${mntcmd:--t sysfs sysfs /sys -o noexec,nosuid,nodev}
#                       eend $?
#               else
#                       ewarn "No /sys to mount sysfs needed in 2.6 and later kernels!"
#               fi
#       fi

That’s it. Happy rescuing. :)

Nginx with PHP as FastCGI on Gentoo Linux

Nginx (pronounced “Engine X”) is a high performance web server (and proxy server, but we will be using it as a web server here). In small VPS environments where memory is precious, Apache is at best overkill and uses memory that could be spent elsewhere (like MySQL query caching), at worst a terrible bottleneck that will consistently bring down your site under very moderate loads. If you are willing to live without .htaccess files and Apache-style mod_rewrite rules, Nginx is a great replacement that will lower memory usage and increase performance.

This is a draft. Comments, suggestions, corrections, improvements are very much welcome!

Continue reading ‘Nginx with PHP as FastCGI on Gentoo Linux’

Preparing Gentoo Linux for a minimalist web server

This is a first stab at a guide to preparing a minimalist web server running on Gentoo Linux, ideal for a small VPS. Don’t follow these instructions unless you know what you’re doing, ’cause I’m not sure I do. :P (Apologies for the lack of updates; I’ve been busy playing with this Gentoo web server amongst other things.)

This is a draft. Comments, suggestions, corrections, improvements are very much welcome!

Continue reading ‘Preparing Gentoo Linux for a minimalist web server’