I wanted to cover the many ways TrueNAS can be used to create and manage object storage. TrueNAS includes Minio S3 object storage out of the box, and the two work very well together. TrueNAS is a scalable, easy way to run and manage ZFS, and Minio is the de-facto way to self host S3 objects.
Using the standard S3 service in TrueNAS is the quickest way to get setup and running with S3 objects. However, user management, if one wanted to open up remote access to the Minio web console, is a bit more difficult.
What the video proposes is a couple of ways to silo off and breakdown the S3 service either with a web front end, or simply by making use of jails to host multiple, separate instances of the S3 object storage.
Here, we'll look more at the details for each option.
Create a jail to run Minio:
Go to the Jails section on TrueNAS. Create a new jail, give it a name, and set the network as desired - the video showed with DHCP, but static IP addresses are available as well.
Once created Start the jail. Enter the shell. In the shell type
pkg update
Accept yes to install.
pkg search minio
pkg install minio-0420....(whatever the current version is provided)
Once installed, make a directory. Could be anywhere, I chose in the /mnt directory of the jail.
mkdir /mnt/miniodata
Start the Minio server with the following
minio server /mnt/miniodata
That will start the service, but if you close the console/terminal screen the service will also terminate. To make this a bit more robust we can run the service with cron.
Type crontab -e
Insert (defaul is vi, type 'i' to insert, esc to stop inserting, :w to write, :q to exit)
@reboot minio server /mnt/miniodata --console-address=":9090"
Now the service for Minio will start on each boot of the jail, with the console dedicated to run on port 9090 of the jails unique IP address.
Create a web server to run a frontend in a jail:
To build out a LAMP (technically a FAMP - FreeBSD, Apache, MySQL, PHP) I followed this excellent guide on Digital Ocean. I did not need the database portion, so that was skipped, though I did install the php-mysqli packages just in case I wanted it in the future.
Install steps in the jail terminal/shell.
pkg update -y
pkg install apache24
sysrc apache24_enable="YES"
service apache24 start
Navigate to the jail IP address and check to see if "It works!" appears.
pkg install php81 php81-mysqli mod-php81 php81-simplexml
The php81-simplexml package doesn't come down with the meta package for php81, and this threw me for a couple of hours because it is needed for the AWS PHP S3 plugin we install.
Initiate PHP with specific settings:
cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
Initiate PHP in Apache (you can use either vi or ee as the text editor):
ee /usr/local/etc/apache24/modules.d/001_mod-php.conf
Copy this in the file:
<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>
Install PHP Composer for the S3 support.
pkg search composer
pkg install php81-composer
composer require --working-dir=/usr/local/www/apache24 aws/aws-sdk-php
Now all this was to support the POC file I have over on Github. If you want to use it copy it to the jail, or install git in the jail and run a git clone command. Put everything in the /work/src/ folder in the /usr/local/www/apache24/data directory in the jail. Also be sure to modify the S3 endpoint, credentials, bucket and host address to those of the jail's IP and relevant credentials.
I hope this gives a better overview of using object storage on TrueNAS. It is a really flexible feature, can be plugged into a lot of other environments, or even self-hosted on the TrueNAS itself using jails.