Install Stackyard with Docker Compose
Stackyard is one image for linux/amd64 and linux/arm64. On Unraid, use the Unraid template.
Compose
Section titled “Compose”services: stackyard: image: ghcr.io/sandobserver/stackyard:latest container_name: stackyard restart: unless-stopped ports: - "8700:80" volumes: - ./data:/data - ./icons:/iconsdocker compose up -dOpen http://<host>:8700.
/data holds the config file. /icons holds uploaded icons and wallpapers. The container runs as UID 1000 and must be able to write both.
The compose file in the repository adds hardening and lists every variable below.
docker run
Section titled “docker run”docker run -d --name stackyard --restart unless-stopped \ -p 8700:80 -v ./data:/data -v ./icons:/icons \ ghcr.io/sandobserver/stackyard:latestEnvironment variables
Section titled “Environment variables”All optional.
Network
ALLOW_PRIVATE_IPSSettrueto let badges and widgets reach LAN and loopback addresses. Most homelabs need it. Read Security first.TRUST_PROXYSettruebehind a TLS proxy you control. See Reverse proxy.TRUSTED_PROXYThe proxy address or CIDR, for per-client rate limiting.SOCKET_PROXY_URLA Docker socket proxy, for container health checks.
Sessions and logs
SESSION_MAX_AGE_DAYSIdle session lifetime. Default0.5, 12 hours.PASSWORD_HASH_MEMORYMemory per password hash:8mibto128mib. Default16mib.LOG_LEVELdebug,info,warnorerror. Defaultinfo. The General setting overrides it.
Paths and runtime
CONFIG_PATHDefault/data/apps.json.ICONS_PATHDefault/icons.WIDGETS_PATHDefault/usr/share/nginx/html/widgets. A wrong path loads no widgets.NODE_OPTIONSDefault--max-old-space-size=192. Keep near half the container memory limit.PORTOnly for platforms that route byPORT. Must be80.DEMO_MODERuns a read-only public demo.
Registries
Section titled “Registries”ghcr.io/sandobserver/stackyard, mirrored to Docker Hub as sandobserver/stackyard. The release signature covers ghcr.io.