This repository has been archived on 2025-10-01. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
selfhosted-templates/homelab/README.org
2023-07-11 18:39:07 -05:00

3.6 KiB

Homelab Docker Compose

This directory contains:

  • docker-compose.yml - This stores information about what containers are needed, how those containers are connected, and where data should be stored
  • builds - These are custom Dockerfiles that are utilized in the compose file
  • env - These contain environment files (used to set passwords and other sensitive information, I have redacted these)
  • data - Once all of the docker containers referenced in the compose file are started, persistent storage is created here

Service Overview

Within the docker-compose file, several services are started, namely:

Access to these services is mediated with HTTPS via Nginx Proxy and the Let's Encrypt Companion. With these, it is trivial to add new services; all you need to add a new service is declare these environment variables in the target container:

  • VIRTUAL_HOST - set this to domain name (sub.domain.example.com)
  • LETSENCRYPT_HOST - also set this to domain name (sub.domain.example.com)
  • LETSENCRYPT_EMAIL - email to be used in Let's Encrypt SSL request; this is kept on record by Let's Encrypt

Setup

Domain Name

In order for this to work, you're going to need a domain name. Do a search for the best domain name registrars and pick one. Then search up domain names you would like until you find something available. Then, as long as you aren't trying to get something fancy like .gg or .ai, the yearly payments shouldn't be too bad.

Once you have purchased it, you'll need to create an A record for that domain pointing to your IP address (i.e. the IP from your VPS, or the public IP of your home). Then, you'll need CNAME records for each subservices to point to the domain name you chose. Here is an example:

Domain: example.com

Type Host Value
A Record @ 142.251.32.46
CNAME Record nextcloud example.com
CNAME Record gitea example.com
CNAME Record freshrss example.com
CNAME Record homepage example.com

The following setup would:

  • Redirect example.com to 142.251.32.46
  • Redirect nextcloud.example.com (a subdomain of example.com) to whatever example.com is redirected to (142.251.32.46)
  • Redirect gitea.example.com (another subdomain of example.com) to whatever example.com is redirected to (142.251.32.46)
  • etc…

As you can see, every single subdomain points to the exact same IP address. However, Nginx Proxy will decide what to show you based on what subdomain you're connecting to. In this sense, you can only connect to the services by supplying the correct subdomain (you can't necessarily connect to your Nextcloud instance via a local IP, like 192.168.1.43).

TODO Port Forwarding and Firewall Rules

You only need to care about port forwarding if you are setting this up on your home network.

Configuration

In the docker-compose.yml file, configure the following:

  • MOST IMPORTANT: CHANGE ALL THE PASSWORDS IN ALL THE ENVIRONMENT FILES (found in the env directory)

    • THEY ALL SAY CHANGEME SO THERE IS NO EXCUSE FOR MISSING THIS
  • Set the VIRTUAL_HOST, LETSENCRYPT_HOST and LETSENCRYPT_EMAIL for each service accordingly
  • Set the time zone (TZ) for the containers that request it