Setup an Ubuntu VPS the way I like it
In this post I want to document my way of installing a LAMP stack plus Ruby on Rails on my Ubuntu VPS.
VPS stands for Virtual Private Server, and it’s like having a real remote machine you can log into to configure it the way you like (and need) it, and serve your web pages to people around the world.
My installation includes:
* MySQL
* RVM
* Ruby
* Rails
* Passenger with Apache module
* PHP
* PhpMyAdmin
This procedure is tested both on Ubuntu 10.04 and Ubuntu 12.04.
Be advised that right now 1024 MB of RAM is the minimum recommended specs for a Passenger (with Apache module) installation.
I chose Apache/MySQL over the trendy and possibly superior Nginx/Postgresql, because by using the tried and tested Apache/MySQL solution, I could go ahead with a painless installation of the PhpMyAdmin tool, and both Apache and MySQL have a ton of documentation.
Let’s get this started!
Ah, wait, just a note for all n00bs out there. The “$” symbol means “your command prompt” in the terminal. So you don’t have to type it, it’s just there to signal that we’re in the terminal and have to type a command in there. Yes? Cool.
Upgrading the VPS
First of all, we should login though ssh into our VPS.
$ ssh root@your-ip-address
once we are in, let’s do some updating
$ apt-get update $ apt-get upgrade
Finally, a nice reboot
$ reboot
Now, we’ve been kicked out. Let’s log back in, like this:
$ ssh root@your-ip-address
and let’s proceed by creating a new user which we’ll use from now on to log into our sweet server. We’ll be prompted to choose a password for our user.
Also, let’s add our user to the sudoers list (meaning our user can get superpowers whenever he wants). Then, we exit.
$ adduser alex $ adduser alex sudo $ exit
We’re now ready to log back in, this time with our own user, and let’s start installing some stuff which we’ll need during our installations.
$ ssh alex@your-ip-address $ sudo apt-get install nano git-core curl libcurl4-openssl-dev apache2-prefork-dev libapr1-dev libaprutil1-dev
Let’s now install RVM.
RVM is a tool that will allow us to manage the installation of ruby.
$ curl -L get.rvm.io | bash -s stable --auto
Then let’s load the rvm paths to .bashrc, type:
$ sudo nano .bashrc
and then add this line to the bottom of the file
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"
You can save with ctrl-o and exit with ctrl-x.
To load RVM in our current session, type the following in terminal
source .bashrc
if any issue should arise, add “source .profile” to the files .bash_profile or .bashrc.
To check if RVM was properly installed, type:
$ type rvm | head -1
You should get the text:
rvm is a function
Now we can go on and install ruby and rails and so on.
Type in terminal:
$ rvm notes $ rvm autolibs enable $ rvm requirements
The last command will either install the required packages, or tell you what packages to install through sudo apt-get install.
In any case, after the installation of the needed libraries, let’s go ahead and install Ruby.
Ruby and(on) Rails installation
$ rvm install 1.9.3 $ rvm --default use 1.9.3
Then to check if ruby is doing fine:
$ ruby -v
Now, let’s install rails:
$ gem install rails
Passenger and Apache installation
Let’s install passenger, to serve our Rails apps on our server.
$ gem install passenger
Go with the default options and you should be fine.
To check if it’s properly installed:
$ passenger -v
Now, we can install Apache support for Passenger.
$ rvmsudo passenger-install-apache2-module
Once finished, you should get a message like this:
Please edit your Apache configuration file, and add these lines: LoadModule passenger_module /home/alex/.rvm/gems/ruby-1.9.3-p392/gems/passenger-3.0.19/ext/apache2/mod_passenger.so PassengerRoot /home/alex/.rvm/gems/ruby-1.9.3-p392/gems/passenger-3.0.19 PassengerRuby /home/alex/.rvm/wrappers/ruby-1.9.3-p392/ruby
So let’s do like it says, and let’s add those lines to Apache configuration.
How to find where is the Apache configuration? Well I could tell you right away, but let’s find out.
run the command:
$ ps -ef | grep apache
which will return:
root 1419 1 0 Apr10 ? 00:00:00 /usr/sbin/apache2 -k start
The important part is /usr/sbin/apache2 (or whatever you might have in its place), so just run:
$ /usr/sbin/apache2 -V
It will tell us something like:
-D SERVER_CONFIG_FILE="/etc/apache2/apache2.conf"
So that’s where the config file is stored. Open it with:
$ sudo nano /etc/apache2/apache2.conf
and add the lines we mentioned above (actally, don’t copy them from here, as they might be slightly different in your case)
LoadModule passenger_module /home/alex/.rvm/gems/ruby-1.9.3-p392/gems/passenger-3.0.19/ext/apache2/mod_passenger.so PassengerRoot /home/alex/.rvm/gems/ruby-1.9.3-p392/gems/passenger-3.0.19 PassengerRuby /home/alex/.rvm/wrappers/ruby-1.9.3-p392/ruby
Then, restart the server
$ sudo /etc/init.d/apache2 restart
At some point, Passenger will also tell us about how to change the Apache configuration to host our apps, a useful snippet of information actually, here it is for future reference.
Suppose you have a Rails application in /somewhere. Add a virtual host to your Apache configuration file and set its DocumentRoot to /somewhere/public: ServerName www.yourhost.com # !!! Be sure to point DocumentRoot to 'public'! DocumentRoot /somewhere/public # This relaxes Apache security settings. AllowOverride all # MultiViews must be turned off. Options -MultiViews
Let’s type in terminal:
sudo apt-get install mysql-server mysql-client sudo apt-get install php5 sudo apt-get install phpmyadmin
MySql will require you to choose a master password, so choose one when prompted.
PhpMyAdmin will also prompt you to choose some options (choose the default) and a password (choose whatever you like), plus the MySql password you chose above… to make it easier, I choose them to be the same 🙂
To test that our php is working, create a file using nano editor, like so:
$ sudo nano /var/www/phpinfo.php
and in the file, write:
Now visit the page, typing something like this (example Ip address, replace with yours) in your browser address bar: 102.192.194.195/phpinfo.php. It should work, hopefully. If it does, try your luck with your-ip-address-here/phpmyadmin, again it should work. In case it does not and you get a “Page not found” kind of error, it’s because we have to tell Apache where to find PhpMyAdmin, so this should be fixed by the following command, which copies a configuration from PhpMyAdmin to Apache itself.
$ sudo cp /etc/phpmyadmin/apache.conf /etc/apache2/conf.d
now restart apèache, try again with your-ip-address-here/phpmyadmin, it should work!