In a previous post I went over installing FreeBSD, in this post I will install a "FAMP" stack (FreeBSD, Apache, MySQL and PHP).
Installing Apache
First we will install Apache:
pkg install apache24
sysrc apache24_enable="YES"
service apache24 start
service apache24 status
When we browse to our webpage, we will see a large "It works!".
Installing PHP
Now Apache is installed, we can install PHP. As of writing, the latest php version is 8.2 (packages are php82
), so I will be installing this
pkg install php82 php82-mysqli mod_php82
cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
rehash
next, create a new file /usr/local/etc/apache24/modules.d/001_mod-php.conf
and add the following content:
<IfModule dir_module>
DirectoryIndex index.php index.html
<FilesMatch "\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
</IfModule>
now we can restart apache
apachectl restart
Now PHP is installed and added to apache, we can test it by removing the default index document, and replacing it with a php file printing the php information.
Remove /usr/local/www/apache24/data/index.html
and create a new file /usr/local/www/apache24/data/index.php
with the following content:
<?php phpinfo(); ?>
If you visit the server's IP address again, you should see information about the PHP version that is installed.
Installing MySQL
First we need to install the mysql server:
pkg install mysql80-server
sysrc mysql_enable="YES"
service mysql-server start
Next, we have to run mysql_secure_installation
to do the initial configuration of mysql.
- Set a password (a secure one!)
- Remove anonymous users: yes
- Disallow root login remotely: yes
- Remove test database and access to it: yes
- reload privilege tablees: yes
Now we have all the basics installed
HTTPS and virtualhosts
Because, even when testing, it is a good idea to set up HTTPS, we will add this first. Open /usr/local/etc/apache24/httpd.conf
and uncomment the line that loads mod_ssl.so
LoadModule ssl_module libexec/apache24/mod_ssl.so
Next, uncomment the line that includes the httpd-ssl.conf
file
Include etc/apache24/extra/httpd-ssl.conf
Next, we need to add a self signed certificate
openssl req -x509 -nodes -newkey rsa:2048 -keyout /usr/local/etc/apache24/server.key -out /usr/local/etc/apache24/server.crt -days 365
tip: If you are deploying a production website, you should use Let's Encrypt.
Testing our setup by installing Wordpress
cd /usr/local/www/apache24/data
rm index.html
wget https://wordpress.org/latest.tar.gz
tar xzf latest.tar.gz
mv wordpress/* .
chown -R www:www *
Next, create a mysql database (be sure to change the password to something else):
mysql -u root -p
create database wordpress;
create user 'wordpress'@'localhost' identified by 'password';
grant all privileges on wordpress.* to 'wordpress'@'localhost';
flush privileges;
Next visit the website and follow the steps of the installer to set up wordpress!