
How to Install Apache, MySQL, PHP, and phpMyAdmin on FreeBSD
(20160616 — The steps in this post were amended to address changes in recent versions of software. Minor editorial corrections were also made — iceflatline)
This post will describe how to install and configure Apache, MySQL, PHP and phpMyAdmin on FreeBSD for basic local web development. Once set up, you’ll be able to use your “AMP” server to do web development, code testing, maintain local copies of your web sites, etc.
The software discussed in this post are available as free and open source under various licensing structures. The versions of software discussed in this post are as follows:
- FreeBSD 10.3-RELEASE-p4
- Virtual Box 5.0.20 r106931
- apache24-2.4.20_1
- mysql57-server-5.7.12_1
- mod_php70-7.0.7
- php70-7.0.7
- php70-extensions-1.1
- phpMyAdmin-4.6.2
- WordPress 4.5.2
The following steps discussed in this post assume you have the FreeBSD Ports Collection installed. If not, you can install it using the following commands:
1
2
|
portsnap fetch
portsnap extract
|
If the Ports Collection is already installed, make sure to update it:
1
|
portsnap fetch update
|
Okay, let’s get started. All commands are issued as the root user or by simulating the root user by using the command su. While building the various ports you should accept all default configuration options unless otherwise instructed.
Install Apache
Navigate to the Apache server port and build it:
1
2
|
cd /usr/ports/www/apache24
make config–recursive install distclean
|
Once Apache has been successfully installed, add the following line to /etc/rc.conf so that the Apache server will start automatically at system boot.
1
|
sysrc apache24_enable=YES
|
Now let’s start Apache to make sure it works:
1
|
service apache24 start
|
Point your web browser to the host name or IP address of the FreeBSD host you’ve installed Apache on and you should see the venerable “It works!”
Install MySQL.
Now let’s build the MySQL server:
1
2
|
cd /usr/ports/databases/mysql57–server
make config–recursive install distclean
|
Add the following line to /etc/rc.conf:
1
|
sysrc mysql_enable=YES
|
And start the mysql server:
1
|
service mysql–server start
|
Then set a password for the MySQL root user:
1
|
/usr/local/bin/mysql –u root –p
|
You’ll be requested to enter a password. Enter the password contained in /root/.mysql_secret. You’ll now be at the command prompt for the mysql server. Change your password using the following command:
1
|
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘your-new-password’;
|
Enter ‘quit’ to exit the server. You may now delete /root/.mysql_secret.
Install PHP
Next, we’ll build PHP:
1
2
|
cd /usr/ports/lang/php70
make config–recursive install distclean
|
Then the module required to support PHP applications on Apache:
1
2
|
cd /usr/ports/www/mod_php70
make config–recursive install distclean
|
Now let’s add the extensions to PHP to round out its capabilities. Before we build this port though we’ll want to add support for MySQLi (an improved interface to MySQL) in order to communicate with the MySQL server.
1
2
|
cd /usr/ports/lang/php70–extensions/
make config–recursive
|
In the corresponding menu you should select “MYSQLI”, then proceed with building the port:
1
|
make install distclean
|
Install phpMyAdmin
phpMyAdmin is a free software tool written in PHP intended to handle the administration of MySQL from your web browser. phpMyAdmin supports a wide range of operations with MySQL, including managing databases, tables, fields, relations, indexes, users, permissions, etc., from an easy-to-use web page, while you still have the ability to directly execute any SQL statement from the command line if you prefer. Installing phpMyAdmin is optional but it’s nice tool to have:
1
2
|
cd /usr/ports/databases/phpmyadmin/
make config–recursive install distclean
|
Configuration
Now that we have the requisite ports built and installed it’s time to configure them. First, let’s create the file /usr/local/etc/php.ini to hold our PHP options. The simpliest way to do this is to copy the file /usr/local/etc/php.ini-development which will add the default settings for new PHP installations. This configuration is suitable for development purposes, but NOT necessarily for production purposes. If your plans include a production server, then among other things, and before going online with your site, you should consider copying /usr/local/etc/php.ini-productioninstead and consult the recommendations at http://php.net/manual/en/security.php.
1
|
cp /usr/local/etc/php.ini–development /usr/local/etc/php.ini
|
Now let’s configure Apache. Open the file /usr/local/etc/apache24/httpd.conf and look for the following line:
1
|
DirectoryIndex index.html
|
And change it so it reads as follows:
1
|
DirectoryIndex index.html index.php
|
Then append the following lines to the end of the file in order to support PHP files as well as phpMyAdmin, which normally lives outside of the Apache document root. Note: if you elected not to install phpMyAdmin, then you need only add the FilesMatch directives.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<FilesMatch “\.php$”>
SetHandler application/x–httpd–php
</FilesMatch>
<FilesMatch “\.phps$”>
SetHandler application/x–httpd–php–source
</FilesMatch>
Alias /phpmyadmin “/usr/local/www/phpMyAdmin”
<Directory “/usr/local/www/phpMyAdmin”>
Options None
AllowOverride None
Require all granted
</Directory>
|
Now restart Apache:
1
|
service apache24 restart
|
That’s it for our Apache configuration. Now let’s configure phpMyAdmin. We’ll do this by creating the file /usr/local/www/phpMyAdmin/config.inc.php, the basic configuration file for phpMyAdmin. Traditionally, users have manually created or modified /usr/local/www/phpMyAdmin/config.inc.php, but now phpMyAdmin includes a nice setup script, making it much easier to create this file with the settings you want. Start by creating the directory /usr/local/www/phpMyAdmin/config and make it writable by the phpMyAdmin setup script:
1
|
mkdir /usr/local/www/phpMyAdmin/config && chmod o+w /usr/local/www/phpMyAdmin/config
|
Then make /usr/local/www/phpMyAdmin/config.inc.php readable by the phpMyAdmin setup script:
1
|
chmod o+r /usr/local/www/phpMyAdmin/config.inc.php
|
Now open your web browser and navigate to http://your-hostname-or-IP-address/phpmyadmin/setup where you will see the phpMyAdmin setup Overview page. Select “New server” and then select the “Authentication” tab. Under the “Authentication type” choose “http” from the drop-down list (using HTTP-Auth to sign-in into phpMyAdmin will avoid storing login/password credentials directly in config.inc.php) and remove “root” from the “User for config auth”(See Figure 1).
Now select “Apply” and you will be returned you to the Overview page where you should see a new server listed. Select “Save” in the Overview page to save your configuration as/usr/local/www/phpMyAdmin/config/config.inc.php. Now let’s move that file up one directory to/usr/local/www/phpMyAdmin where phpMyAdmin can make use of it.
1
|
mv /usr/local/www/phpMyAdmin/config/config.inc.php /usr/local/www/phpMyAdmin
|
Now let’s try out phpMyAdmin to make sure it works. Point your web browser to http://your-hostname-or-IP-address/phpmyadmin where you will be presented with a pop-up box requesting you to log in. Use “root” and the MySQL password you set up previously, then you should be directed to the phpMyAdmin administration page. We no longer need the/usr/local/www/phpMyAdmin/config directory so let’s remove it, as well as the read permission we added previously to /usr/local/www/phpMyAdmin/config.inc.php:
1
2
|
rm –r /usr/local/www/phpMyAdmin/config
chmod o–r /usr/local/www/phpMyAdmin/config.inc.php
|
And wrap up by restarting the Apache and MySQL servers:
1
2
|
service apache24 restart
service mysql–server restart
|
Testing our installation using WordPress
WordPress is a full-featured website/blog platform that makes heavy use of Apache, MySQL and PHP. We’ll install it on our newly created implementation to ensure we have these packages installed and working correctly. Once again, all commands are issued as the root user or by simulating the root user using the command su. Let’s start by downloading the latest WordPress directly from the developers site to your home directory and untarring the package:
1
2
3
|
cd ~
fetch http://wordpress.org/latest.tar.gz
tar –zxvf latest.tar.gz
|
You should now see the new directory wordpress in your home directory. Next we need to create the file ~/wordpress/wp-config.php and make some changes to it so WordPress can access the MySQL server. First, let’s copy the file ~/wordpress/wp-config-sample.php to use as a template:
1
|
cp ~/wordpress/wp–config–sample.php ~/wordpress/wp–config.php
|
Open ~/wordpress/wp-config.php in your favorite editor and enter the database name as well as your MySQL login and password in the appropriate lines. When complete, it should look like the following:
1
2
3
4
5
6
7
8
9
|
// ** MySQL settings – You can get this info from your web host ** //
/** The name of the database for WordPress */
define(‘DB_NAME’, ‘wordpress’);
/** MySQL database username */
define(‘DB_USER’, ‘root’);
/** MySQL database password */
define(‘DB_PASSWORD’, ‘your-mysql-password’);
|
Now move the wordpress directory to Apache’s document root:
1
|
mv ~/wordpress/ /usr/local/www/apache24/data/
|
Next, let’s create an MySQL database for our WordPress installation. Open phpMyAdmin in your browser and create a database by selecting the “Databases” tab at the top. Enter a name for it in the “Create database” field. For purposes of our example, I’ll use “wordpress” as the database name. You’re free to use a different database name, just make sure to use the same name in thedefine(‘DB_NAME’, ‘your-DB-name’); line in ~/wordpress/wp-config.php as described above. Then select “Create.”
Now let’s run the WordPress script that will populate its database with the requisite tables. Open your web browser and navigate to http://your-hostname-or-IP-address/wordpress/wp-admin/install.php. If everything is configured correctly you should see the WordPress installation wizard page (See Figure 2). Enter a title for your site, username, password, and an e-mail, then select “Install WordPress.” Then login with your newly created WordPress credentials and you should be presented with the default WordPress administration page.
Common problems
An error that occasionally pops up when attempting to start the Apache server is the following:
1
2
3
|
httpd: apr_sockaddr_info_get() failed for <some–host–name>
httpd: Could not reliably determine the server‘s fully qualified domain name, using 127.0.0.1 for ServerName
/usr/local/etc/rc.d/apache24: WARNING: failed to start apache24
|
This can be fixed by adding the following line to /usr/local/etc/apache24/httpd.conf:
1
|
ServerName localhost:80
|
HTTP 403 permission problems when trying to access phpMyAdmin is another area that seems to sometimes trip people up. This is usually caused by errors in the way either the Alias or Directory Apache directives for phpMyAdmin have been written in /usr/local/etc/apache24/httpd.conf. As an example, a missing “/” in the Alias statement cost me two hours of troubleshooting time!
Conclusion
Well, that’s it. A few hours of your time with the FreeBSD Ports Collection and you can a get a fully configured “FAMP” web development server up and running on your FreeBSD box.
References
http://caffetine.org/freebsd-amp.php
https://httpd.apache.org/docs/2.4/upgrading.html
http://dev.mysql.com/doc/refman/5.7/en/default-privileges.html