jump to navigation

Build a Dynamic Web Serving Platform with FreeBSD 16 May, 2006

Posted by netlog in OpenBSD.

FreeBSD and its ports collection let you build a secure solution for hosting dynamic Web pages—without any out-of-pocket expense. Follow this step-by-step guide to installing and testing an open source solution based on Apache-modSSL, MySQL, and PHP. You'll serve dynamic Web pages quickly, reliably, securely, and efficiently from your own cost-free platform.
Looking for a secure solution for hosting dynamic Web pages but don't have much money to implement it? Use FreeBSD and its ports collection to install Apache-modSSL, MySQL, and PHP. This open source solution will have you serving dynamic Web pages quickly, reliably, securely, and efficiently—without any out-of-pocket expense. All you need are the following:
1. Root control of a FreeBSD box
2. A FreeBSD box connected to the Internet
3. An installed ports collection
4. An updated ports collection via CVsup

Although this solution may sound like a lot of work, compiling each application from source is actually painless with the FreeBSD ports system. This tutorial offers a simple paint-by-numbers guide to this server installation, which any developer, from the curious newbie to the seasoned Linux or Windows veteran, can use. As an added bonus, because FreeBSD can run on a 486 PC with just 16MB of RAM, it also enables you to turn an old computer into a PHP testing environment.

This article requires a running FreeBSD installation. To follow the instructions, you must be logged in as root and be able to navigate the command line. Some familiarity with both Unix and the computer you're working on is also required. The TYPE instruction means "at the root prompt." Do not type TYPE. Simply enter the data following the TYPE command ad verbatim on each line at the # root prompt. Press enter following each line of commands.

Connect Your FreeBSD Installation to the Internet
If you are already connected to the Internet skip ahead to the "Install CVsup to Stay Current" step. If you installed FreeBSD via CD-ROM, you need a configured Ethernet card to connect to the Internet. To configure your network connection:

TYPE /stand/sysinstall

Choose Configure then Networking from the list of options.

This installation requires the ports collection. If you haven't already, install the ports collection now. (See the FreeBSD handbook for an outline of how to install the ports collection.)

Install CVsup to Stay Current
If you have just installed the ports collection using a CD-ROM, you must upgrade to the latest releases of the ported software you need. If you have just installed FreeBSD and the ports collection via FTP, you are already current and you can skip ahead to the "Install Each Application from Source" section.

Fortunately, FreeBSD makes staying current extremely easy:

TYPE cd /usr/ports/net/cvsup-without-gui
TYPE make
TYPE make install
TYPE make clean

As root, copy /usr/share/examples/cvsup/ports-supfile to a new location. In this case, copy to /root on your home directory:

TYPE cp /usr/share/examples/cvsup/ports-supfile /root/ports-supfile

* Notice the space between ports-supfile and /root/ports-supfile.

Edit ports-supfile with your favorite editor:

TYPE ee /root/ports-supfile

Change the ports-supfile (line 50 or so) to look something like the following:

*default host=cvsup.ca.FreeBSD.org.
*default base=/usr
*default prefix=/usr
*default release=cvs
*default delete use-rel-suffix
*default tag=.

Pay particular attention to the first and last lines. Choosing a CVsup mirror that is located near you will save a lot of time. At the very least, download one from the country where you live. Click here for a list of mirrors.

After you've done this, press Escape and then Return to leave editor. Press Return to save your changes.

Before running CVsup, you have to reboot your system:

TYPE shutdown -r now

Once you have once again logged in as root:

Now it's time to run CVsup:

TYPE cvsup -g -L 2 /root/ports-supfile

This command upgrades all the skeletons in your ports collection. Depending on your Internet connection speed, the upgrade can take an hour or longer.

Install Apache-modSSL, MySQL, and PHP
Once you get the command prompt back, you can move on to the fun part. Enter the following commands one at a time, waiting for the command prompt between each instance of TYPE.

Install the Perl language (required for MySQL):

TYPE cd /usr/ports/lang/perl5
TYPE make
TYPE make test
TYPE make install
TYPE make clean
TYPE cd ~
TYPE rehash
TYPE use.perl port

The last three commands tells your FreeBSD machine to use the freshly upgraded Perl language and not the default that ships with your version of FreeBSD. If you ever need to switch back TYPE use.perl system.

Install the MySQL database:

TYPE cd /usr/ports/databases/mysql40-server
TYPE make
TYPE make install
TYPE make clean

It is a good idea to edit /etc/make.conf to tell various ports which versions of Berkeley DB and MySQL to use:

TYPE ee /etc/make.conf

Add the following two lines, one on top of the other as shown:


Editor's Note: Be sure to modify the code above, if necessary, to match the version number of MySQL that you are currently using.

Press Escape to exit, and save your changes before you leave the editor.

Install the Apache13x+mod_ssl server:

TYPE cd /usr/ports/www/apache13-modssl
TYPE make
TYPE make certificate

You'll see a series of self-explanatory on-screen directions here. Create an [R]SA server key for good performance. Change all of the snake-oil information to your own private information. When you are asked to encrypt this key, choose [y]es, and then:

TYPE make install
TYPE make clean

Install the PHP language:

TYPE cd /usr/ports/www/mod_php4
TYPE make

Now you get to choose your installation preferences. Notice that the MySQL dependent choices have been made for you. Certain options require a licensing fee (e.g., PDFlib). If you do not recognize a particular component, do not install it. Certain components create dependencies on other components. To simplify this installation and circumvent errors, stick to a minimal configuration. Include DOMXML and DOMXSLT support. PHP integrates well with XML. For universality amongst databases, choose the UNIXODBC support also. UNIXODBC will allow you to connect PHP with many databases:

TYPE make install
TYPE make clean

Congratulations! You have Apache-modSSL, MySQL, and PHP installed on your FreeBSD system. Wasn't that easy? Still skeptical? Then test it out.

Test Your Installation
To test the installation, you need a Web browser. I like to use LYNX.

Install LYNX-ssl Web Browser:

TYPE cd /usr/ports/www/lynx-ssl
TYPE make
TYPE make clean

Now, shutdown and reboot your machine to have Apache and MySQL start as daemon processes in the background. If you made a certificate, you will need to enter your local pass- key when prompted:

TYPE shutdown -r now
TYPE lynx

This command tells your Web browser to view the local Apache configuration. And what do you knowit worked! You should see the default congratulatory Apache screen. (Note: The keystroke Q or Control-C gets you out of LYNX.)

Three Steps to Enable Apache to Serve PHP
1. Edit the Apache httpd.conf file. Begin by getting back to the root command line:

TYPE cd ~
TYPE ee /usr/local/etc/apache/httpd.conf

Add the following lines anywhere within the Apache httpd.conf file, perhaps at the very top:

AddType application/x-httpd-php3 .php3
AddType application/x-httpd-php3-source .php3s
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

Find the line that says ServerAdmin and put your e-mail address there.

2. Create a PHP test file:

TYPE cd ~
TYPE ee /usr/local/www/data/index.php

Add the following code—exactly the way you see it here—to the editor window you just opened:


Press Escape to leave the editor and save this file.

3. Test the PHP installation on a secure port: To test the PHP installation, you have to stop and restart the Apache server:

TYPE cd /usr/local/etc/apache
TYPE apachectl stop
* Note: In ctl, it is an "el" and not a one.
TYPE apacheclt start
TYPE lynx

If this worked, you should see the information about your new PHP/MySQL-enabled Apache Web server. Congratulations again! You now have a PHP-enabled Apache-modSSL Web server. The second-to-last step is adding a password to MySQL root and creating a simple test page that shows the connection between the PHP language and the MySQL database.

Add a Password to MySQL Root and Creating a Test Page
Set a MySQL root password:

TYPE mysqladmin -u root password your_password_here

Logging into MySQL as root now requires a password. Replace "your_password_here" with your own password (For more information about MySQL, see the online documentation):

TYPE mysql —user=root —password=your_password_here

You should now see the mysql> prompt:

Mysql>TYPE create database banking;
Mysql>TYPE show databases;
Mysql>TYPE quit

Make sure you add a semi-colon when required.

Now you are back to the root prompt. All that is left is to use PHP to connect to the newly created "banking" database. You need to invoke an editor again:

TYPE ee /usr/local/www/data/phpmysqlconnection.php

Then add the following code into the editor window (don't forget the semi-colons):

<!— start PHP insert and create MySQL connection details as variables —>
// database access variables
$Server = "localhost";
$Username = "root";
$Pass = "yourpasswordhere";
$DataBaseName = "banking";
// connect PHP to MySQL
$Connection = mysql_connect ($Server, $Username, $Pass) or die ("Connection Denied");
// test the connection with a browser
if ($Connection) {
echo "<h3>Congratulations! You are ready to build dynamic database-driven Web sites</h3>";
} else {
echo "<h3>Back to the lab again*****Something went wrong</h3>";
// closing the connection is considered good form
mysql_close ($Connection);
// close the php

Test this out:

TYPE lynx

Secure the Pages You Serve
# Your last step is to configure Apache-modSSL to serve truly secure pages to the outside world. Note: the traditional secure port is 443. The FAQ pages at the following Web sites provide more information: http://www.freebsd.org
# http://www.apache.org
# http://www.openssl.org
# http://www.modssl.org
# http://www.perl.org
# http://www.mysql.org
# http://www.php.net

Security is a process and not an end. Many of your configuration questions can be answered in the mod_ssl documentation included with the installation of Apache-modSSL. Further reading and support is available from a number of locations, including:
# http://www.devshed.com/Server_Side/PHP/DB_Basics
# http://www.programmingpub.com/php_forum_php_forums
# developer.netscape.com/tech/security/ssl/howitworks

Contribute to Open Source
FreeBSD and the other open-source projects used in this article rely on user contributions to evolve. If you find these products useful, financial and volunteer contributions are always welcome. FreeBSD is distributed under the BSD license, leaving you free to alter and distribute the source code so long as the BSD license remains intact. Click here for copyright information about FreeBSD and the GNU public license.


1. griselda23722 - 30 July, 2010

On this site it is possible to find the. I have found it!

2. how to earn money online - 10 April, 2013

Generally I do not read article on blogs, but I would
like to say that this write-up very pressured me to check out and do it!
Your writing taste has been amazed me. Thanks, very nice article.

3. best way to make money rs - 10 April, 2013

I’ve learn some just right stuff here. Certainly price bookmarking for revisiting. I wonder how so much attempt you put to create such a magnificent informative site.

4. earn money online articles - 18 April, 2013

Now you are sure that how to draw visitors whilst them interested, you should state what
to sell to earn money. For those doing online business for a while
instead of getting any sales, I can tell you what you should do to start making money while
you sleep. This is a question that is certainly asked by numerous internet users each day.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: