Install WordPress with a FAMP Stack on FreeBSD 12
Introduction
WordPress is an open-source content management system that powers millions of websites, blogs, and corporate portals. The software is written in PHP and can be installed on a FAMP (FreeBSD, Apache web server, MySQL, and PHP) stack.
WordPress has a friendly dashboard and rich-text editor that doesn't require any HTML knowledge to use. It also has many professional themes and plug-ins that you can use to customize your website. In this tutorial, you'll install, configure and run a WordPress site with a FAMP stack on FreeBSD 12.
Prerequisites
Before you begin, make sure you have the following:
- A FreeBSD 12 server
- A domain name such as example.com. To test this guide, you may use your server's public IP address.
- A non-root sudo user
- A FAMP Stack
1. Install WordPress Dependencies
SSH to your server and make sure your system packages are up to date.
$ sudo freebsd-update fetch install
$ sudo pkg update
$ sudo pkg upgrade -y
Optionally, install the nano
text editor. While this guide uses nano
for the examples, you're free to use any other text editor.
$ sudo pkg install -y nano
Install the PHP extensions required by WordPress.
$ sudo pkg install -y php73-xml php73-gd php73-curl php73-tokenizer php73-zlib php73-zip php73-intl php73-mbstring php73-json php73-ftp php73-ctype php73-dom php73-posix php73-filter php73-iconv php73-openssl php73-simplexml php73-sockets php73-xmlreader php73-mysqli php73-pdo_mysql php73-hash
To craft human-readable URLs, WordPress uses the mod_rewrite
module. First, open the Apache configuration file using nano
to enable it.
$ sudo nano /usr/local/etc/apache24/httpd.conf
Find the line below.
# LoadModule rewrite_module libexec/apache24/mod_rewrite.so
Uncomment the above line by removing the #
symbol at the beginning to enable the mod_rewrite
module.
LoadModule rewrite_module libexec/apache24/mod_rewrite.so
Save and close the file.
Restart Apache to load the new configuration.
$ sudo service apache24 restart
2. Create the WordPress Database
Log in to your MySQL server as root.
$ sudo mysql -u root -p
Enter your root password and press Enter to proceed.
At the MySQL prompt, enter the commands below to create a wordpress
database and a wp_user
user. Replace EXAMPLE_PASSWORD
with a strong value.
root@localhost [(none)]> CREATE DATABASE wordpress;
CREATE USER 'wp_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'EXAMPLE_PASSWORD';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;
Exit from the MySQL command-line interface.
root@localhost [(none)]> QUIT;
3. Configure the Virtual Host File
Apache will serve the WordPress site from the /usr/local/www/apache24/data/
directory. Create a child wordpress
directory in this location.
$ sudo mkdir -p /usr/local/www/apache24/data/wordpress
Change the ownership of the new directory to your username to avoid permission issues when working on the directory. Replace example
with your username.
$ sudo chown -R example:example /usr/local/www/apache24/data/wordpress
Create a new virtual host file and instruct Apache to load your WordPress site from the directory you've just created.
$ sudo nano /usr/local/etc/apache24/Includes/wordpress.conf
Enter the information below into the file. Replace example.com
and webmaster@example.com
with your values.
<VirtualHost *:80>
ServerAdmin webmaster@example.com
ServerName example.com
DocumentRoot /usr/local/www/apache24/data/wordpress
<Directory /usr/local/www/apache24/data/wordpress>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Save and exit the file.
Restart Apache to load the new changes.
$ sudo service apache24 restart
4. Download and Install WordPress
Navigate to the tmp
directory.
$ cd /tmp
Download the latest version of WordPress.
$ curl -O https://wordpress.org/latest.tar.gz
Unpack the WordPress tarball.
$ tar xzvf latest.tar.gz
Copy the files to the WordPress site directory that you created earlier.
$ sudo rsync -rtv /tmp/wordpress/ /usr/local/www/apache24/data/wordpress
Navigate to the /usr/local/www/apache24/data/wordpress
directory.
$ cd /usr/local/www/apache24/data/wordpress
Copy the sample configuration file to wp-config.php
.
$ sudo cp wp-config-sample.php wp-config.php
Create an upgrade
directory under the wp-content
directory.
$ sudo mkdir wp-content/upgrade
Change the ownership of the /usr/local/www/apache24/data/wordpress
directory to the Apache user www
.
$ sudo chown -R www:www /usr/local/www/apache24/data/wordpress
Set the appropriate permissions for the WordPress files and directories.
$ sudo find /usr/local/www/apache24/data/wordpress -type d -exec chmod 750 {} \;
$ sudo find /usr/local/www/apache24/data/wordpress -type f -exec chmod 640 {} \;
5. Configure WordPress
The WordPress software relies on some salts and keys for security purposes. Grab some unique values from the WordPress API endpoint using the curl
command.
$ curl -s https://api.wordpress.org/secret-key/1.1/salt/
Copy the values to your clipboard.
Edit the WordPress configuration file.
$ sudo nano /usr/local/www/apache24/data/wordpress/wp-config.php
Locate the keys and salts below and replace them with the values you retrieved from the WordPress API.
...
define( 'AUTH_KEY', 'put your unique phrase here' );
define( 'SECURE_AUTH_KEY', 'put your unique phrase here' );
define( 'LOGGED_IN_KEY', 'put your unique phrase here' );
define( 'NONCE_KEY', 'put your unique phrase here' );
define( 'AUTH_SALT', 'put your unique phrase here' );
define( 'SECURE_AUTH_SALT', 'put your unique phrase here' );
define( 'LOGGED_IN_SALT', 'put your unique phrase here' );
define( 'NONCE_SALT', 'put your unique phrase here' );
...
Locate the database settings below.
...
define( 'DB_NAME', 'database_name_here' );
/** MySQL database username */
define( 'DB_USER', 'username_here' );
/** MySQL database password */
define( 'DB_PASSWORD', 'password_here' );
...
Match the values to the database name, user account, and password that you created earlier. Your completed settings should look similar to the content below. Replace EXAMPLE_PASSWORD
with the correct password that you assigned to the wp_user
.
define( 'DB_NAME', 'wordpress' );
/** MySQL database username */
define( 'DB_USER', 'wp_user' );
/** MySQL database password */
define( 'DB_PASSWORD', 'EXAMPLE_PASSWORD' );
...
Save and close the file.
6. Finalize WordPress Installation
Visit your server's URL in a web browser. Replace example.com
with the domain name or public IP address of your webserver.
http://example.com
Select a language and click Continue.
Enter your site information and click Install WordPress to proceed.
Log in to your new WordPress site.