My personal container stacks
The typical way to bootstrap a system for these stacks is the following:
- Create docker networks
- Bring up Portainer, and use the exposed port to access it to proceed with the next steps
- Bring up the following stacks, in this order
- Bring up any other stacks desired
The following named networks are assumed to already be created outside these stacks:
- docker-proxy - Used by any service that needs to communicate with the docker engine via
ghcr.io/linuxserver/socket-proxy
. - ingress - Used by the traefik stack to expose services. Any exposed service must be attached to this network in order to be routed to by traefik. This network is also utilized by the homepage stack to route to services by their service or container name.
- lan - A
macvlan
network configured to point to the LAN gateway (e.g., 192.168.1.1). - observe - Used by the alloy and grafana stacks to scrape or otherwise receive and display observability data. Any service that can be scraped or remote write to one of these systems must be attached to this network, as well as any service used as a datasource in Grafana.
# Example of using docker cli to create these networks
docker network create docker-proxy
docker network create ingress
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 \
lan
docker network create observe
These stacks are designed to be used with Portainer with supplied environment variables, or .env
files when used with docker compose directly.
Refer to the stack.env.example
file in each directory for the list of environment variables that are expected.
The templates.json file provides Portainer Templates that can be used to deploy these stacks, supplying the necessary values to variables. Configure the Portainer instance to point to https://raw.githubusercontent.com/chadweimer/container-stacks/refs/heads/main/templates.json to use them.