Verified and Tested 09/02/15
Introduction
This how-to will guide you through installing a FEMP stack. FEMP is simply a software bundle that consists of 4 components that work together to form a powerful web server. However, in this setup the acronym’s are as follows: FreeBSD 10 (F) is the core of the platform which will sustain the other components. Nginx (E) is used for the web service. MySQL (M) is used for database management, and PHP (P) is used as the programming language.
Install FEMP on FreeBSD 10
To get started, login to your FreeBSD server via SSH or Console. If you are using the Atlantic.Net cloud service, note that they are setup as minimal installations to avoid having unnecessary packages from being installed and never used. If some software packages that you’re used to using aren’t installed by default, feel free to install them as needed.
Let us download nano so we can simplify this tutorial.
pkg install nano
Let’s make sure that your server is fully up-to-date so we can complete the preparation.
freebsd-update fetch freebsd-update install
With the server up-to-date, we can continue the process and install FEMP on your server.
Install Nginx on FreeBSD 10
Begin by installing Nginx with the following commands:
pkg install nginx
Rehash
Enable and start the Nginx service with the following commands:
sysrc nginx_enable=yes
service nginx start
You can now verify that Nginx is installed correctly by typing http:// and your IP address on your browser(http://YOUR.IP.ADD.RESS ).
To get your servers IP Address enter the following command:
ifconfig vtnet0 | grep "inet " | awk '{ print $2 }'
Configure Nginx on FreeBSD 10
The first change to the configuration file is to make a backup of the original config, just in case anything ever happens and we want to revert back. We will accomplish this task by moving the file and renaming it nginx.conf.backup.
mv /usr/local/etc/nginx/nginx.conf /usr/local/etc/nginx/nginx.conf.backup
Now, we create the nginx.conf file with the following command:
nano /usr/local/etc/nginx/nginx.conf
Paste the following configurations to your empty file then save your session.
Note: To simplify our configurations, this file contains the PHP configurations as well.
user www; worker_processes 1; error_log /var/log/nginx/error.log info; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; sendfile on; keepalive_timeout 65; server { listen 80; server_name example.com www.example.com; root /usr/local/www/nginx; index index.php index.html index.htm; location / { try_files $uri $uri/ =404; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/local/www/nginx-dist; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include fastcgi_params; } } }
After, we will create the log file directory for Nginx and create the empty log files. This will allow the system o store errors and helpful information for troubleshooting.
mkdir -p /var/log/nginx
Create the access and error log files with the touch command:
touch /var/log/nginx/access.log touch /var/log/nginx/error.log
By default, Nginx has the web files going to the “nginx-dist” directory via a symbolic link. We must remove that link and point it to the correct location that is the “nginx” directory.
rm -rf /usr/local/www/nginx
Then remake the directory with the following command:
mkdir /usr/local/www/nginx
With the link broken/removed and the new directory made, we need to copy the index.html file to the new directory with the following command:
cp /usr/local/www/nginx-dist/index.html /usr/local/www/nginx
Finally, restart Nginx and the system, so all the configurations take effect with the following commands:
service nginx restart
rehash
Install MySQL on FreeBSD 10
We then would like to continue by installing MySQL. After running the following MySQL, command hit y and then enter to confirm your installation.
pkg install mysql55-server
Enable and start the MySQL service with the following commands:
sysrc mysql_enable=yes
service mysql-server start
Configure MySQL on FreeBSD 10
To ensure the security of the default settings of MySQL, continue with the command below:
mysql_secure_installation
Note: When prompt with “Enter current password for root” hit enter for none then Y(Yes) to set MYSQL password. You will then be prompted with a series of questions. Just type Y for yes on all of them, see the screen shot below:
Restart the MySQL and the system, so all the configurations take effect with the following commands:
service mysql-server restart
rehash
Install PHP on FreeBSD 10
Finally, we will conclude with the FEMP Stack by installing PHP and configuring it to work with Nginx.
pkg install php55-mysql php55-mysqli
With PHP installed, we can go ahead a begin the preparation to configure it with Nginx. Copy the sample PHP configuration file to the correct location.
cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
Enable and start the PHP-FPM service with the following commands:
sysrc php_fpm_enable=yes
service php-fpm start
Configure PHP on FreeBSD 10
We will now have to make minor changes to the PHP-FPM configuration. Using your text editor, type the following command to access the configurations.
nano /usr/local/etc/php-fpm.conf
Locate the line that reads listen = 127.0.0.1:9000 and replace it with the following line, so it listens to php-fpm.sock:
#locate listen = 127.0.0.1:9000 #Replace listen = /var/run/php-fpm.sock
Then you will need to locate the following lines and uncomment(Remove the semi-colon) from them:
listen.owner = www listen.group = www listen.mode = 0660
Go ahead and create the PHP file to make sure that it works with the following command:
nano /usr/local/www/nginx/info.php
Then insert the following PHP script to the empty info.php file with the following command:
<?php phpinfo(); ?>
Additionally, restart the PHP-FPM, so all the configurations take effect with the following command:
service php-fpm restart
Finally, restart Nginx and the system, so all the configurations take effect with the following commands:
service nginx restart
rehash
You can now verify that PHP is installed correctly by typing the following on your browser. Below is the default page after installing PHP on an FEMP Stack FreeBSD server when viewing the following URL: http://YOUR.IP.ADD.RESS/info.php
What’s Next?
Congratulations! You now have a server with an FEMP Stack platform for your web environment. Thank you for following along and feel free to check back with us for further updates.