0% found this document useful (0 votes)
91 views103 pages

HL8 Homelab Server User Manual

Uploaded by

hokit22678
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
91 views103 pages

HL8 Homelab Server User Manual

Uploaded by

hokit22678
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

HL8 - HOMELAB SERVER

USER MANUAL
REVISION DETAILS

Version Description

1.0 Initial published version

Contents
2
Version -1.1
REVISION DETAILS........................................................................................................................................2
GETTING STARTED.......................................................................................................................................8
ABOUT US................................................................................................................................................8
WHY 45HOMELAB HL8.............................................................................................................................8
HARDWARE..................................................................................................................................................9
COMPONENTS AND SPECIFICATIONS.......................................................................................................9
INITIAL SETUP............................................................................................................................................11
INSERTING THE STORAGE DRIVES..........................................................................................................11
CABLE SETUP..........................................................................................................................................12
Power requirements..........................................................................................................................13
45HOMELAB HL 8 INITIAL CABLING SETUP DIAGRAM...........................................................................14
INITIAL CONFIGURATION /SETUP...............................................................................................................15
NETWORK SETUP...................................................................................................................................15
USING THE DESKTOP UI.....................................................................................................................15
SETTING THE NETWORKING USING NMTUI...........................................................................................19
Setting Static IP..................................................................................................................................20
Setting a Bond....................................................................................................................................23
HOUSTON LOGIN AND CONFIG..................................................................................................................28
CREATING ZPOOL...................................................................................................................................29
CREATING ZFS FILESYSTEM/DATASET.....................................................................................................30
CREATING YOUR SHARES........................................................................................................................32
Samba/SMB shares............................................................................................................................32
Setting up Local User Access SMB Shares..............................................................................................36
Set SMB permissions using local users and group..............................................................................40
Connecting to SMB Share on Windows and MacOS..............................................................................42
Connecting to SMB Share on Windows..............................................................................................42
Connecting to SMB Share on MacOS.................................................................................................44
Managing NFS in Houston UI.................................................................................................................46
Mounting NFS Share to Linux Client.......................................................................................................49
Add Mount on Reboot.......................................................................................................................49
Verify Share Mounted........................................................................................................................50
Verify Mount on Reboot....................................................................................................................50
SETUP ISCSI STORAGE............................................................................................................................52
3
Version -1.1
Configuring iSCSI Target.....................................................................................................................52
Create an iSCSI Target........................................................................................................................53
Create iSCSI LUNs...............................................................................................................................54
Configure ACL (Initiator IQN).............................................................................................................54
Configure Authentication...................................................................................................................54
Exit and Save the Configuration.........................................................................................................55
Open Firewall for iSCSI and enable the iSCSI service.........................................................................55
Verification /Connecting to the LUN......................................................................................................56
AUTOMATED ZFS REPLICATION/SNAPSHOTS IN HOUSTON UI...............................................................59
SOFTWARE.................................................................................................................................................62
PORTAINER.............................................................................................................................................62
NEXTCLOUD AND NPM ON PORTAINER.................................................................................................65
INSTALLING NGINX PROXY MANAGER(NPM) ON PORTAINER................................................................68
CONFIGURING PLEX PORTAINER............................................................................................................72
IMMICH - self-hosted backup solution for photos and videos...............................................................82
Uploading Pictures.............................................................................................................................87
Explore Tab........................................................................................................................................87
Map Tab.................................................................................................................................................87
Sharing Tab........................................................................................................................................87
Library................................................................................................................................................88
Mobile App........................................................................................................................................88
Administration...................................................................................................................................88
Server Status......................................................................................................................................90
CLI Commands...................................................................................................................................90
HOME ASSISTANT...................................................................................................................................91
Method 1 - Portainer deployment.....................................................................................................91
Method 2 - Deploying in Rocky Terminal...........................................................................................92
WIREGUARD - fast, modern, and secure VPN tunnel.............................................................................93
FRIGATE - open-source NVR built around real-time AI...........................................................................95
Explanation of [Link]..................................................................................................96
[Link]..........................................................................................................................................97
Why is this file needed?.....................................................................................................................99
TROUBLESHOOTING...................................................................................................................................99
4
Version -1.1
HL8 WONT POWER ON..........................................................................................................................99
HOUSTON UI IS NOT ACCESSIBLE...........................................................................................................99
DRIVES ARE MISSING IN MY ZPOOL.....................................................................................................100
ZPOOL IS IN A DEGRADED STATE..........................................................................................................100
SAMBA SHARES ARE NOT ACCESSIBLE TO MOUNT..............................................................................101
GETTING ACCESS DENIED WHEN ACCESSING THE FILES IN THE SHARE...............................................101
HOW DO I UPDATE MY HL8..................................................................................................................101
45DRIVES DISK MODULE IS NOT WORKING.........................................................................................102
SYSTEM WOULD NOT BOOT INTO THE OS...........................................................................................102
REVISION DETAILS
GETTING STARTED
ABOUT US
WHY 45HOMELAB HL8
HARDWARE
COMPONENTS AND SPECIFICATIONS
INITIAL SETUP
UNBOXING THE HL8
INSERTING THE STORAGE DRIVES
CABLE SETUP
Power requirements
45HOMELAB HL 8 INITIAL CABLING SETUP DIAGRAM
INITIAL CONFIGURATION /SETUP
NETWORK SETUP
USING THE DESKTOP UI
SETTING UP IPMI
SETTING THE NETWORKING USING NMTUI
Setting Static IP
Setting a Bond
HOUSTON LOGIN AND CONFIG
CREATING ZPOOL
CREATING ZFS FILESYSTEM/DATASET
CREATING YOUR SHARES
Samba/SMB shares
5
Version -1.1
Setting up Local User Access SMB Shares
Set SMB permissions using local users and group
Connecting to SMB Share on Windows and MacOS
Connecting to SMB Share on Windows
Connecting to SMB Share on MacOS
Managing NFS in Houston UI
Mounting NFS Share to Linux Client
Add Mount on Reboot
Verify Share Mounted
Verify Mount on Reboot
SETUP ISCSI STORAGE
Configuring iSCSI Target
Create an iSCSI Target
Create iSCSI LUNs
Configure ACL (Initiator IQN)
Configure Authentication
Exit and Save the Configuration
Open Firewall for iSCSI and enable the iSCSI service
Verification /Connecting to the LUN
AUTOMATED ZFS REPLICATION/SNAPSHOTS IN HOUSTON UI
SOFTWARE
PORTAINER
NEXTCLOUD AND NPM ON PORTAINER
INSTALLING NGINX PROXY MANAGER(NPM) ON PORTAINER
CONFIGURING PLEX PORTAINER
IMMICH - self-hosted backup solution for photos and videos
Uploading Pictures
Explore Tab
Map Tab
Sharing Tab
Library
Mobile App
Administration
6
Version -1.1
HL8 Status
CLI Commands
HOME ASSISTANT
Method 1 - Portainer deployment
Method 2 - Deploying in Rocky Terminal
WIREGUARD - fast, modern, and secure VPN tunnel
FRIGATE - open-source NVR built around real-time AI
docker-compose
Explanation of [Link]
[Link]
Why is this file needed?
TROUBLESHOOTING
HL8 WONT POWER ON
HOUSTON UI IS NOT ACCESSIBLE
DRIVES ARE MISSING IN MY ZPOOL
ZPOOL IS IN A DEGRADED STATE
SAMBA SHARES ARE NOT ACCESSIBLE TO MOUNT
GETTING ACCESS DENIED WHEN ACCESSING THE FILES IN THE SHARE
HOW DO I UPDATE MY HL8
45DRIVES DISK MODULE IS NOT WORKING s
SYSTEM WOULD NOT BOOT INTO THE OS

7
Version -1.1
GETTING STARTED

Welcome to 45HomeLab community. We are so glad you chose us.

ABOUT US

Serving our customers well is at the core of everything we do at 45HomeLab. In an industry where
technical support is strictly timed, automated and impersonal we are real people solving real storage
problems. Our storage solutions are non-proprietary, giving you the freedom to run any software you
choose.

OUR GOAL

Provide you with the best storage solution for your data needs - not the most expensive one. Today we
provide the most affordable storage solutions in the industry.

OUR MISSION

To provide affordable open-source storage solutions while staying true to our community roots by giving
back to the open-source community that we rely on.

OPEN DESIGN

Unlike mainstream data storage providers 45HomeLab maintains an open design and ongoing
relationships with the open-source community.

WHY 45HOMELAB HL8

At 45HomeLab we know home labbers have a strong vision of the infrastructure they want, and how to
build and configure it. A key pillar of a great home lab, is a sufficient storage that is customized and
configured how you need it.

The problem is home storage offerings today are under powered and have locked down software, while
enterprise solutions are just too big and expensive. We understand how frustrating this is, which is why

8
Version -1.1
we’ve created the 45HomeLab product line. It is big, strong, fast, while also being open and flexible so
you can easily modify, upgrade, and repair it, all at a price that makes sense for a power home lab user.

Our new HL8 is an 8-bay server that was designed to provide the power and storage needed for a great
home lab.

HARDWARE

COMPONENTS AND SPECIFICATIONS

Chassis Dimensions (LxWxH): 11.92"L x 7.93"W x 7.84"H

Below are the components that will be in your HL8 if you have not requested for any modification in the
order the below components will be present by default. Your CPU, motherboard, RAM, Boot drives etc.
could change based on your customization.

9
Version -1.1
ID Component Model - specs
1 Backplane HL – 4 Drive PCB Backplane x2
Optional: 1TB/500GB/250GB - Gen 4x4 NVMe
2 Boot Storage M.2
3 Cables miniSAS HD 0.6m
4 Cables MiniSAS SFF-8087 to miniSAS HD SFF-8643 50cm
5 Chassis HL8 Chassis
6 CPU Optional: Ryzen 5 5500GT or Ryzen 7 5700G
NF-A12x15 PWM 120mmx15mm Noctua x2
NF-A4x10 FLX 40mmx10 Noctua x1
7 Fans NH-L9a-AM4 Noctua CPU Cooler
8 Heatsink B8 2U Passive Cooler
9 Motherboard GIGABYTE B550I AORUS PRO AX 1.0
Copper transceiver (Optional with SFP+
11 Networking Motherboard)
12 Networking 2.5 GbE LAN
NVME Riser AOC-SLG3-2M2 – 2 Position M.2 NVMe Add on
13 Card Card (Optional)
FLEX GURU 500W 80 Plus Gold Certified
15 Power Supply Efficiency ≥90%
16 RAM 16GB DDR4 UDIMM
17 RAM 32GB DDR4 UDIMM
18 RAM 64GB DDR4 UDIMM

10
Version -1.1
INITIAL SETUP

INSERTING THE STORAGE DRIVES

Once your unit is unboxed or in its final destination you can now start installing the storage
drives.
It is best practice to install the drives from starting from index 1-1 and sequentially incrementing
in order.

11
Version -1.1
TThe drive should fit snugly into a slot. Make sure the back of the drive is facing the right when
placing in the slot

After all the drives are inserted into the slots, you can close up the unit and move on to hooking
up the needed cables to your unit.

CABLE SETUP

At this point, you should have the unit unboxed and storage drives installed. The next step is to connect
the cables needed to connect and configure the unit.

Fig: Back panel slots

No Component
1 2.5G port
2 BIOS USB 3.2 slot
3 BIOS Q-Flash Plus button
4 USB slot
5 USB slot
6 USB slot
7 USB slot
8 Type C slot
9 HDMI port
10 HDMI port
11 Display (DP) port
12 WIFI ports
13 MIC audio port
Table: Back panel slot details 14 LINE OUT audio port
15 LINE IN audio port
16 Power cable slot
You can connect a 1GB LAN cable from your router or
switch as per your 17 Power switch network setup. For the initial
connection to your unit, you can plug in the other end of the Ethernet/ LAN cable to provide
internet to the HL8 and where we will be accessing the data from the slot labeled 1 in the back
on the unit.
A HMDI or Display Port monitor will also be connected initially so you can see the see the
desktop/Graphical User Interface screen when the unit first turns on. You can connect the
monitor to the HMDI port (9)/(10) or Display Port (11).
If you want to configure the unit locally, a USB keyboard will also be beneficial. You can use any
of the USB slots labelled from 4 to 7 in fig above.
The last step would be to plug in the power cable. Slot labelled 16.

12
Version -1.1
After that you can turn on the power switch and the press the round blue power button to turn
on.

Power requirements

The PSU we provide with the appropriate options is a FLEX GURU 500W 80 Plus Gold Certified
Efficiency ≥90%
If you are sourcing your own power supply, you can use this as a minimum guideline. It is
especially important to ensure you have at least 20A of 5v power.
In addition, if you plan on using a graphics card, or anything that will increase power draw, you
may require a more powerful supply.

13
Version -1.1
45HOMELAB HL 8 INITIAL CABLING SETUP DIAGRAM

14
Version -1.1
INITIAL CONFIGURATION /SETUP

Now you have your HL8 all powered up and ready to be configured. Before we proceed you need to
have the below steps completed.

1. The power cables have been connected.


2. At least One of the 10G slots have a LAN cable plugged in.

NETWORK SETUP

USING THE DESKTOP UI

Login to the desktop UI using the 45drives user and 45Dr!ves as the password.

Once logged in we can check if our interfaces are up


Open a terminal and type the command ip a to check if your interface is up. You should be able
to see that a broadcast carrier is available like below.

15
Version -1.1
Go to the applications in the top left corner. Go to settings -> Advanced network Configurations

You should be able to see your network connections/ interfaces there


It will either show the interface name or might say like wired connection1, 2 etc
You can double click on it to check the actual interface name
If the interface is not showing you can click on the plus sign and add a new ethernet connection.

16
Version -1.1
Edit the interface and go to the IPV4 settings section to set the IP. Change the method to manual
for setting the static IP and click on add to enter the IP details.

17
Version -1.1
Once the details have been entered click save

18
Version -1.1
After this you can start setting password for your root user using below command in the terminal and set
the password.

SETTING THE NETWORKING USING NMTUI

This is just an addition option to set up network other than using the UI. You can ignore this if you have
already set the IP using the UI and move to the Houston login and config section.

You can run “ip -c a” to show your interfaces with colored IP addresses. This helps to distinguish
what you’re looking at.

Fig – showing connection detected on the network interfaces

So, you can see in the above diagram that the interface eno1 has carrier detected which means
there is a LAN cable connected to NIC slot.
Similarly, eno2 has no carrier which means its not connected. If it is connected and still not
detected it will need further troubleshooting.
Once you have your interface connected with the carrier detected next step is to set a static ip for
your HL8.
19
Version -1.1
We will be using this IP going forward to access the HL8.

Setting Static IP

Run the command “nmtui” to access NMTUI, network manager.

Fig: NMTUI

First, we will set a static IP. Click Edit a connection.


Select the interface that we want to set the static IP. This example it is eno1. Select that interface
and click on edit.

20
Version -1.1
In case the interface names show up as wired connection 1,2 etc you can select that and confirm
what the actual interface name is by checking device name like below screenshot.

Navigate to IPv4 configuration and change automatic to manual and then click show.

21
Version -1.1
Here we can enter our static IP information. Be sure to remember to add your subnet after your
IP address. (Most common would be /24, which correlates to a subnet mask of [Link]) If
you will be joining a domain, you can set your HL8’s DNS. Click OK. (Even if you aren’t joining a
domain, if you want to be able to resolve internet addresses via names you will need to give a
DNS whether its a public one or an internal one. Because were setting a static IP, if you don’t
include a DNS at all you won’t be able to download packages or anything because it needs DNS.)

Fig – Setting static IP

Next, click Back and then click on Activate a connection.

22
Version -1.1
You will need to activate that interface .

Deactivate and reactivate the interface. This resets the connection and ensures proper
communication. (If you as SSH’d over the interface that you are working on, deactivating will kick
you out of your SSH session, so you will need to do this when you are physically at the HL8.

Setting a Bond

Click Edit a connection, and click Add.

Fig – Add Bond


For the type of connection, select Bond.

23
Version -1.1
Enter your Profile name and Device name. For this example, we have used Bond1. Under Slaves,
click Add and select Ethernet.

For this example, we will be using the NIC ports. Enter your interface name under Profile name
and Device, and click OK.
Do the same for ens7f1. Your Slaves table should look like this.

24
Version -1.1
Add your IP address info for your bond, and click OK.

25
Version -1.1
Here we can see our bond has been created.

26
Version -1.1
Click Back, and go to Activate a connection. Highlight Bond1 and Deactivate it.
Now activate it. Make sure the two slave ports are deactivated.

Now, run another “ip a” command. Your bond is now listed.

27
Version -1.1
HOUSTON LOGIN AND CONFIG

You should already have the Houston modules installed in your HL8. You can access Houston UI at
[Link] .

If the Houston UI is not loading do check if the cockpit service is running and enable it using below
command

You can check using systemctl status cockpit and if its not active enable it using below commnd

systemctl enable --now [Link]

You can use the root account you created and the password or the 45drives user as well to login. Root
account would have the elevated privileges.

28
Version -1.1
CREATING ZPOOL

Once we’re logged into Houston, you should see a list of modules. You will see the ZFS tab. Click
on this to continue.

On the top right of the ZFS page you will notice Storage Pools. Click on this to begin creating your
first storage pool. When we create a pool with ZFS, we select the drives we want to be part of
the pool. In our case all 15 drives

Provide a name for your new storage pool, in this test environment we have named the pool
tank in this example.
Select which raid you would like to use under “Virtual Device “. We usually recommend RAIDZ2
which is equivalent to RAID 6 and has two drive redundancy. You may use RAIDZ1 for 1 drive
redundancy but will not have as much available data to utilize as the system can only hold 8
drives. If this is critical data, we certainly would recommend you going with RAID2.
Then select your hard drives and click on “Create” to finish. Ensure you uncheck Disks WWN, and
then select “Device Alias” so the pool is created with the Disk Aliasing to easily identify drives (i.e
1-1, 1-2, etc.)

We do not recommend setting “refreservation” below 10%. With this disabled we can write to the
29 point the pool may be unusable and data could be lost.
ZFS Pool/Dataset and fill it entirely, at which
Version -1.1
s

CREATING ZFS FILESYSTEM/DATASET

With your new storage pool created, we can now create some datasets to share out. You will see
Create Filesystem. Click on this to continue.

30
Version -1.1
In the new window that appears, give your new filesystem a name. We can leave all of the
options at the default settings. In this example, we have used nfs.

If you wish you can change those other parameters as per your preference and even set quota as
well.
Once you click on create you will have your dataset created.

Now you will be able to see your ZFS pool, datasets, and drives within the File Systems Tab, and
Status Tab within the ZFS module.
If you are to run zpool status command within the Terminal you should see the output of the ZFS
Pool, it’s VDEVs, and Disks.

31
Version -1.1
You can create as many datasets you want based on how many shares you are planning to
create.

If you are unable to create the pool, ensure the drives you are using are free of any
partitions.

Ensure the disks you are using to create the pool are of the same size

CREATING YOUR SHARES

Once you have your pool and dataset created next step is to create network shares. You can either create
SAMBA/NFS shares.

Samba/SMB shares

 Make sure SMB Services Running and Enabled


 SMB Ports Open on Firewall (133/tcp, 445/tcp and 137/udp, 138/udp)

In Houston UI, navigate to the File Sharing tab. And click on the Samba tab, if not selected.

Once here, we can begin configuring our SMB Shares

32
Version -1.1
First, we can add any options to the Global SMB configuration.
Here we can change the Server Description, the Workgroup, Log Level, and add any additional
parameters to the SMB configuration in the Advanced Settings box by clicking the down arrow.
For example, here we’ve added a few parameters to help with MacOS performance on an SMB
share.

Next, we can create an SMB share, we can scroll down to Shares and select the Plus button to
begin.
Here we can set the SMB Share Name, a Description, the Path to be shared out. It will be
usually /pool_name/dataset_name (you can now create the path here instead of ZFS)

33
Version -1.1
if we are domain joined, we can select to use Windows ACLs.

We can specify any Valid Users and Valid Groups, allow Guest Access, make the SMB share Read
Only, make it Browsable, and enable Windows ACLs, as well as some other options.

Adding options to the SMB share

We can also add any additional options in the Advanced Settings box via the drop-down arrow.
In the Advanced Settings box, we entered “inherit permissions = yes” ourselves. This is to make
sure that the permissions are inherited from the parent folder.
There are a few preselected options we can enter into the Advanced Settings box by selecting
one of the buttons below: Shadow Copy, MacOS Share, Audit Logs.
Here we can see we’ve created a share called “samba” with a description of “smb-share“. It is
pathed to our ZFS dataset at “/tank/samba“. We have added the “administrator” to Valid Groups,
and left the share Browsable.

Here we can see our SMB share is created.

34
Version -1.1
 If you were to run “testparm -s” on the command line you will see your samba
share has been added and configured properly in its own section.
Verification

35
Version -1.1
Setting up Local User Access SMB Shares

This is to create local users and groups and add them to provide access to your samba share.

Go to the identities tab in Houston

Click the ‘Users’ section, this will open a page with a list of users. Select “New User”.

Fill in the Username, Full Name/Description. Then click “Apply”. It is also possible to assign this
new user to a group at the bottom of the prompt. If applicable it can be done here, or a user can
be assigned at a later time.

36
Version -1.1
A prompt will come up to set the users password. This is a local Linux password, it can be used to
SSH into the machine, or to authenticate to Houston.

The user generation will complete successfully. The user should now be able to authenticate to
Houston or SSH with that password.

37
Version -1.1
The below sections will detail assigning a user to a specific group, and setting an SMB password
if applicable.

Assigning a Linux Group to a User

In the “Users” section the new user should be seen. Click on the user to assign a group.

Click on the “+” under the Groups section.

A dropdown will pop up and you can now select a group to assign to the user.

The newly added group should be displayed under the Groups section. Click “Apply” to save
changes.

38
Version -1.1
Configuring a Samba Password for a User

Select the user you wish to assign a Samba password. The Samba password will need to be set to
allow users to authenticate to Samba shares. It can be the same as the Linux password, but does
not have to be. Click on “Set Samba Password”. Enter a password and click “Apply”.

39
Version -1.1
Set SMB permissions using local users and group

Click on the edit button of the share you want to add the user to grant the permissions.

Click on edit permissions

40
Version -1.1
Select the owner and the group for the share and set the permissions as well as per your
preference.

41
Version -1.1
You can also select valid users and groups if you want to provide access to multiple of them.

Now you can verify by connecting the share.

Connecting to SMB Share on Windows and MacOS

Connecting to SMB Share on Windows

On a Windows client, go to This PC in File Explorer.


Right click and select Map network drive.

In this menu, enter the server IP address in the following format \\SERVER-IP\SHARE-NAME and
select Connect using different credentials.

42
Version -1.1
Enter the login to connect to the SMB share.

43
Version -1.1
Here we can see our SMB share is connected, and we can create a folder.

Connecting to SMB Share on MacOS

At the toolbar on the top of the screen, press Go and then “Connect to Server…“.

44
Version -1.1
In the address bar, enter smb://SERVER-IP/SHARE and click Connect. We can also select the plus
at the bottom to save this information if we need to reconnect.

Enter the login to connect to the SMB share.

45
Version -1.1
Here we can see our SMB share is connected, and we can create a folder.

Managing NFS in Houston UI

 NFS Packages Installed


 NFS Services Running and Enabled
 NFS Ports Open on Firewall (2049/tcp, and 2049/udp if NFSv3)

In Houston UI, navigate to the File Sharing tab.


Once in that page, we can select the NFS Tab to begin configuring our NFS shares.

46
Version -1.1
We first begin to create our NFS export by selecting the Plus Icon on the right.
We can define the path to be shared out. It would be usually /pool_name/dataset_name
select the range of IPs for client access, and add any additional NFS options to our share.
If we leave Client IP empty, it will default to everyone, and if we leave Options empty, it will
default to ‘rw,sync,no_subtree_check’

Here we create an NFS share, with a path to our NFS dataset at /tank/nfsfs. We have set the
Client IP to be available to 192.168.*.*. For settings you can give
“rw,sync,no_subtree_check,no_root_squash“

47
Version -1.1
If you haven’t opened the firewall ports then follow the below steps

48
Version -1.1
Mounting NFS Share to Linux Client

Here we will discuss on the process of mounting an NFS share to a Linux client and to mount on reboot.

Go the terminal and run the command below to install the nfs package

install nfs-utils

To mount an NFS share, first create a directory to mount it to.

mkdir /mnt/(mount_point)
eg :

Now use this command to mount it to the share. Edit the fields for your specific case, i.e. Server
IP, Pool Name, and Share Name. See example below.

mount -t nfs {ServerIP}:/(pool_name)/(nfs_share_name) /mnt/(mount_point)

Add Mount on Reboot

49
Version -1.1
To allow the share to mount on reboot, you will need to edit the fstab. You can use your
preferred text editor, here we have used vim.

vim /etc/fstab

Add the mount point in the format see below.


{ServerIP}:/(pool_name)/(share_name) /mnt/(mount_point) nfs defaults,_netdev 0 0

Verify Share Mounted

To ensure the share has mounted, you can run the command df.

Verify Mount on Reboot

To ensure the share will mount on reboot after editing the /etc/fstab, unmount the share.

50
Version -1.1
umount /mnt/nfs_share

Remount the share using the following command, this command will mount all shares in the
/etc/fstab file.

mount -a

Run the command df again to ensure the share was mounted.

51
Version -1.1
SETUP ISCSI STORAGE
Install necessary packages for iSCSI

dnf -y install targetcli

Create a ZFS dataset with your naming scheme of choice, in this case we’ll use “images”.
Multiple iSCSI LUNs can be stored in this singular dataset or new datasets can be created for
each iSCSI LUN.

Configuring iSCSI Target

Before using targetcli, we’ll need to create a sparse image file. Creating large files in targetcli
can be a very time-consuming process.
cd /tank/images
52
Version -1.1
dd if=/dev/zero of=lun0 bs=1 count=0 seek=1T

The above will create a 1 TB sparse image file named “lun0”


Now we’ll launch targetcli and create a fileio backstore with the sparse image we’ve
created.
targetcli
cd backstores/fileio
create lun0 /tank/images/lun0

Verify the block device has been created in targetcli

Create an iSCSI Target

Create the iSCSI target by selecting a name


Naming scheme: [Link]:unique
For this example, we’ll be using “[Link]:[Link]”

53
Version -1.1
cd /iscsi
create [Link]:[Link]

Create iSCSI LUNs

cd [Link]:[Link]/tpg1/luns
create /backstores/fileio/lun0

Configure ACL (Initiator IQN)

When creating the ACL, it needs to be the name of the initiator IQN name of the client that
will be connecting to the LUN.
In this example, the IQN name of the client will be “[Link]:client”

Configure Authentication

We’ll need to configure the userid and password when connecting to the LUN from the client.
This step is optional.
Choose any name and password for userid and password

set auth userid=username


set auth password=password

54
Version -1.1
Exit and Save the Configuration

Open Firewall for iSCSI and enable the iSCSI service

In the Houston UI, navigate to Networking > Firewall > Edit Zones and Rules
Add “iscsi-target” to the services

In the Houston service tab, search for “target” and enable the Targetcli daemon

55
Version -1.1
Verification /Connecting to the LUN

On a Windows client, open “iSCSI Initiator”


Enter the target IP address into the ‘target’ field

56
Version -1.1
Click ‘quick connect’

57
Version -1.1
In Disk Management, there should now be a new disk that is unallocated and ready for
formatting.

58
Version -1.1
AUTOMATED ZFS REPLICATION/SNAPSHOTS IN HOUSTON UI

Make sure to install mbuffer and remove the old auto snapshot service on all Storinators you
wish to use snapshots to use with znapzend.

dnf install mbuffer

systemctl restart znapzend

In the Houston UI, go to the ZFS tab.

59
Version -1.1
Select the Dataset you wish to backup. Click the drop down on the left and select “Configure
Replication Task

The screenshot below details a task that takes a snapshot once daily, and retains the snapshots
for 1 month. This can be customized to your use case.
Also, you can add multiple rules by clicking the +, for example setup below is for every hour for 7
days, every 4 hours for 30 days, and every 90 days for a year.

60
Version -1.1
Make sure to restart the ‘znapzend’ service after any change has been
made to snapshot tasks

To ensure the snapshots are being created you can go to the Snapshots section of the ZFS to see
all snapshots that were created.

61
Version -1.1
SOFTWARE

45HomeLab comes with Rocky as the default OS and Houston UI for the server management. Apart from
that you can install other software stacks as well as per your preference. We have included some of them
for your reference.

PORTAINER

With the help of Portainer, you can easily interact with containerized programs, monitor your Docker
installation, and set up new stacks. To centralize your container administration around a single
application, a single Portainer instance may link to numerous Docker hosts.

Make sure docker is installed before you proceed. If not installed you can refer
[Link]

Create the docker volume


docker volume create portainer_data

docker run -d -p 8000:8000 -p 9443:9443 --name portainer --


restart=always -v /var/run/[Link]:/var/run/[Link] -v
portainer_data:/data portainer/portainer-ce:latest
62
Version -1.1
The portainer will be on port 9443 so access it using [Link]
Make sure the port is open in firewall.
Create the admin user

You can click on getting started.


You can check more on the documentation at [Link]
63
Version -1.1
You should have portainer local environment like below

Now you have your portainer ready to deploy other software stacks.

64
Version -1.1
NEXTCLOUD AND NPM ON PORTAINER

You will need portainer to be installed and configured first before installing NextCloud.
In portainer navigate to "Images" and select Build a New Image:

Name the new image "45cloud" and paste the contents of


[Link]

65
Version -1.1
Then click "Build the image", this will start the build process, wait until this completes.
Then navigate to the "Stacks" tab, and click "Add Stack"

Name the stack nextcloud-nginx and paste the following into the text box:
If you already have Nginx Proxy Manager installed remove those NPM sections from the text
below when pasting into the web editor.

66
Version -1.1
Paste the below contents on the web editor. You can copy it from the link below so that .yml file
formatting is not lost [Link]
[Link]

67
Version -1.1
version: "3"
volumes:
nextcloud-data:
nextcloud-db:
npm-data:
npm-ssl:
npm-db:
networks:
frontend:
backend:
services:
nextcloud-app:
image: 45cloud:latest
restart: always
volumes:
- nextcloud-data:/var/www/html
environment:
- MYSQL_PASSWORD=thisisjustatest
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=nextcloud-db
- PHP_UPLOAD_LIMIT=200G
networks:
- frontend
- backend
nextcloud-db:
image: mariadb:10.5
restart: always
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
volumes:
- nextcloud-db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=thisisjustatest
- MYSQL_PASSWORD=thisisjustatest
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- OVERWRITEPROTOCOL=https
networks:
- backend
npm-app:
image: jc21/nginx-proxy-manager:2.9.19
restart: always
ports:
- "80:80"
- "81:81"
- "443:443"
- "8900:8900"
- "32400:32400"
- "2283:2283"
environment:
- DB_MYSQL_HOST=npm-db
- DB_MYSQL_PORT=3306
- DB_MYSQL_USER=npm
- DB_MYSQL_PASSWORD=thisisjustatest
- DB_MYSQL_NAME=npm
volumes:
- npm-data:/data
- npm-ssl:/etc/letsencrypt 68
networks: Version -1.1
- frontend
- backend
npm-db:
image: jc21/mariadb-aria:latest
restart: always
environment:
- MYSQL_ROOT_PASSWORD=thisisjustatest
- MYSQL_DATABASE=npm
- MYSQL_USER=npm
- MYSQL_PASSWORD=thisisjustatest
volumes:
- npm-db:/var/lib/mysql
networks:
- backend

Click Deploy Stack and wait for it to finish


At this point all configuration steps are identical to:
[Link]
ubuntu-20-04/
Nginx Proxy Managers webUI will be available at port :81 with admin@[Link] and
changeme credentials.
When creating your proxy host use the name of the container found in the containers tab of
portainer.

69
Version -1.1
INSTALLING NGINX PROXY MANAGER(NPM) ON PORTAINER

If you need NextCloud to be installed as well, please follow the steps on the NextCloud Section that will
handle the deployment of both NextCloud and Nginx proxy manager.

If you have already installed NextCloud using the steps above. You can ignore this separate installation as
Nginx is already installed with NextCloud install above.

If not, below would be the steps to install NPM to set up proxy for custom ports for various applications.

Go to your portainer home and select your environment.


Click on stacks and add a new stack.

Give a name for your stack. For example, we can give npm.
Paste the below contents on the web editor. You can copy it from the link below so that .yml file
formatting is not lost.

[Link]

70
Version -1.1
version: '3'
volumes:
npm-data:
npm-ssl:
npm-db:
networks:
frontend:
backend:
services:
npm-app:
image: jc21/nginx-proxy-manager:2.9.19
restart: always
ports:
- "80:80"
- "81:81"
- "443:443"
environment:
- DB_MYSQL_HOST=npm-db
- DB_MYSQL_PORT=3306
- DB_MYSQL_USER=npm
- DB_MYSQL_PASSWORD=thisisjustatest
- DB_MYSQL_NAME=npm
volumes:
- npm-data:/data
- npm-ssl:/etc/letsencrypt
networks:
- frontend
- backend
npm-db:
image: jc21/mariadb-aria:latest
restart: always
environment:
- MYSQL_ROOT_PASSWORD=thisisjustatest
- MYSQL_DATABASE=npm
- MYSQL_USER=npm
- MYSQL_PASSWORD=thisisjustatest
volumes:
- npm-db:/var/lib/mysql
networks:
- backend

After that click on deploy stack and wait for the deployment to be completed.

71
Version -1.1
Nginx Proxy Managers webUI will be available at port :81 [Link] with
admin@[Link] and changeme credentials.

Once in set the admin account email id and password

After that you can start creating your proxies.

72
Version -1.1
CONFIGURING PLEX PORTAINER

Go to portainer and create a new volume called plex_config

Then go to create a container name as you want example "plexmedia"


For the image give linuxserver/plex:latest

73
Version -1.1
Under volumes click on map additional volume and create a volume with container path of
/config to the volume you created in step 1

Click on map additional volume and create a second bind volume with container path to /media.
This name can change to whatever and bind it to the host path that they want to store media
such as a zpool, etc. (here we can used our path in the zpool where our storage is).

Under network select the nginx proxy frontend network

74
Version -1.1
Under ENV click on add environment variable and throw in PGID 1000 and PUID 1000. Here 1000
is the ID of the user that we are given ownership of the content, so add the ID accordingly.

Select a restart policy of unless stopped

deploy the container

You should be able to see that the container is deployed and running.

75
Version -1.1
Nginx Proxy Managers web UI will be available at port :81 with admin@[Link] and
‘change me’ credentials.
When creating your proxy host use the name of the container found in the containers tab of
portainer.
Create a proxy host with domain name IP:PORT or DNS name if they are port forwarding or have
a hostname select scheme (http/https), forward hostname is the name of the container and
forward port by default would be 32400. Then under advanced custom nginx config put in "listen
32400;"
Click on proxy hosts

Add proxy host

76
Version -1.1
In the advanced give the below and save

Now you can access your plex using [Link]


Make sure the port is open in firewall.
Sign in or create a plex account

77
Version -1.1
78
Version -1.1
After that you can set up the library as per your wish

79
Version -1.1
Click on add libraries

You can select the library type and then select the media folder that we had linked to our storage
in HL8

80
Version -1.1
After that select the folder, we are selecting media as we had given that during our container
creation.

81
Version -1.1
Then you can scan the library for the existing files

You will be able to see the videos that are there in your server in the dataset or path you had
given.

You can check [Link] for more


guides and info.

82
Version -1.1
IMMICH - self-hosted backup solution for photos and videos

Go to "Stacks" in the left sidebar.


Click on "Add stack".
Give the stack a name (i.e. Immich), and select "Web Editor" as the build method.
Copy the content of the [Link] file (github repo -
[Link] )

version: "3.8"

services:

immich-server:

container_name: immich_server

image: [Link]/immich-app/immich-server:${IMMICH_VERSION:-release}

command: ["[Link]", "immich"]

volumes:

- ${UPLOAD_LOCATION}:/usr/src/app/upload

- /etc/timezone:/etc/timezone:ro

- /etc/localtime:/etc/localtime:ro

env_file:

83
Version -1.1
- [Link]

depends_on:

- redis

- database

- typesense

restart: always

immich-microservices:

container_name: immich_microservices

image: [Link]/immich-app/immich-server:${IMMICH_VERSION:-release}

# extends:

# file: [Link]

# service: hwaccel

command: ["[Link]", "microservices"]

volumes:

- ${UPLOAD_LOCATION}:/usr/src/app/upload

- /etc/timezone:/etc/timezone:ro

- /etc/localtime:/etc/localtime:ro

env_file:

- [Link]

depends_on:

- redis

- database

- typesense

restart: always

immich-machine-learning:

container_name: immich_machine_learning

image: [Link]/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}

volumes:

- model-cache:/cache

env_file:

- [Link]

84
Version -1.1
restart: always

immich-web:

container_name: immich_web

image: [Link]/immich-app/immich-web:${IMMICH_VERSION:-release}

env_file:

- [Link]

restart: always

typesense:

container_name: immich_typesense

image:
typesense/typesense:0.24.1@sha256:9bcff2b829f12074426ca044b56160ca9d777a0c488303469143dd9f8259
d4dd

environment:

- TYPESENSE_API_KEY=${TYPESENSE_API_KEY}

- TYPESENSE_DATA_DIR=/data

# remove this to get debug messages

- GLOG_minloglevel=1

volumes:

- tsdata:/data

restart: always

redis:

container_name: immich_redis

image: redis:6.2-
alpine@sha256:70a7a5b641117670beae0d80658430853896b5ef269ccf00d1827427e3263fa3

restart: always

database:

container_name: immich_postgres

image: postgres:14-
alpine@sha256:28407a9961e76f2d285dc6991e8e48893503cc3836a4755bbc2d40bcc272a441

env_file:

- [Link]

85
Version -1.1
environment:

POSTGRES_PASSWORD: ${DB_PASSWORD}

POSTGRES_USER: ${DB_USERNAME}

POSTGRES_DB: ${DB_DATABASE_NAME}

volumes:

- pgdata:/var/lib/postgresql/data

restart: always

immich-proxy:

container_name: immich_proxy

image: [Link]/immich-app/immich-proxy:${IMMICH_VERSION:-release}

environment:

# Make sure these values get passed through from the env file

- IMMICH_SERVER_URL

- IMMICH_WEB_URL

ports:

- 2283:8080

depends_on:

- immich-server

- immich-web

restart: always

volumes:

pgdata:

model-cache:

tsdata:

Click on "Advanced Mode" in the Environment Variables section.

86
Version -1.1
Copy the content of the [Link] from below and paste into the editor. (github repo -
[Link] )

# You can find documentation for all the supported env variables at
[Link]

# The location where your uploaded files are stored

UPLOAD_LOCATION=./library

# The Immich version to use. You can pin this to a specific version like "v1.71.0"

IMMICH_VERSION=release

# Connection secrets for postgres and typesense. You should change these to random passwords

TYPESENSE_API_KEY=some-random-text

DB_PASSWORD=postgres

# The values below this line do not need to be changed

###################################################################################

DB_HOSTNAME=immich_postgres

DB_USERNAME=postgres

DB_DATABASE_NAME=immich

REDIS_HOSTNAME=immich_redis

Switch back to "Simple Mode".


Populate custom database information if necessary.
Populate UPLOAD_LOCATION with your preferred location for storing backup assets.
Click on "Deploy the stack".

Immich will be accessible via [Link]


Make sure the port is open in firewall.

Post installation you can you can use the guide below to set up
[Link]

87
Version -1.1
Immich user guide
Uploading Pictures

For First-Time Users

On the main home page, you'll see a noticeable box labeled "CLICK TO UPLOAD YOUR FIRST
PHOTO." Click on it to begin the upload process.

For Users with Existing Uploads:

If you already have pictures uploaded, simply click the "Upload" option located in the top-right
corner of the screen. This will allow you to select images, videos, or other media from your local
computer. **YOU MUST BE IN THE PHOTOS TAB FOR THE UPLOAD BUTTON TO APPEAR**

Explore Tab

Within the Explore tab, you have access to a range of tools that make searching and viewing your
photos a breeze. Leveraging the capabilities of ChatGPT, facial recognition, and geolocation
technology, finding your pictures has never been more convenient.

You can also narrow down your search by categories such as Favorites, Recently Added, Videos,
Motion Pictures, and Panorama Photos, making it

Map Tab

In the Map tab, you can harness the geolocation data of your photos to visualize them on a
world map. This feature allows you to see exactly where each of your photos was taken,
providing a unique and interactive way to explore your memories.

Inside Map Settings, you have the capability to adjust the map's visual mode (dark or light),
decide whether to display only your favorite photos on the map, and specify a date range for the
displayed photos. These options enable you to tailor your map experience to your preferences.

Sharing Tab

Within the Sharing tab, you have the capability to create shared albums with other IMMICH
members or share album links with individuals who don't have IMMICH accounts. This feature
simplifies the process of sharing your albums with others, regardless if they use IMMICH or not.
88
Version -1.1
Library

Favorites Tab

In the Favorites tab, you can conveniently locate all the photos you've marked as your favorites.
This tab serves as a dedicated space where your cherished photos are readily accessible.

Albums Tab

In the Albums tab, you can seamlessly create and organize photos into distinct albums. This
feature allows you to categorize your photos and easily access them based on the specific
albums they belong to.

Archive Tab

In the Albums tab serves as a storage space for your photos, keeping them separate from the
main photo view. This feature is useful for safely tucking away photos that you may not want
readily accessible or visible in the main photos tab or to other users.

Mobile App

Settings

In the Albums tab serves as a storage space for your photos, keeping them separate from the main photo
view. This feature is useful for safely tucking away photos that you may not want readily accessible or
visible in the main photos tab

Administration
When logged into IMMICH as an administrative account in the WebUI, you will notice an
"Administration" button located in the top-left corner. Clicking this button will navigate you to the
administration window, where you can access and configure all the administrative settings for IMMICH.

Users

Within the "User" tab, you have the ability to both view existing users and manage them by adding or
removing users as needed. To make changes to a user's settings, simply locate the user and click on the
blue pencil icon situated to the right of their entry. This enables you to edit various aspects of their
profile, such as their email address, name, storage label, external path, and even reset their password.

Furthermore, each user account has its dedicated personal settings accessible by clicking on your name
or icon located in the top right corner. Within this section, you can perform various actions, including

89
Version -1.1
managing your account details, handling API keys, authorizing devices, managing memories, overseeing
password settings for your account, and configuring sharing preferences.

Jobs

When in the 'Jobs' tab, you can conveniently monitor all currently active tasks, such as generating
thumbnails, extracting metadata, sidecar metadata, tagging objects, encoding clips, recognizing faces,
transcoding videos, and handling storage template migration jobs, which can be initiated from the
bottom of the page. Furthermore, you have the option to control the concurrency settings by navigating
to the top right corner of the page, where you will find a blue box labeled 'Manage Concurrency”.

Settings

Inside the settings tab, we have a number of options to choose from. Starting with Job Settings - These
settings are the same settings that are found in the jobs tab in the “manage concurrency” button.

Machine Learning – In this section, you can configure Machine Learning settings, including the
option to enable or disable features such as Image Tagging, Smart Search, and Facial
Recognition.
Map Settings – n this section, you have the flexibility to enable or disable the map features, and
you can also modify the tile URL if needed.
OAuth Authentication – In this section, you have the ability to control the login settings using
OAuth. You can manage various parameters such as the Issuer URL, Client ID, Client Secret,
Scope, Storage Label Claim, Button Text, as well as options like Auto Register, Auto Launch, and
Mobile Redirect URL override
Password Authentication – In this section, you can toggle the option to log in using a username
and password, allowing you to either enable or disable this feature.
Storage Template – In this section, you can customize how your images and videos are saved, as
well as configure the desired file structure.
Thumbnail Settings – Here, you have the option to modify the resolution of both small and large
thumbnails, as well as fine-tune the quality percentage. Additionally, there's a setting available
for those who prefer the Wide Gamut display.
Video Transcoding Settings – This tab is for the bit more advanced users. Here we manage the
resolutions and encoding information of the video files. We can find things such as:
 Constant Rate Factor (-crf)
 Present (-present)
 Audio Codec
 Video Codec
 Target Resolution
 Max Bitrate
 Threads
 Transcode Policy
 Tone-Mapping
90
Version -1.1
 Two-Pass Encoding

This is also two subdirectories inside the Video Transcoding settings being

 Hardware Acceleration (Experimental)


 And Advanced in side advanced are settings most users will not need to change

Server Status
In the Server Status tab, you can access information like the total number of photos and videos stored,
as well as the amount of storage used. Additionally, you can view detailed user usage data, which
provides insights into the number of photo and video uploads for each individual user.

You can also check the server status, version, and storage usage from any page or tab by looking in the
bottom left corner of the WebUI interface.

CLI Commands
You can find the CLI and bulk upload commands / guides here

[Link]

91
Version -1.1
HOME ASSISTANT

An Open-source home automation that puts local control and privacy first. Powered by a worldwide
community of tinkerers and DIY enthusiasts.

Method 1 - Portainer deployment

This is the bare minimum to get the container up and running, to access the

Home Assistant web UI.

1. Go to your portainer UI —> stacks —> “Add Stack” —> Web editor —> Paste your docker-
[Link]

version: "3.9"
services:
homeassistant:
image: homeassistant/home-assistant:stable
container_name: homeassistant
network_mode: host
environment:
- TZ=America/Halifax
volumes:
- /opt/docker/stack/home_assistant/config:/config
restart: unless-stopped

The only things that need to change in this file are the time zone (TZ) and the volume path.
92
Version -1.1
2. Click “Deploy the stack”.
3. Navigate to [Link]
4. Make sure the port is open in firewall.
5. Follow guided Home Assistant Web UI setup.

Method 2 - Deploying in Rocky Terminal

Step 1: Create a Docker Compose file

Create a directory for your Home Assistant configuration, and inside this directory, create a
[Link] file

mkdir -p /opt/docker/stack/home_assistant
cd /opt/docker/stack/home_assistant
vim [Link]

In the [Link] file, paste the following content:

version: "3.9"
services:
homeassistant:
image: homeassistant/home-assistant:stable
container_name: homeassistant
network_mode: host
environment:
- TZ=America/Halifax #Replace with your timezone
volumes:
- /opt/docker/stack/home_assistant/config:/config
restart: unless-stopped

Save the file and exit the editor.

Step 2: Start the Service

Run Docker Compose from the same directory as your [Link] file:

docker-compose up -d

93
Version -1.1
This command will pull the necessary image and start the container in the background.

Step 3: Accessing Home Assistant

Since you're using network_mode: host , you can access the Home Assistant UI by navigating to
[Link] or [Link] if you're on the host machine, replacing <host-ip> with
the actual IP address of your host.

Additional Notes:

Ensure that no other services are using port 8123 on your host.
If you face any issues accessing Home Assistant, consider checking firewall rules or network
policies that might be blocking the port.

WIREGUARD - fast, modern, and secure VPN tunnel

Go to "Stacks" in the left sidebar.


Click on "Add stack".
Give the stack a name (i.e. wireguard), and select "Web Editor" as the build method.
Copy the content of the [Link] file
You will need to set a secure password in the section in the .yml (WGUI_PASSWORD) file if you
are planning to do port forwarding.

version: "3"
services:
wireguard:
image: linuxserver/wireguard:latest
container_name: wireguard
cap_add:

94
Version -1.1
- NET_ADMIN
volumes:
- ./config:/config
ports:
- "5000:5000"
- "51820:51820/udp"

wireguard-ui:
image: ngoduykhanh/wireguard-ui:latest
container_name: wireguard-ui
depends_on:
- wireguard
cap_add:
- NET_ADMIN
network_mode: service:wireguard
environment:
- SENDGRID_API_KEY
- EMAIL_FROM_ADDRESS
- EMAIL_FROM_NAME
- SESSION_SECRET
- WGUI_USERNAME=admin
- WGUI_PASSWORD=kGMrU6S7(+`Ah93ENLK><8
- WG_CONF_TEMPLATE
- WGUI_MANAGE_START=true
- WGUI_MANAGE_RESTART=true
logging:
driver: json-file
options:
max-size: 50m
volumes:
- ./db:/app/db
- ./config:/etc/wireguard

Click on "Deploy the stack".


If you want to do port forwarding after that you could follow that steps as well.

95
Version -1.1
FRIGATE - open-source NVR built around real-time AI

This is the bare minimum to get the container up and running and will need

further configuration based on your specific environment, cameras,

needs,storage etc.

Environment:

rocky 8
docker files in default location /var/lib/docker
Example containers location & structure

[Link]

version: "3.9"
services:
frigate:
container_name: frigate
image: [Link]/blakeblackshear/frigate:stable
privileged: true # This may not be necessary for all setups
restart: unless-stopped
shm_size: "64mb" # Update for your cameras based on calculation above
ports:
- "5000:5000" # WebUI
- "8554:8554" # RTSP feeds
- "8555:8555/tcp" # WebRTC over TCP
- "8555:8555/udp" # WebRTC over UDP
environment:
FRIGATE_RTSP_PASSWORD: "password"
volumes:
- /etc/localtime:/etc/localtime:ro
96
Version -1.1

- /opt/docker/stack/frigate/config:/config # Mounting config directory


- frigate_media:/media/frigate
- type: tmpfs
Note: Ensure to use the image in the [Link] searching will often provide results for the
depreciateds images.

Explanation of [Link]

1. version: "3.9"

Defines the version of Docker Compose file syntax. 3.9 is a specific version of the

Docker Compose file format.

2. services:

Defines the services (containers) to be created.

2.1 frigate:

Defines the name of the service (container) to be created.

2.2 container_name: frigate

Specifies the name of the container that will be created.

2.3 image: [Link]/blakeblackshear/frigate:stable

Specifies the Docker image to be used for this service, pointing to Frigate’s stable release.

2.4 privileged: true

Allows the service to access the host's devices and possibly other privileged

functionalities.

2.5 restart: unless-stopped

Ensures the container will restart automatically unless explicitly stopped by the user.

2.6 shm_size: "64mb"

Allocates shared memory for the container, useful when your application has specific

memory requirements.

2.7 ports:

Maps the container's ports to the host's ports.

2.8 environment:

Sets environment variables within the container.

2.9 volumes:

97
Version -1.1
Mounts host paths or named volumes to paths inside the container.

 /etc/localtime:/etc/localtime:ro binds the host's timezone settings to the container in read-only


mode.
 /opt/docker/stack/frigate/config:/config binds the configuration directory from the host to the
container.
 frigate_media:/media/frigate creates a named volume for storing media.
 type: tmpfs creates a temporary filesystem in memory, providing high-speed read/write access.

3. volumes:

Defines named volumes used by services.

3.1 frigate_media:

This is a named volume declaration, which creates persistent storage independent of

the container lifecycle, used here for storing media.

Additional Notes:

 FRIGATE_RTSP_PASSWORD: "password" is setting an environment variable with the password for


RTSP access. This will be found in your cameras configuration settings
 "5000:5000" makes the web UI of Frigate accessible on port 5000 of the host machine.
 "8554:8554" is for RTSP feeds, "8555:8555/tcp" and "8555:8555/udp" are for WebRTC over TCP
and UDP, respectively.
 Each line in this file serves to configure the behavior, access, or setup of the Docker container or
its interaction with the host system or other containers.

[Link]

The [Link] file is used to specify configuration settings for Frigate. Frigate needs this file to know how
to connect to your cameras, how to process the video streams, how to interact with other services, and
many other settings.

Ensure you have this file created & populated with the correct path in your [Link] before
running the container.

cameras:
front_door: # This is just an example name for your camera
ffmpeg:
inputs:
- path: rtsp://your_camera_ip:554/your_stream_path
roles:
- detect 98
# Other camera settings go here Version -1.1
1. mqtt:

This denotes the configuration section related to MQTT, a lightweight messaging protocol typically used
in IoT setups.

2. enabled: False

This line is configuring whether or not to enable MQTT. Here, it is set to False , meaning MQTT is
disabled.

3. cameras:

This is the start of the section where you define the configurations for each of your cameras.

4. name_of_your_camera:

This is where you name your camera; it is just a placeholder, so you should replace it with a name that
makes sense for your setup (e.g., front_door ).

5-7. ffmpeg: ... roles: - detect

These lines are defining how Frigate should use FFmpeg to interact with the camera. FFmpeg is a
multimedia framework used to handle video, audio, and other multimedia files and streams. Here, it is
specified to use the camera for detection purposes.

8. inputs:

This denotes the start of a list of input streams from the camera that Frigate should use.

9. path: rtsp://IP_OF_CAMERA:554/rtsp

This line is specifying the RTSP (Real-Time Streaming Protocol) path to your camera stream. You should
replace IP_OF_CAMERA with the actual IP of your camera, and the rest of the path may vary based on
the camera model and manufacturer.

10. roles:

This specifies the roles that this input stream will be used for.

11. detect

This specifies that the input stream should be used for detection purposes.

12. detect:

This is the start of the section where you define the detection settings for this camera.

99
Version -1.1
Why is this file needed?

This file is crucial because it allows you to tailor Frigate to your specific needs and hardware. By
providing this file, you are informing Frigate about your camera(s), their properties, locations, and how
you want Frigate to process their streams, enabling Frigate to function correctly according to your use
case. Without this configuration file, Frigate would not know how to interact with your camera(s) or how
to process their streams.

TROUBLESHOOTING

HL8 WONT POWER ON

Try powering the HL8 using the switch


Check if you are seeing lights on the motherboard and the PSU
Check if the fans are spinning
If fans are spinning and you can see the lights on the motherboard and PSU it could be one of
the hardware components
If you are not getting any video output it is most likely a motherboard issue or a CPU issue.
Replace the faulty component and you should be able to power up the HL8.

HOUSTON UI IS NOT ACCESSIBLE

If your Houston UI is not loading.

First thing would be to check if the server IP is accessible.


Open a terminal or command prompt and try pinging the server IP.
100
Version -1.1
If you get a response then your IP / network settings is fine.
Either ssh into the server or use the Graphical User Interface.
Once you have connected to the server via terminal through SSH or Graphical User Interface,
check if the cockpit service is running
systemctl status cockpit

If the status is inactive then restart the service using systemctl restart cockpit
Your Houston interface should load fine after that.
If the you were not getting ping response during our troubleshooting steps, then you need to
check your networking
You can use the NMTUI interface and check the interface that has the IP set and check if it
up and active.
If all good check if your device is in the correct network.

DRIVES ARE MISSING IN MY ZPOOL

Try checking which are the drives in your pool that are missing
You can either use the zpool status or check in the UI using ZFS tab
Check the server logs using dmesg -T to see if it has any drives drop warning.
Try re-seating the drive and see if it is getting picked up.
If the drive is still not detected try swapping it with a drive in another slot and see if it is getting
detected.
If the drives is still not detected it is most likely a failed drive.
But if the drive gets detected on a different slot. It could be a bad slot.

ZPOOL IS IN A DEGRADED STATE

Try checking which are the drives in your pool that are missing
You can either use the zpool status or check in the UI using ZFS tab
Check the server logs using dmesg -T to see if it has any drives drop warning.

101
Version -1.1
Check if it is an actual failed drive by running SMART diagnostics on the drive
Check if you are noticing any uncorrectable or offline sectors if yes then it is most likely a failed
drive and needs replacement.
If the drive is good you would need to troubleshoot if it is the underlying hardware such as
backplane/cables etc.

SAMBA SHARES ARE NOT ACCESSIBLE TO MOUNT

Check if you have samba ports added to the firewall.

Check if the samba services is running


Check if you have set a separate samba password for the user
Make sure you are accessing the share using the right password.

GETTING ACCESS DENIED WHEN ACCESSING THE FILES IN THE SHARE

Make sure you are having the appropriate permission to access the files.
Check the permission granted and see if the user getting access denied has access.
It is most likely that he is not having access or is having access to just the top-level folder and not
the child folders and files.
Modify the permission as per your preference and you should be able to access the files.

HOW DO I UPDATE MY HL8

You can update the HL8 by using the software updates tab in the Houston UI

102
Version -1.1
45DRIVES DISK MODULE IS NOT WORKING

If the 45drives disks module does not show up and does not detect the drives you can perform
device mapping manually using sudo dalias -t HL8
Once the command finishes, reload the 45drives disks module and it should show the drives.

SYSTEM WOULD NOT BOOT INTO THE OS

Try to go the boot menu by pressing F11 during the reboot.


Once you are in the boot menu try manually select the boot drive and boot into it.
If that works check if the boot order is set properly.
Press Delete key to go to BIOS and check the boot order.

103
Version -1.1

You might also like