Intro to hosting on a VPS

Why and What is a VPS

NOTE: these are just some notes from a little tutorial I ran, don't rely on this as being complete

What?

  • a virtualized "slice" of a fullsize server
    • Performance depends on disk speed and overprovisioning of CPU resources
  • a small free standing server

Why?

  • Pros
    • Managing it yourself
    • Cheap, between $5 & $20/month
    • potential for higher performance and scalability
    • host many low-traffic sites on one machine
    • freedom to choose your own "stack"
    • Your web performance is not effected (as much) by overloading of shared hosting.
    • Run your own monitoring
    • Accessing your own logs - privacy, privacy, privacy
    • Learning experience, how does the underlying technology work? Debugging, whats wrong with your code/app
  • Cons
    • Managing it yourself
    • You, and you alone are responsibe for backups
    • You, and you alone are responsibe for security
    • You, and you alone are responsibe for uptime

VPS providers

Linux command line basics

# make dir
mkdir foo

# Change directory
cd foo

# Whats my current directory?
pwd

# 'list' all files in the current directory
ls /var/tmp

# create an empty file
touch somefile.txt

# edit a file, (add a few lines of random text into it)
nano somefile.txt

# print the last few lines from a file
tail somefile.txt

# copy a file to another place
cp somefile.txt someotherfile.txt

# delete a file
rm somefile.txt

# move or rename a file
mv someotherfile.txt somefile.txt

Add user for security

For security reasone we want to prevent the root users from allowing to log in over ssh, therefore we will create a new users, grant him sudo privileges and reconfigure sshd

# add new user
useradd -d /home/madmaze -m -s /bin/bash madmaze 

# give it a password
passwd madmaze

# give the user sudo permissions
usermod -a -G sudo madmaze

# edit /etc/ssh/sshd_config
PermitRootLogin no
AllowUsers madmaze

# restart SSH after changing settings
service ssh restart

# test that you cant log in as root

Installing the basics (LAMP)

LAMP = Linux Apache MySQL PHP

# Update/upgrade
sudo apt-get update
sudo apt-get upgrade

# Installing Apache
sudo apt-get install apache2

# test apache at http://localhost

# Installing PHP
sudo apt-get install php5 libapache2-mod-php5

# test php is working

# Installing mysql
sudo apt-get install mysql-server php5-mysql

# restart apache
sudo service apache2 restart

# test php is working with mysql

Installing wordpress

# download WP
cd /var/www
sudo wget http://wordpress.org/latest.tar.gz

# unpack wordpress
sudo tar xvf latest.tar.gz

# setup MySQL database user

#log into mysql
mysql -u root -p

#create new user
create user 'dbuser'@'localhost' identified by 'somepass';
create database wpdatabase;
grant all privileges on wpdatabase.* to 'dbuser'@'localhost';

# allow wp installer to write to wp-config.php
chmod 777 wp-config.php

# run the wp installer
<domain>/wordpress/wp-admin/install.php

Technologies to choose from:

  • Webserver
    • Apache
    • lighttpd
  • Database
    • mysql
    • sqlite
    • postgres
    • etc etc etc...
  • php
  • monitoring
    • vnstat
    • nmon
  • Connection Methods
    • ssh
    • scp
    • rsync
    • sftp

Configuration

  • Single Server Configuration
    • point DNS/Domain at your IP address
  • Virtual hosts (multiple domains on one server)

Securing the VPS

  • ssh password
    • ssh keys
  • fail2ban

backing up

  • rdiff-backup

monitoring

  • nagios
  • monitor.us