My Docker configuration for a home server.
- Web Server - Nginx proxy server with Let's Encrypt integrated
- Mineos - Minecraft hosting server gui
- Nextcloud - Personal cloud backup server
- Jellyfin - A media streaming server
- Copy
.env.exampleto.envand set a valid certificate contact email. - When using rootless Podman, set
CONTAINER_SOCKETto the socket reported bypodman info --format '{{.Host.RemoteSocket.Path}}'and enable it withsystemctl --user enable --now podman.socket. - Ensure the container engine can bind host ports 80 and 443. Rootless Podman
commonly requires an administrator to set
net.ipv4.ip_unprivileged_port_start=80in/etc/sysctl.dfirst. - Run
docker compose pullanddocker compose up -d.
Proxied application containers must join the external proxy-tier network and
set VIRTUAL_HOST and ACME_HOST to their public hostname. Set VIRTUAL_PORT
when the application does not expose port 80.
The ACME companion creates a self-signed default certificate for unknown HTTPS
hosts. It is only a fallback certificate; trusted Let's Encrypt certificates
are still issued per application container after it declares ACME_HOST.
The default HTTP-01 challenge requires public DNS to resolve to this server and
inbound ports 80 and 443 to reach it. Use DNS-01 instead when those ports cannot
be exposed. If upgrading older application stacks, replace LETSENCRYPT_HOST
and LETSENCRYPT_EMAIL with ACME_HOST and ACME_EMAIL.