The guide assumes some familiarity with Linux functionality and general Linux/UNIX setup procedure (although not very detailed). Fully functional brain is also required for some stages of the procedure. All setup would be done manually (without the use of linuxconf, Webmin or other tools). Not that those are bad or that there is anything wrong with them. The reasons for that are: 1) it is comparatively hard to give step by step directions that produce predictable results as these tools pretend they are intelligent and "know better" (also known as "Windows syndrome") 2) layout of tools changes with time and is different in some distributions 3) manual setup gives better understanding of system works (not that it is always required though) 4)some tools allow only limited configuration of Linux system or do not keep up with updated features of services they try to configure.
I should add, that another solution seems to be very promising. It is virtfs developed by Afra Ahmad. Its main part is a perl script so it does not suffer from being a "black box". It will automatically configure all virtual services in a highly customizable fashion.
It is based on taking advantage of the chroot environment. A separate and smaller filesystem is created for each virtual server, and when a service is requested, the main server will chroot to the desired virtual server.
This method may take up more disk space, but it is much more flexible, especially when dealing with the services. For example, it is possible to have two different email accounts [email protected] and [email protected] (as you are dealing with two different passwd files). It might be essential for a bigger hosting site.
For more information please visit the Virtfs page at http://www.prongs.org/virtfs.
While many improvements are possible to the setup described in this HOWTO they might be described in later editions of this document - I just outline one possible way (accidentally, the one I used). The writeup is aimed at RedHat Linux, but with trivial changes can be used on any modern Linux distribution. The resulting configuration loosely follows the setup of some particular machines built by the author.