I run a small but fairly active Web site from a home server, as was commonly done back in the early days of the World Wide Web. What started as a learning project soon grew to be my primary hobby. It takes a bit of knowledge of Linux systems, various open sourced applications, and how the Internet works to start a Web site from scratch. Here are some of the applications and tools that help me stay on top of things.
A stable and reliable operating system is the foundation of any server. I used Gentoo Linux at first, but soon learned that a source-based distribution wasn't the best choice for a Web server with my system's limited resources. I switched to Debian GNU/Linux and have never looked back. It was easy to set up and has been even easier to maintain. As a bonus, my server runs better; memory and CPU management is much more efficient under Debian than I experienced with my homebrewed Gentoo.
Text editors are among the most fundamental applications on any system. If you do any work from the command line, a terminal-based editor is a must. Nano is extremely easy to use and always functions the same across any implementation or system. Having previously used Vi, I'm much happier with Nano.
Roaring Penguin (RP-PPPoE)
My Internet connection is a business-class Asymmetric Digital Subscriber Line from Bellsouth. I have a modem that syncs to the connection, but I need a Point-to-Point Protocol over Ethernet (PPPoE) client to actually log on. RP-PPPoE has never let me down. It is as easy to set up as it is to use; just run the setup script and answer some fill-in-the-blank questions. RP-PPPoE starts the connection at boot time and maintain it as long as the system is running. It's one of those carefree "set it and forget it" applications.
I built my network firewall using iptables. At first I was intimidated by the task, but I found a useful tutorial that I read from cover to cover. Once I understood what I was doing, I constructed the rules I felt I needed to manage the network traffic coming into and going out of my local network. iptables is one of the most important tools on my system.
Name servers allow Internet users to use Web site names such as www.linux.com instead of IP addresses like 220.127.116.11. Either you or your hosting service must provide naming services for your Web site in order for it to be found by its domain name. I use Bind as my name server. It allows a server to be integrated into the Web by informing secondary root servers of its IP address and domain name. I thoroughly read the documentation in order to configure Bind.
Apache, MySQL, and PHP
Along with Linux, these three packages make up the LAMP stack. Together they provide the foundation of my Web server.
Apache is the most frequently used Web server on the Internet, and for good reason. It offers a wide range of features along with stability while retaining a high level of security.
PHP is a scripting language that can be used in any number of applications. In my case, it is the language in which my content management software is written, where it not only supports the visual components, but also interacts with the database. I didn't actively choose PHP, but I couldn't run my Web site without it.
I use Drupal as the content management system for my site. I chose it primarily due to its appearance, but soon found out how powerful, customizable, and scalable it can be. Drupal is as appropriate for simple blogs as it is for high-traffic commercial sites. It is limited only by your knowledge of PHP. Since my PHP knowledge isn't advanced, my site is largely composed of included and third-party modules, of which there are many available. Recent Drupal versions have an installer, a non-destructive upgrade script, and improved performance. I recommend it to anyone who would like to create a Web site of any size.
I needed an easy and attractive way to display lots of screenshots. HTML would have been too tedious and slow to write. Gallery offers easy image uploading along with the appearance and functionality I want for my image collections. Like Drupal, its newest versions have improved functionality and performance.
Pure-FTPd is the easiest full-featured FTP server I have found. Many folks recommend Proftpd, but I couldn't get it to work in my early days. Now I stay with Pure-FTPd because it does all I require, and offers SFTP for those who need it.
I had always used Sendmail as my mail server until I changed distributions to Debian Etch, after which I could not get Sendmail to work anymore. A friend suggested I try Postfix, and my mail server headaches disappeared. Sendmail has drawbacks, and Postfix seems to address most of them. It was so easy to set up that I had it running in less than a minute.
OpenSSH and Samba
OpenSSH and Samba are among the first applications I set up after installing a new system. OpenSSH is an open source secure shell server. I use it to log in to and work on my server from other machines. For me it offers convenience; for many others with remote servers, it could be the only pathway to root access.
I use Samba to transfer files between local machines. Samba was initially written to enable Linux and Windows clients to share files, but it's convenient for Linux-to-Linux sharing as well.
Setting up a Web site from scratch can seem overwhelming at first. It wasn't something I accomplished overnight the first time, but it afforded me the opportunity to learn many new things. Much of what I learned will be helpful even if I choose to move my site to a hosting company.