This repository contains a personal home server setup using Docker Compose. Each service has its own folder under services/
with individual docker-compose.yml
and .env.template
files.
All services run in a shared Docker network called proxy
. Routing and TLS are handled via Traefik using ACME DNS challenge.
- Clone the repository:
git clone https://github.com/joshuawiebe/homelab.git
cd homelab
- Run configuration:
./.automations/config.sh
- Set the base domain (e.g.,
example.com
) - Set subdomains for each service
- Provide ACME email and IPv64 DNS API token
- Optionally generate passwords automatically
- Start all services:
./.automations/start.sh
- Stop services:
./.automations/stop.sh
/homelab/
├── .automations/
│ ├── config.sh # Generates .env files, passwords, and domain setup
│ ├── start.sh # Starts services in correct order
│ └── stop.sh # Stops services in reverse order
├── services/
│ ├── adguard_home/
│ │ ├── docker-compose.yml
│ │ └── conf/, work/
│ ├── gotify/
│ │ ├── docker-compose.yml
│ │ └── data/
│ ├── nextcloud/
│ │ ├── docker-compose.yml
│ │ ├── .env.template
│ │ └── nextcloud/, db/
│ ├── uptime_kuma/
│ │ ├── docker-compose.yml
│ │ └── data/
│ ├── vaultwarden/
│ │ ├── docker-compose.yml
│ │ ├── .env.template
│ │ └── vw-data/
│ ├── watchtower/
│ │ └── docker-compose.yml
│ └── traefik/
│ ├── docker-compose.yml
│ └── .env.template
├── .gitignore
└── README.md
- Nextcloud – personal cloud storage (HSTS enabled)
- Vaultwarden – password manager (Bitwarden-compatible)
- Traefik – reverse proxy, HTTPS, ACME DNS challenge
- AdGuard Home – network-wide ad blocking
- Gotify – push notifications
- Uptime Kuma – uptime monitoring
- Watchtower – automatic container updates
- Generates
.env
files from templates - Configures base domain, subdomains, ACME email, and IPv64 token
- Generates secure passwords
- Generates hashed Vaultwarden admin token
- Optionally starts services
- Starts services in correct order
- Prompts to choose reverse proxy (Traefik or Zoraxy)
- Stops all services safely in reverse order
.env.template
files hold placeholdersconfig.sh
creates.env
files with secure values- Supports subdomains and domain configuration per service
- All services communicate via Docker network
proxy
- Traefik handles HTTPS and routing
- Services are not directly exposed
- Nextcloud:
nextcloud/
,db/
- Vaultwarden:
vw-data/
- AdGuard Home:
conf/
,work/
- Gotify:
data/
- Uptime Kuma:
data/
- Traefik:
acme.json
(certificates)
docker run --rm -it vaultwarden/server /vaultwarden hash
- Enter password twice
- Copy PHC string into
services/vaultwarden/.env
underADMIN_TOKEN=
- Nextcloud:
https://nextcloud.BASE_DOMAIN
- Vaultwarden:
https://vault.BASE_DOMAIN
- Traefik Dashboard:
https://traefik.BASE_DOMAIN
- Other services follow their configured subdomains
- No secrets are committed; only
.env.template
files are included - Modular design allows easy addition of new services
- Traefik handles all HTTPS termination and routing
- Internal services communicate via proxy network
MIT — free to use, adapt, and learn from. Do not commit live credentials.