February 2009


This is part eight of our series on configuring a Slicehost slice.  We are finally at the last part of this series.  Here goes!

Step Eight – Install WordPress via Subversion

Install Subversion

Using Subversion is a much easier way to install Wordpress.  Install Subversion with this command:

sudo aptitude install subversion

Install WordPress

Move your working directory to the root of the directory that you want to install Wordpress in:

cd /home/<username>/public_html/<domain.name>/public

Install the latest stable version of Wordpress:

svn co http://svn.automattic.com/wordpress/tags/2.7 .

We’re done.  Now you can connect to your website and walk through the standard Wordpress installation.

Conclusion

I hope that you found this to be a useful series.  I have put this entire series into a PDF document (along with a few extras) so that you can have a nice printed version available.

Basic Slicehost Slice Setup Series List:

  1. Part 1 - Updating Ubuntu
  2. Part 2 - Configure iptables
  3. Part 3 - Install and Configure OpenSSH
  4. Part 4 - Install nginx Web Server
  5. Part 5 - Installing MySQL
  6. Part 6 - Installing PHP5 with fastcgi
  7. Part 7 - Create the Virtual Host Website
  8. Part 8 - Install WordPress via Subversion

Similar Posts:

If you found this post useful, why don't you buy me a cup of coffee to show your gratitude?

This is part seven of our series on configuring a Slicehost slice.  Today is going to be another heavy day.

Step Seven – Create the Website

Create Directory Structure

mkdir -p /home/<username>/public_html/<domain.name>/{public,private,log,backup}

where <username> is your username in the VPS and <domain.name> is the name of the domain that you are creating.

Create Default Index Page

In /home/<username>/public_html/<domain.name>/public/, create an index.php file as a placeholder.  I generally create the standard phpinfo page:

<?php
phpinfo();
?>

Create the vhost File

Open /etc/nginx/sites-available/<domain.name> in a text editor as root:

sudo nano /etc/nginx/sites-available/<domain.name>

where <domain.name> is the website that you are creating.

Add the following as the content, replacing <domain.name> and <username> accordingly:

server {

        listen   80;
        server_name <domain.name>;
    #rewrite ^/(.*) http://www.<domain.name> permanent;

        access_log /home/<username>/public_html/<domain.name>/log/access.log;
        error_log /home/<username>/public_html/<domain.name>/log/error.log;

        location / {

                root   /home/<username>/public_html/<domain.name>/public/;
                index  index.php;
                # wordpress fancy rewrites
                        if (-f $request_filename) {
                            break;
                        }
                        if (-d $request_filename) {
                            break;
                        }
                        rewrite ^(.+)$ /index.php?q=$1 last;

                }

        location ~ .*\.php[345]?$ {
                include /etc/nginx/fcgi.conf;
                fastcgi_pass    127.0.0.1:10005;
                fastcgi_index   index.php;
        fastcgi_param SCRIPT_FILENAME /home/<username>/public_html/<domain.name>/public$fastcgi_script_name;
                }

           }


server {

        listen   80;
        server_name www.<domain.name>;

        access_log /home/<username>/public_html/<domain.name>/log/access.log;
        error_log /home/<username>/public_html/<domain.name>/log/error.log;

        location / {

        root   /home/<username>/public_html/<domain.name>/public/;
                index  index.php;
        # wordpress fancy rewrites
            if (-f $request_filename) {
                    break;
                }
                if (-d $request_filename) {
                    break;
                }
                rewrite ^(.+)$ /index.php?q=$1 last;

                }

    location ~ .*\.php[345]?$ {
        include    /etc/nginx/fcgi.conf;
        fastcgi_pass    127.0.0.1:10005;
        fastcgi_index    index.php;
        fastcgi_param SCRIPT_FILENAME /home/<username>/public_html/<domain.name>/public$fastcgi_script_name;
        }

            }

Enable the Website

sudo ln -s /etc/nginx/sites-available/<domain.name> /etc/nginx/sites-enabled/<domain.name>

Restart nginx

sudo /etc/init.d/nginx stop
sudo /etc/init.d/nginx start

Part 8

Tomrrow is the final installment on this series. We are finally going to get Wordpress up and running.

Basic Slicehost Slice Setup Series List:

  1. Part 1 - Updating Ubuntu
  2. Part 2 - Configure iptables
  3. Part 3 - Install and Configure OpenSSH
  4. Part 4 - Install nginx Web Server
  5. Part 5 - Installing MySQL
  6. Part 6 - Installing PHP5 with fastcgi
  7. Part 7 - Create the Virtual Host Website
  8. Part 8 - Install WordPress via Subversion

Related articles:

Reblog this post [with Zemanta]

Similar Posts:

If you found this post useful, why don't you buy me a cup of coffee to show your gratitude?

This is part six of our series on configuring a Slicehost slice. Today, we get into the meat of things. Put on your propeller hat because things get pretty geeky!

Step Six – Install PHP5 with fastcgi

Install PHP5

sudo aptitude -y install php5-common php5-cgi php5-mysql php5-cli php5-gd

Create /etc/init.d/php-fastcgi

sudo nano /etc/init.d/php-fastcgi

and add this for its content:

#! /bin/sh
### BEGIN INIT INFO
# Provides: php-fastcgi
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start and stop php-cgi in external FASTCGI mode
# Description: Start and stop php-cgi in external FASTCGI mode
### END INIT INFO

# Do NOT "set -e"

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="php-cgi in external FASTCGI mode"
NAME=php-fastcgi
DAEMON=/usr/bin/php-cgi
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
PHP_CONFIG_FILE=/etc/php5/cgi/php.ini

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

# If the daemon is not enabled, give the user a warning and then exit,
# unless we are stopping the daemon
if [ "$START" != "yes" -a "$1" != "stop" ]; then
log_warning_msg "To enable $NAME, edit /etc/default/$NAME and set START=yes"
exit 0
fi

# Process configuration
export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS
DAEMON_ARGS="-q -b $FCGI_HOST:$FCGI_PORT -c $PHP_CONFIG_FILE"

do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
|| return 1
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON \
--background --make-pidfile --chuid $EXEC_AS_USER --startas $DAEMON -- \
$DAEMON_ARGS \
|| return 2
}

do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE > /dev/null # --name $DAEMON
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
# Wait for children to finish too if this is a daemon that forks
# and if the daemon is only ever run from this initscript.
# If the above conditions are not satisfied then add some other code
# that waits for the process to drop all resources that could be
# needed by services started subsequently. A last resort is to
# sleep for some time.
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
# Many daemons don’t delete their pidfiles when they exit.
rm -f $PIDFILE
return "$RETVAL"
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac

Make /etc/init.d/php-fastcgi executable:

sudo chmod 755 /etc/init.d/php-fastcgi

Create /etc/default/php-fastcgi

sudo nano /etc/default/php-fastcgi

and add this for its content:

START=yes

# Which user runs PHP? (default: www-data)

EXEC_AS_USER=www-data

# Host and TCP port for FASTCGI-Listener (default: localhost:9000)

FCGI_HOST=localhost
FCGI_PORT=10005

# Environment variables, which are processed by PHP

PHP_FCGI_CHILDREN=4
PHP_FCGI_MAX_REQUESTS=1000

Create /etc/nginx/fcgi.conf

sudo nano /etc/nginx/fcgi.conf

and add this for its content:

fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;

Edit /etc/php5/cgi/php.ini to allow for each script to use up to 32 MB of RAM.

sudo nano /etc/php5/cgi/php.ini

Look for memory_limit = 16M and change is to 32M. Save the file.

Start the process:

sudo /etc/init.d/php-fastcgi start

Configure the process to start on reboot:

sudo update-rc.d php-fastcgi defaults

Restart nginx.

sudo /etc/init.d/nginx stop
sudo /etc/init.d/nginx start

We are now done for the day (Finally!)

Part 7

Tomorrow, we are going to create the virtual host website so that we actually have somewhere to put the site.

Basic Slicehost Slice Setup Series List:

  1. Part 1 - Updating Ubuntu
  2. Part 2 - Configure iptables
  3. Part 3 - Install and Configure OpenSSH
  4. Part 4 - Install nginx Web Server
  5. Part 5 - Installing MySQL
  6. Part 6 - Installing PHP5 with fastcgi
  7. Part 7 - Create the Virtual Host Website
  8. Part 8 - Install WordPress via Subversion

Similar Posts:

If you found this post useful, why don't you buy me a cup of coffee to show your gratitude?

Free Tech Support Voicemail With E-Mail Notification

Trackback or
Categories: From the Files of DCOT...
2 Comments
 

I am in the process right now of setting up volunteer technical support for my daughter’s school and our church.  One of the issues that we are having is that we need a number of people to provide technical support since they are all volunteers and can’t be on call full time.  This poses a real problem since the person who is experiencing technical problems is already frustrated.  They don’t want to be wasting their time trying to track down the person who is supposed to be on call! Also, for the volunteers who are not on call, they don’t want to be bothered by phone calls at work or when they are spending some precious time with their family. 

So, to relieve the situation, I came up with a way for the person requiring tech support to make one phone call, leave a voice message, and the voice message is then e-mailed to all the technical volunteers so that the person who is on call can respond to the problem.

And, the best part of it all?  I did it for free!  Here’s how you can do it as well.

Step 1 - Sign Up for iCall

The first part involves you getting an account with iCall.  I’m sure that there are other services out there like iCall that will give you free voicemail sent to your e-mail (feel free to leave a list in the comments).  I just used iCall.

In order to set up an account, you first need to download their software.  During the installation process, you will be given the opportunity to create a user account.  Once you create the account, log into the phone and get your extension number.  This will be near the top of the screen and will typically be a seven digit number.  You can also get your extension number by going to their website and logging in with the information that you provided.  Make sure that you write this number down because you will be needing it later.

Next, go to the iCall local access number page and find a number that is toll free for you.  While they do not have all of North America covered, they do cover 199 area codes which does serve a large part of the population.  Write this number down as well.

Step 2 - Create a Distribution E-Mail

Now that voicemail is set up, time to configure a distribution e-mail.  This is simply an e-mail address that will be redistributed to more than one person.  There are several different wsys to do this, depending on the type of mail system that you are using.  Since I am using GMail with Google Apps Standard, I will walk you through the process.

  1. Log into your Google Apps account and click on Manage this domain at the top of the page.
  2. Next, click on Users and groups on the top menu on the page.
  3. Under the Users and groups page, click on the Groups submenu
  4. Click on Create a new group
  5. Fill out the Create a new group form with the appropriate information.  For example:
    Group name: School Tech Support
    Group email address: schooltechsupport@dailycupoftech.com
    Group description: Tech support address for my daughter’s school
    Permission presets: Public
  6. Click on Create new group
  7. You can now add members to the distribution group.  Simply type in the e-mail addresses of all the tech volunteers that you would like to receive the e-mail messages in the Add new members field and click on the Add button.

You’re done step 2.  Now, whenever someone sends an e-mail to the group e-mail address that you created, then all of the members of the group will receive a copy.

Step 3 - Configure iCall to Forward Voicemail to the Group E-Mail

The next step is to set up iCall to forward any voicemail to the distribution group.  This is as simple as logging into your iCall account under My profile and changing the e-mail address from the e-mail address that you originally set to the distribution group e-mail address.

Step 4 - Give Out Your Support Number

Now that you have everything set up, all you need to do is give out the support number and extension that you recorded in step 1 and everyone in the distribution list will get a copy of the tech support voicemail as a WAV file.  Now, only the person who is on call has to respond to the e-mail and everyone else can just ignore it.

Step 5 - Increase Distribution Group Security (Optional)

Let’s say, for example, that somehow your tech support number and extension has gotten out and everyone and their dog is calling you.  Or, the e-mail address for the distribution list has gotten on a spam list and now you can’t find the tech support calls among all the offers for, shall we say, “enhancement products”. Well, you can help alleviate these issues by making a few changes to the distribution group.

  1. Add the phone numbers that you want to be able to leave messages for the group to the distribution group.  You do this by adding an e-mail address that is the phone number followed by @icall.com.  So, if you wanted to receive voicemails from (123) 555-1212, then you would add the e-mail address 1235551212@icall.com to the distribution group.
  2. Next, change the permissions on the distribution group from Public to Custom and set the Send email to the group options to include only Owners and Members.

Now, only voicemails from the specified phone numbers will get sent to the distribution group and only people who are members of the distriution group will be able to send e-mail via the distribution group.

Conclusion

This has the potential to be a very simple and easy to use solution for the end user (because, really, it is their opinion that counts in the end) that can make the life of the tech volunteer a lot easier.

Reblog this post [with Zemanta]
Similar Posts:

If you found this post useful, why don't you buy me a cup of coffee to show your gratitude?

Basic Slicehost Slice Setup Part 5 - Installing MySQL

Trackback or
Categories: WordPress, VPS, Blog, DIY, System Administration, Linux
1 Comment
 

This is part five of our series on configuring a Slicehost slice.  Another quick post today.

Step Five – Installing MySQL

sudo aptitude -y install mysql-server mysql-client libmysqlclient15-dev libmysql-ruby1.8

To not use innodb

sudo nano /etc/mysql/my.cnf

Then remove comment # from the skip-innodb line. Save the file.

That’s it!

Part 6

Tomorrow, we are going to get PHP with fastcgi up and running.

Basic Slicehost Slice Setup Series List:

  1. Part 1 - Updating Ubuntu
  2. Part 2 - Configure iptables
  3. Part 3 - Install and Configure OpenSSH
  4. Part 4 - Install nginx Web Server
  5. Part 5 - Installing MySQL
  6. Part 6 - Installing PHP5 with fastcgi
  7. Part 7 - Create the Virtual Host Website
  8. Part 8 - Install WordPress via Subversion

Related articles:

Similar Posts:

If you found this post useful, why don't you buy me a cup of coffee to show your gratitude?

« Previous PageNext Page »