Posts Tagged ‘Internet Technologies’

(ve) Project: LNMP (Linux Nginx MySQL PHP-FPM)


As you know, I work for (mt) Media Temple, a great web hosting company. Recently, I procured a (ve) 512 MB server to practice some server administrator tasks. I was looking for a project to really challenge me so I decided to provision a VPS and is as bare-bones as a VPS gets. My server came as a completely raw system with nothing installed but the operating system. No users except the root user, making it somewhat of a true VPS, for me to make whatever I want of it.

So for my challenge I decided to install a LNMP stack: Linux, Nginx, MySql, and PHP-FPM. At the time, I chose PHP-FPM over PHP. I wanted to do something I had very little knowledge about. I started using a few guides from several websites and Wiki’s. So I was able to limp this project along over the span of a few days and frustrations. I had seen a video from WordPress WordCamp 2011 where a co-worker held a presentation about Nginx(engine-X) as a web server, as apposed to a resource intensive Apache configuration. I only had a 512MB server, therefore, I didn’t want any rolling memory binges.

Having not that much knowledge of the differences between Apache and Nginx, I read that Nginx is significantly stripped down, in comparison to Apache. Nginx, which is asynchronous, keeps a low and steady memory-footprint — regardless of traffic . I was able to find plenty of articles, documentation, forums, and Wiki’s to assist me. I have a basic understanding of Linux, and I can use the command line. Nano/vim are my preferred command-line text editors, and I know how to SSH to a bash shell from a remote system using the Terminal application, on my MacBook Pro. I decided not to setup mail on my server, as it’s a hassle and can suck resources. Instead I’m going to setup Google Apps to handle my mail. (Post on that to follow later.)

I went with Ubuntu 10.04 LTS Lucid, as it’s an easy to use Linux distribution, and has a strong community following. LTS has more stable packages, and 10.04 includes the most recent software versions. So I started out with a fresh OS install and a root login. First thing I had to do was secure my server and create an administrator user. I gave my user sudo access, I didn’t disable root access till after I finished my task. I waited until the end of the config, in the small chance that I had to use root for some reason. Good thing, because I did. For security reasons, my (ve) server’s /tmp and /var/tmp directories are mounted as nonexec. However, this causes issues with apt-get/aptitude, as it uses /tmp as a “temporary” directory to pre-install scripts. To resolve this issue, I configured apt to not use /tmp and use /var/local/tmp instead. (I needed root to have permissions to write to the apt configuration directory) I could then update Unbuntu with apt-get. I then began to secure my server.

root@ve:~# adduser jabo
root@ve:~# visudo
jabo@ve:~$ sudo apt-get update
jabo@ve:~$ sudo apt-get -u upgrade

Once done, I installed Nginx using apt-get. Restarted, with no errors. I then checked my IP address and I got the happy Nginx ‘Welcome Page.’ Next, I had to prepare the web directory where my sites would be served from. Then add them to the www-data group, as well as my administrator user. I setup the Virtual Hosting of two more domains in Nginx. I then created a virtual host file for Nginx in the sites-available directory, essentially telling Nginx what ports to server traffic and the location of log files for each domain. Restarted Nginx again, and no errors. On to ‘M,’ for MySQL.

jabo@ve:~$ sudo apt-get install nginx
jabo@ve:~$ sudo /etc/init.d/nginx start
jabo@ve:~$ sudo usermod -a -G www-data user1
jabo@ve:~$ sudo chown -R www-data:www-data /var/www
jabo@ve:~$ sudo chmod -R 775 /var/www

MySQL is easy. With Apt-get of MySQL, all I had to do was configure a root user and password. I also created two database users and two databases for my later install of WordPress. PHP was not so easy.

jabo@ve:/var/www$ sudo apt-get install mysql-server php5-mysql mysql-client

In my subconscious, I understood PHP-FPM to mean that I needed to install PHP first, then the PHP-FPM module. This is wrong. With a scratch install you should just go straight to PHP-FPM. I reinstalled my server three times, and changed operating systems. Luckily, I had made back-ups of all the configuration files, so the reinstall, or reverting my server back to default, was painless. Finally, I got it figured out and got the PHP5-FPM service to restart without any errors!

jabo@ve:/var/www$ sudo aptitude install python-software-properties
jabo@ve:/var/www$ sudo add-apt-repository ppa:brianmercer/php
jabo@ve:/var/www$ sudo aptitude -y update
jabo@ve:/var/www$ sudo aptitude -y install php5-cli php5-common php5-mysql php5-suhosin php5-gd
jabo@ve:/var/www$ sudo aptitude -y install php5-fpm php5-cgi php-pear php5-memcache php-apc
jabo@ve:/var/www$ sudo service php5-fpm start

The last step in the whole process was to install WordPress and configure it to talk with the MySQL databases I had created earlier for my domains. After that I did a little bit of Nginx and MySQL tuning. However, I’m leaving that for a later post because I have had my fill of “geek-speak” for the evening. Please enjoy the new domain I created, .

Update: This Blog and the rest of are running on my (ve) 512MB Server.

Hello world!

Welcome to My Blog. This is my first post. I uploaded a bunch of Plugins to test the optimization of my Server. I work in the I.T. industry as a Customer Service Agent. I feel like I should tell you more about myself, but then you wouldn’t come back….

Stay tuned for Updates to myHome Page


Return top