Installation¶
Beta Software Warning
This software has not reached version 1.0 and should therefore be considered unstable. While any tagged version should work well on its own, a nice friendly upgrade path from one version to another is not guaranteed.
If you like getting your hands dirty in early versions of software, this is for you. If you prefer to wait till things are stable and friendly, maybe hold off for a while.
Also, if you trash your server or wreck your data, that's on you. Test your backups. Trust nothing.
Requirements¶
Server¶
- Ubuntu Server 22.04 or Debian 10.3
sudo
must be available- Passwordless SSH via SSH keys working.
Warning
If you are running on an ARM infrastructure such as Raspberry PI, set arm
to true. Run: make set arm True
Optional Items¶
Client Computer¶
- Docker installed and working.
Note
Two separate computers are not required, but are highly recommended. The idea is you have a server and then your personal computer, say a laptop or desktop. You deploy from your personal computer to the server. This way your settings are saved on your personal computer, and can be used to re-build the server and restore from backups if anything goes wrong.
Warning
If you do install HomelabOS directly on the server and deploy from there, make sure to back up your settings/
folder from the server to somewhere safe, otherwise you could lose your settings.
Domain Name¶
A domain configured with a A
type DNS record of *.yourdomain.com
pointed at your server's IP address. You can also use a subdomain as well, so *.homelab.yourdomain.com
would work.
Note
This is optional because you can use Tor to access your services without registering a domain. For best support from 3rd party clients an actual domain is highly recommended. Also certain services do not work through TOR at the moment.
Note
It's easiest to have an actual domain to point at your services, but you can fake
it by adding DNS overrides to your /etc/hosts
file on *nix and MacOS if needed or for testing.
DNS Settings¶
You need to point your {{ domain }}
, as well as *.{{ domain }}
to the IP address your HomelabOS install is accessible at. If you are using a bastion host, then you would point at that IP. If you are using your home IP address, you would point it at that IP. You need to set up a wildcard DNS entry because all the services are served off of subdomains such as {% if emby.domain %}{{ emby.domain }}{% else %}{{ emby.subdomain + "." + domain }}{% endif %}
Warning
If you are not using a real domain, but using /etc/hosts
entries to 'fake' it, wildcard entries do not work in /etc/hosts
. You need to create an entry for each service enabled. You can use the /var/homelabos/homelab_hosts
file.
Changing your domain¶
If you need to change your domain (or subdomain) simply run make set domain new.domain.com
then run make deploy
again.
Port Forwarding¶
Ports 80 and 443 punched through any firewalls and port forwarded at your server in question.
Note
This is optional because if you are using the bastion server or TOR access, you do not need to deal with port forwarding or firewalls.
Cloud Bastion Server¶
Rather than pointing the domain at your home IP and having to manage DDNS, you can utilize a cloud server to act as a bastion host via Tinc vpn and nginx.
S3 Account¶
S3 is Amazon's Simple Storage Service which HomelabOS can optionally use to back up to. You can use Amazon's service, or one of many other S3 compatible providers. You can also back up to another HomelabOS instance if that other instance is running Minio, a self-hosted S3 service.
Installation¶
Automatic Set-up¶
Paranoid method¶
wget https://gitlab.com/NickBusey/HomelabOS/-/raw/master/install_homelabos.sh
cat install_homelabos.sh
Inspect the script to confirm it is not doing anything malicious.
chmod +x install_homelabos.sh
./install_homelabos.sh
Lazy method¶
bash <(curl -s https://gitlab.com/NickBusey/HomelabOS/-/raw/master/install_homelabos.sh)
Manual Set-up¶
- Download the latest version to your client computer and extract the folder.
Note
If you are using HomelabOS to provision a bastion server, run: make terraform
- From inside the HomelabOS folder, set up the initial config:
make config
Note
You will be prompted for the basic information to get started. The passwords entered here will be stored on the client computer and are used by ansible to configure your server. After you enter the information, HomelabOS will configure your local docker images and build your initial settings/
files.
- Once you have updated your settings simply deploy HomelabOS with
make deploy
. You can runmake deploy
as many times as needed to get your settings correct.
You can check http://{{ homelab_ip }}:8181 in a browser to see the Traefik dashboard.
See a full list of commands in the Getting Started Section
SSLIP.io¶
You can turn on enable_sslip
which will expose all your services via sslip.io.
This has the benefit of not requiring a domain to test services with. You can just go to https://SERVICE_NAME.SERVER_IP.
Example for Organizr with a SERVER_IP of 192.168.50.1 you could go to https://organizr.192.168.50.1.sslip.io/
If you use an internal IP (192.x.x.x, 10.x.x.x, etc) the services will only be available from the network they belong to, and will have self-signed certificates.
If you use a public IP the services will be available from anywhere and will have valid certificates automatically generated by Traefik via LetsEncrypt.
Enabling Services¶
Run make set SERVICENAME.enable true
where SERVICENAME is the name of the service you want to enable.
Example
make set miniflux.enable true
Then run make deploy
again. That's it. It will take a few minutes for your server to download and start the relevant images.
Warning
Some services expose set up pages on start up. If you don't complete the set up step, there is a chance someone else could beat you to it. If they do just run make reset_one SERVICENAME
then make deploy
again and the service will reset to it's freshly installed state.
You can SSH into the server, and run systemctl status SERVICENAME
where SERVICENAME is the name of the server you want to check is running. It will show you status and/or errors of the service.
Example
systemctl status miniflux
Deploying the same service twice¶
If you need two of the same service, enabling additional copies is simple.
Open settings/additional_services_config.yml
and add the following:
servicename_alternatename:
source_service: servicename
subdomain: alternatename
enable: true
For example, to duplicate Nextcloud for your skydiving group:
nextcloud_skydiving:
source_service: nextcloud
subdomain: skydiving
enable: true
Run make
as usual, and you will be able to access skydiving.YOURDOMAIN (according to the rest of your settings).
Syncing Settings via Git¶
HomelabOS will automatically keep the settings/
folder in sync with a git repo if it has one.
So you can create a private repo on your Gitea instance for example, then clone that repo over the
settings folder. Now any changes you make to settings/
files will be commited and pushed to that git
repo whenever you run make deploy
, make update
or make config
.
Backing up your Vault Password¶
Danger
This bit is important.
If you installed with the Automatic/One-Liner install, your vault password exists at ~/.homelabos_vault_pass
for the user you ran the script as. Make sure to back this password up somewhere safe, and ideally not in your settings/
folder. If someone gains access to your settings/
folder and the vault password, bad things can happen. Store them separately.
Backing up your data¶
Make sure to back up your {{ volumes_root }}/install
directory nightly.
Troubleshooting / FAQ¶
Network Configuration¶
It is recommended to register an actual domain to point at your Homelab, but if you can't or would prefer not to, you can use HomelabOS fully inside your network. Simply make up a domain that ends in .local
and enter that as your domain in host_vars/myserver
.
When HomelabOS make deploy
command completes, it creates a file on the server at {{ volumes_root }}/homelabos_hosts
. You can take the contents of this file and create local DNS overrides using it. All your requests should complete as expected.
NAS Network Attached Storage Configuration¶
Different HomelabOS services operate on libraries of media (Airsonic, Plex, and Piwigo as examples). Since these libraries can be large, it makes sense to keep them on another machine with lots of storage.
NAS shares are mounted on the HomelabOS host under {{ storage_dir }}
, which defaults to /mnt/nas
. By default, NAS is disabled, and the services that can use it will instead use local folders under {{ storage_dir }}
.
For example, Emby will map {{ storage_dir }}/Video/TV
and {{ storage_dir }}/Video/Movies
into its container, and Paperless will mount {{ storage_dir }}/Documents
. Check the docker-compose
files for each service to see what directories are used.
To configure your NAS, edit the # NAS Config
section of settings/config.yml
.
- Enable NAS by setting
nas_enable: True
- Set
nas_host
to the hostname, FQDN, or IP address of your NAS. - Choose your network share type (
nfs
orsmb
) and setnas_share_type
to that value. - Set your
nas_share_path
, if applicable. SMB shares will probably not have a value for this, but NFS will. - If authenticating to access SMB shares, set your username and password in
nas_user
andnas_path
. - Set your Windows domain in
nas_workgroup
, if applicable.
Re-run make deploy
to configure and enable your NAS.
Example unRAID configuration
nas_enable: True
nas_host: unraid.mydomain.com
nas_mount_type: nfs
nas_share_path: /mnt/user
nas_user:
nas_pass:
nas_workgroup:
Example SMB configuration
nas_enable: True
nas_host: 192.168.1.12
nas_mount_type: smb
nas_share_path: homelab
nas_user: user
nas_pass: 12345
nas_workgroup: WORKGROUP