Web Site Management

In developing a theme for this blog, I have been building around the different technologies & techniques that contribute to best practice web site management. Here I will outline the various areas that need to be addressed when managing a web site, and as I develop posts that address them, I will link to them.

Please feel free to comment and contribute other topical areas of interest that you feel should be covered under this umbrella of web site management.

Domain Names
The name used for a web site as it appears in a browser address. Buying, Selling, and managing.
Domain Name Services (DNS)
The service that translates a domain name & web host name into an IP number in order to be accessible over the Internet. Management, services & doing your own.
Web Hosting
The server that contains the content of a web site. Shared, Dedicated, Managed and Grid.
Email Hosting
Commonly provided with web hosting in order to use the same domain name for email. Same host or dedicated provider. Mailing list management.
Content Management
How content of the site is updated and edited. Static files, blog systems, portals, custom content management systems (CMS).
Site Monitoring
Proving to your clients your reliability requires records and third-party validation. Service monitoring, outage tracking & alerting of problems to responsible staff.
Logging & Statistics
Who is visiting your site. Analysis of your server logs gives a lot of information that is useful to marketers, as well as for optimizing your site.
Search Engine Optimization & Marketing (SEO / SEM)
An amalgamation of the techniques above, including log analysis since that tells you how people are getting to your site & content management since you can optimize your results by how you write your content.

Selling a Domain

No, not this one! But, ChattanoogaCountryHomes.com is for sale.

I’m doing an experiment using Sedo, a domain parking & selling service. I was looking for a means to dispose of ChattanoogaCountryHomes.com, since I’m not actively selling real estate in the Chattanooga area, and I had registered the domain for 5+ years (expires in 2010). I am a licensed real estate agent in Tennessee, but my next venture in real estate will not be here.

After a little research I found Sedo was one of the market leaders in both domain resale & ‘parking for profit.’ I hadn’t thought of doing that in the past, but I had certainly run across pages like that. So, I decided to give it a try. It’s simple as delegating your DNS name servers to point at their servers and filling out some information. They produce an automated page that not only has your offer to sell on it, but related Google Adsense ads that produce income for you as well as Sedo. They also provide domain transfer & escrow services.

If you’ve got a domain you would like to sell, try Sedo… it’s free! You only pay a 10% commission on the sale as long as you park the site with them as well. If you don’t, there is a minimum commission applied of $50.

I’ll post in the future on how my results are. If you have had previous experience selling a domain, with Sedo or someone else, please leave a comment describing your experience.

Search the largest database for used domain names
powered by sedo.com

Managing Your Own Web DNS Services

In one of my first posts I promised to describe how I was able to transfer my domain name from one web host to another with minimal cut-over time, and essentially no waiting for DNS propagation. The key is I did not have to wait for DNS changes to propagate across the Internet at all–the changes only had to occur on my own DNS server. If you were to purchase a new domain name, then you would have propagation delay as the new name is discovered.

I strongly believe in the separation of DNS services and web hosting services. This keeps me from having any issues with my web host holding me ‘hostage’ for some reason because they have control of my domain name. While you may legally own your domain name, unless you manage the DNS services, you don’t have full control. While many web hosts will provide this service to you at no extra cost, I decided long ago I was willing to pay a little more to get those services from a third party to protect myself.

I use the DNS services of Dynamic Network Services, Inc. They are a DNS specialist. They do not provide web hosting services! I initially discovered them while searching for a means of getting a stable DNS name for a dynamic IP assigned by my ISP in order to remotely access a server at home. After I realized all the services they provided, and what insulation it would give me from my web host, I moved management of all my domains there. At the time, they did not do domain registration, and I simply went to my domain registrar and designated the Name Servers hosted by DynDNS as mine. From then on, I used their Custom DNS services to manage my hosts.

While most people might be afraid of managing their own DNS services, DynDNS makes it very simple. Their FAQ pages are extensive and supply all the information you need. I’ve been able to manage all my needs without contacting their support staff, and I’m not a DNS expert–though I try to play one in the movies. 😉 Just kidding!

Back to how I accomplished the move so easy… Since I did not have to add a new domain and change NS records (name server IPs), I only had to add a new host name (blog) to my cdchase.com domain. I will eventually move this site under my main www site, but I have not decided how I’m going to integrate the old content and new. As I’ve stated before, the design is still in Alpha mode–subject to change at any time.

While Media Temple aka (mt) is my host, and they stated that I would not have a dedicated IP for my domain, but that it would be a named virtual host, and they pointed me at the Apache documentation, I knew exactly what I could do! While the IP might not be dedicated to my web hosting server, it does respond to a specific IP, and the name used is what tells it to use one virtual server or another. That IP is what is behind the access domain that they provide–a generic host name that is under their domain control, and you can use at any time–even before DNS propagates if you are stuck waitng for it. By looking up the IP related to it using ‘dig‘ on Linux, I was able to create my A record DNS entry pointing my new host at it’s appropriate IP. Once I did that, it was immediately available!

Why immediately you ask? Because when you provide your browser a a fully qualified domain name like blog.cdchase.com, it has to look up the IP for it. Where it looks is the server that controls the domain above, in this case cdchase.com. Since that domain had been in existence for years, it simply went there, and got the new host IP and I was in business!

Note, as soon as I had the web pages copied to the new site using the generic access domain, and I saw how well things were going, I changed the DNS record for www.cdchase.com. That took up to 12 hours to propagate depending on if you had been to the site before. 12 hours is the TTL or time-to-live setting on my DNS entries, they time out after that time and a client, such as a web browser, will normally re-request them and get the updated IP. Same goes for my MX (mail) entries, 12 hours to time-out and I was in business on my new host. Time now to cancel my old service…

Once you have all the changes you need made, you should test your DNS too… you might want to do it before you change to see how good your web hosting provider’s configuration is! Try DNS Stuff, lots of tools to help testing and trouble shooting.

If I’ve haven’t sold you on the power of separating DNS hosting from web hosting, you can also add on the additional redundancy they provide, distributed world-wide. DynDNS has five DNS hosting facilities spread around the world for redundancy and isolation from network break-downs, as well as improving response times in their related regions. I also use their Mail Hop Outbound service to provide secure outbound SMTP services at home, but more importantly when I’m traveling. If I’m using some hot spot some place, I don’t always have access to their SMTP mail servers information for routing mail, besides the pain it is to find & setup every time. With Mail Hop Outbound, all my mail uses the Mail Hop server. Very convenient and secure. Since I control my DNS, I have also added an SPF record to help support mail security.

If you have specific questions, I would be happy to answer them, just leave a comment! If you are interested in learning more about DNS, get the O’Reilly guide: DNS and BIND (5th Edition) from Amazon.

Using Subversion for a Web Site – Part 2

I need to clarify one thing from my earlier post. I demonstrated how to create a subversion repository on your local computer. Note, this was for demonstration purposes only. To get maximum advantage from using a subversion repository, it needs to be located on a networked server that all site developers can access. OK, you are thinking, “I’m only one person, why do I need to do it this way?” Easy answer: Backup! Not to mention the advantages of using the entire concept of source code management to develop your site.

So, if your repository is on a different server, how do you work with it on a daily basis? That’s what I’m going to describe today. Keep the two locations in mind as the remote server Repository, and the local Working Copy.

Last time when we parted, we had just checked out a local copy from the repository. (Just imagine that repository was remote rather than local to your computer.) Let’s pretend you quit at that point for the day. This is the point you want to be at whenever you quit working–synchronized with the repository. You should never quit working without doing an UPDATE & COMMIT of all of your work. We’ll cover those details momentarily. By doing this, you will always have a backup of your work, as well as have it stored remotely in case you edit from multiple computers and/or locations. For example, I might do some work at my office, and then come home and feel like doing a little more… or end up wanting to work from home the next day. Having the files in the repository allows me access to the current files from wherever I choose. Just connect from the alternate location, and UPDATE.

Update

OK, what exactly is UPDATE? With the UPDATE function subversion compares the files you currently have locally, with the remote copy on the server and downloads files from the server, if they are newer. Note, this is one-way updating. If you have edited any of your files and want to upload them, you do a COMMIT–we’ll cover that in a minute. During an UPDATE there are a few possibilities:

  • No changes–your local files are already up-to-date with the server
  • Newer files on server–none of your copies of the files have been edited locally
  • Newer files on server–some of the same changed files have been edited locally also, but in unrelated ways
  • Newer files on server–changes in files are in the same area as changes made locally

No Changes

While this may seem an obvious answer, it is important to recognize you are at this state. Especially if you are in a multi-developer environment. In this case, no changes will be made either on the server or locally, and the current Revision Number will be displayed.

Newer Files in Repository, No Working Copy Files Changed

In this case, the newer files on the server will be copied to your local working copy. You will see a list of the files that have been updated, as well as what the status of each file is–note each of these possibilities we are covering occur on an individual file basis, so what happens per file might be different. The current Revision number will be updated.

Newer Files in Repository, Unrelated Working Copy Changes

The important thing to ask in this case is, what is an ‘unrelated change’? The key here is that you may have edited a file in one area, say lines #5-10. But, the changes in the repository file–compared to a common base–are in an entirely unrelated area of the file, say lines #50-55. You can probably see that as long as each individual change is in entirely separate areas of the file, with no overlapping, that it is possible to merge the changes without much thought. Note, even if lines are inserted in one location or the other, the context of the surrounding lines identifies where they are in relationship to the base file.

It is important to note that this merging of changes can only be done with text-based files. And while binary files, such as images, can be maintained in subversion, they cannot be merged.

In the no conflict case such as this, subversion will automatically merge the files for you, updating your local copy. In the list of files with changes you receive at the end of the update, you will see a code G next to them indicating a successful automated merge.

Newer Files in Repository, Conflicting Working Copy Changes

As you may have guessed, in this case subversion can’t automate the change. But, it helps! You will be advised of the Conflict, and several copies of the file in question will be put in your local working copy. Your original file will be renamed: filename.mine, there will be two other files with a Revision number appended: filename.r<old rev #> and filename.r<new rev #>. The old rev number is the one you had before you started making changes, the new on is from the server copy. The original file will contain special marks in the file showing both revisions to enable you to compare and figure out which changes should be used, or if you can manually merge the two changes. There are several convenient tools available to ease the process of this editing.

Once you have edited the original filename to contain the changes you really want, you should do an UPDATE (to make sure no more changes showed up while you were working on it!) and then a RESOLVE in order to let the repository know the conflict has been resolved and which changes to keep. Then COMMIT your changes as usual–see below.

Commit

Commit is simply the process of uploading your changes to the repository. Remember, as mentioned above, if you have been working for any significant period of time since your last commit and your are in a multi-user environment, do an Update as described above first before doing a Commit. It will also be easier to merge changes if you do an Update on a regular basis to get new changes from the repository even if you are not ready to commit your changes.

When a commit is done, all changed files are updated in one batch. So, best practice is to keep related changes together. If you have to modify a form to be displayed and update it’s related processing code in a separate file, make the changes and commit them together. Every commit will require a Log message, so it makes it easy to describe the related changes and see them together when looking at historical changes.

Summary

To wrap things up at this point, I want to point out a couple of resources you can use for the details I have not include here, but will in future installments. The easiest, and free, resource is the online version of the Subversion Book. Several versions are available, including a download PDF. If you are like me, you may like to have a paper reference of it, and the authors would appreciate the purchase of it as well, it is published by O’Reilly Media and is available from Amazon: Version Control with Subversion.

Another good book is the one I use personally, and is part of the Pragmatic Starter Kit Series: Pragmatic Version Control: Using Subversion (The Pragmatic Starter Kit Series)(2nd Edition). This book is a little over 200 pages, and I was able to read it cover-to-cover in a little over a week in my spare moments. Many great ‘pragmatic concepts’ to be learned and applied in the future.

Well, that about wraps it up today. Next time, I will get into explicit demonstrations of these steps. I’ll give you the command line techniques and demonstrations, as well as snapshots of doing the same in TortoiseSVN. Stay tuned!

Managing Web Site Content with Subversion

As I have previously mentioned, I am a big fan of managing code changes with Subversion. Here I’m going to describe the process of creating your own local repository for managing changes. Think of Subversion as you own personal time machine for your content.

My basic setup will be to have the repository (where subversion stores all of your changes) on a secondary partition on my laptop’s hard drive. While I had considered having it remotely on my server, I want to have it local so I can manage my content when I am off-line traveling. I will also use backup routines to have copies on external drives. While I prefer to work in Linux, I also work in windows, so I will describe the setup from a windows point-of-view. However, the files for the repository are on a shared partition of my hard drive so I can access the repository not matter which OS I’m using at the moment.

The basics steps are these:

  1. Install Subversion & optionally, TortoiseSVN for windows
  2. Create directory to store repository
  3. Create repository with svnadmin
  4. Import web project
  5. Checkout working copy of web project

Install Subversion & optionally, TortoiseSVN for windows

Subversion & TortoiseSVN are available from the Open Source projects at Tigris.org:

Follow the link to the individual download pages and download the current version for your OS. Install in the usual manner! Note, TorotoiseSVN requires a reboot since it integrates with windows explorer.

Create directory to store repository

Hopefully, if you know dos, this will be familiar. Or maybe it won’t if you have never used the command line under WinXP. Since subversion itself is a command line program, creating the repository will be at the command line. so let’s start by using the command line to create the needed new directory. Click Start -> Run… (or Windows-R from keyboard) and type cmdand press Enter. A new window with white text on a black background will open with a prompt showing your current directory. Decide where on your drive, or drives, you would like to locate the repository. Then create the directory with md:

C:> md e:svn-repo

Substitute your own drive letter instead of e: and path of your choice instead of svn-repo.

Create repository with svnadmin

Now that you have a directory to use, we use svnadmin to turn it into a repository for use by subversion.

C:>svnadmin create e:svn-repo

Let’s see what it created for you:

Directory of e:svn-repo

04/01/2007  05:53 PM    <DIR>          .
04/01/2007  05:53 PM    <DIR>          ..
04/01/2007  06:20 PM    <DIR>          dav
04/01/2007  06:20 PM    <DIR>          locks
04/01/2007  06:20 PM    <DIR>          hooks
04/01/2007  06:20 PM    <DIR>          conf
04/01/2007  06:20 PM               234 README.txt
04/01/2007  06:20 PM    <DIR>          db
04/01/2007  06:20 PM                 2 format

Don’t worry anything about the details now, but I just wanted to show you that subversion is doing a lot of work for you behind the scenes.

Import web project

Next step is to import that web site you have been working so hard on! Since we have been working at the command line, I will continue here with that technique. Then I will show you the easy way with TortoiseSVN–a graphical tool to access the power of subversion from windows explorer.

First, locate the directory where you current web site files exist on your drive. If you have multiple sites, I will suggest that you import them as separate ‘projects’ in subversion. cd to the top-level directory you want to import–all subdirectories will be imported also. You should clean them up before importing, removing any test or temporary files you do not want in the repository.

C:>cd htmlcdchase-blog

C:htmlcdChase-blog>

Next, you will use svn import to pull in all of the content to the repository. Last chance to clean up the directory and sub-folders before importing! Notice the use of -m “Importing blog.cdchase.com project” to supply a log comment. All changes to a subversion repository require a comment describing the change.

C:htmlcdChase-blog>svn import -m "Importing blog.cdchase.com project" .  
                              file:///e:/svn-repo/cdchase-blog/trunk

You will see all of your files scroll by as they are imported. Eventually, you will get to the last line:

Committed revision 1.

Congratulations! You now have your first project in the subversion repository!

Before we move on, let me point out two items in the import command above. First, the ‘.’ (dot or period): it is how you refer to the current directory as a shortcut. If you were not already in the directory you wanted to import, you could explicitly provide it instead of using the dot. Secondly, the format of the destination: file:///e:/svn-repo/cdchase-blog/trunk. This is the URL format for referencing a local file location. The file:/// replaces the use of http://hostname/ as in a web browser. The remainder is the path to the repository, including the desired project name, cdchase-blog, in my case; and the branch you want to import it to, trunk. More on the use of ‘trunk’ in a future post. The ” at the end of the first line is just to indicated that this line is continued on the next line–don’t type this in windows! The entire command should be one line, without the ”. (Linux users may recognize this as the standard continuation character.)

Importing with TortoiseSVN

As promised, doing the same import function with TortoiseSVN is as simple as right-clicking on the folder you wish to import, and selecting TortoiseSVN -> Import…

(image no longer available)

and supplying the destination path and log message:

(image no longer available)

Once you click ‘OK’ your files will be submitted as in the command line version.

Checkout working copy of web project

Finally, in order to actually use the files from the repository, you must ‘check out’ the files. This must be done to a new directory, so if you want to use the same directory name you imported from, rename that directory first.

C:html>rename cdchase-blog cdchase-blog-old

To do the ‘checkout’ or co:

C:html>svn co file:///e:/svn-repo/cdchase-blog/trunk cdchase-blog

When it is complete, you will see:

Checked out revision 1.

Congratulations! Your files are now under version control!

Tomorrow, we will go deeper into how you use Subversion on a daily use basis.

Links of Interest to Web Programmers

I was catching up on reading my favorite blogs this morning–see my blogroll on the lower right of this page–and discovered that I was sending several links to my boss that might be of interest to my readers here. So, I’m going to share them with you as well, and my boss will get less email. Everyone wins!

As I come across other interesting links, I’ll be sharing… Be sure to stay tuned!

K2 Theme Updated to SVN

I figured out that the last released version of the K2 theme I’m using, doesn’t support WordPress 2.1.2 very well. Little things here and there weren’t quite right. I downloaded r323 from the K2 subversion repository, and it fixes the obvious problems. I’m also getting reacquainted with configuring K2’s options. However, at the moment, I can’t get the side bar category module to show the blogroll. I know it’s just a matter of selecting the ‘blogroll’ category, but I can’t find it. Hmmm, OK, that’s true. However, I just realized while typing this that I’ve been confusing that function with the ‘category list’ module. That’s obviously not the right module to customize! Blogroll is a category! I guess the module for a blogroll hasn’t been developed. I’ll do a little more hunting, then maybe I’ll make my own…

If you are not familiar with using Subversion to get the most up-to-date code, I’ll be doing a follow-up entry describing the process. Right now, I’m focusing on getting all the options in place, and developing the design for the site. Then I can get into more detail on the how-to!

Update: After the above realization, went back and look at the blogroll management in WordPress and realized while there is a relationship to categories, they actually call them ‘links’. In the K2 modules, there is one for ‘link list’… so, adding that did the job!

Smooth Sailing at Media Temple

I was getting my feeds redirected through FeedBurner tonight & claiming my blog over at Technorati and did a quick search on ‘Media Temple’ and came across a post at Derek Davis’ The Journal that I commented on about all the fuss over Media Temple. Neither of us understand it. As I mentioned previously, I’m giving them the benefit of the doubt. I forgot to mention it in my post at Derek’s, but I think that it is just a case of the few that have the problems being ‘louder’ and speaking out. I can understand that to a certain extent, but I’m more about keeping my problems quiet, not blaming anyone, and just working it out. That’s how I ended up at (mt)! My previous host, who will rename nameless as they did serve me well for years, just wasn’t offering me the tools and support I wanted. So, I started searching for someone that could do so for a reasonable price. Media Temple met my qualifications, and then some. See my comments at Derek’s again regarding their world-class data center.

Locked Out of WordPress

Tried to write a post last night… but, could not get logged in for the life of me! However, after a good night’s sleep and a day of work, I came at the problem with a fresh outlook. I began with the WordPress Codex and thankfully I shortly found a solution for the password issue that wasn’t. The problem was with TeaTimer in SpyBot S&D. SpyBot has always done good by me, but I guess I’ll have to go without TeaTimer. This forum post from Christine Evron led me to try turning off TeaTimer.

Now, I can write the post I intended to last night!

24 Hours on Media Temple

Last night I finally made the move to a new, more reliable and supportive web host. Media Temple (mt). After a lot of research and watching them iron out their difficulties with the Grid Server (gs)–which I’m using for this site–I am optimistic about the new world. We all know that grid technology for the web is new, and there have been pains in getting it implemented at (mt), but I’m giving them a chance despite all the negative things I’ve read.

I’m an optimist. I like to read good things about people and companies. Media Temple has been praised for their customer support, and their data center is nothing less than world-class. And they are offering us web developers the opportunity to use it for a song! Here’s my take: If you are dependent on a web site for mission critical systems, then it should be a dedicated server, or Dedicated-Virtual (dv) in Media Temple’s offerings. Those of us living on The Grid are just incubator projects… When you grow up, you get a real server. 🙂

Here’s my experience of the past 24 hours:

  • 6:40 pm – Requested account
  • 6:45 pm – Received Service Activation email
  • Added A record entry for www in my DNS name servers to point to my Grid Server Access Domain (I left primary host address, cdchase.com, pointing at old site since that is the address I advertise) – site available immediately!
  • Added alternate A record entries to my DNS to allow access to old site under new subdomain temporarily
  • Pointed my MX entry to mail server at (mt)
  • 4:30 am – DNS had timed out for old MX entry, so mail was being delivered to (mt)!
  • Copied web site content from old site to new
  • Changed A record for cdchase.com to new site, updated all other A records to CNAMEs for neatness
  • Sent a few test emails & updated SPF entry in DNS
  • Since all was working, I replaced several A records pointing to the common address at Media Temple with CNAME records
  • Done! Nobody new the difference that the site was in transistion!

OK, OK… I had a little benefit from managing my own DNS off-site. 🙂

I will follow-up this post with more details on how that works in coordination with a name-based hosting site like The Grid. Also more details on using SPF records to help prevent SPAM from your domain.