stack/.env.example
tim 3bf1726a99 Centralize demo config in .env and add bootstrap-stack.sh
Expand .env.example with ports, AI, Usenet, WireGuard, demo logins, and
bootstrap flags. One script creates dirs, downloads the model, starts
compose, heals gluetun, and configures SABnzbd from the same file.
2026-07-22 13:06:08 -07:00

167 lines
5.6 KiB
Text

################################################################################
# arr-stack — single config file for a tech demo / fresh host
# Copy to .env and edit. Compose + bootstrap scripts read this file.
#
# Demo credentials (all local UIs): DEMO_USER / DEMO_PASS (default tim / asdfasdf)
# Security is intentionally weak for demos. Change before any real exposure.
#
# Fresh rebuild checklist:
# 1. Put a valid wireguard/wg0.conf (Endpoint IP + # EndpointHost = hostname)
# 2. cp .env.example .env && edit paths / host IP / usenet keys
# 3. ./scripts/bootstrap-stack.sh
################################################################################
# =============================================================================
# Demo mode & shared login
# =============================================================================
DEMO_MODE=true
DEMO_USER=tim
DEMO_PASS=asdfasdf
# Used as OpenAI-compatible key for Bonsai / OpenHands / Open WebUI connections
OPENAI_API_KEY=sk-local-bonsai
# =============================================================================
# Host identity & paths
# =============================================================================
PUID=1000
PGID=1000
TZ=America/Los_Angeles
# Production-style (server):
# CONFIG_DIR=/opt/stack/config
# DATA_DIR=/storage
# BONSAI_MODELS_DIR=/opt/stack/models/bonsai
# AI_WORKSPACE_DIR=/opt/stack/workspace
# Laptop / relative demo:
CONFIG_DIR=./config
DATA_DIR=./data
BONSAI_MODELS_DIR=./models/bonsai
AI_WORKSPACE_DIR=./workspace
# LAN used by gluetun FIREWALL_OUTBOUND_SUBNETS (qBittorrent WebUI from LAN)
LAN_SUBNET=192.168.8.0/24
# Public hostname/IP other PCs use to open UIs (landing page, Forgejo ROOT_URL, …)
STACK_HOST=192.168.8.123
# =============================================================================
# Published ports (host → service)
# =============================================================================
LANDING_PORT=80
QB_WEBUI_PORT=8080
JELLYFIN_PORT=8096
SONARR_PORT=8989
RADARR_PORT=7878
LIDARR_PORT=8686
BAZARR_PORT=6767
PROWLARR_PORT=9696
SABNZBD_PORT=8085
OPEN_WEBUI_PORT=3000
BONSAI_PORT=8081
OPENHANDS_PORT=3001
FORGEJO_HTTP_PORT=3002
FORGEJO_SSH_PORT=2222
SEARXNG_PORT=8888
# =============================================================================
# WireGuard / gluetun
# =============================================================================
# Peer hostname for gluetun-endpoint-watch (must match provider; dig when unhealthy)
WIREGUARD_ENDPOINT_HOST=las-183-wg.whiskergalaxy.com
WIREGUARD_ENDPOINT_PORT=443
# Path to conf mounted into gluetun (create before first up)
WIREGUARD_CONF=./wireguard/wg0.conf
# =============================================================================
# Local AI — Ternary-Bonsai-27B
# =============================================================================
BONSAI_MODEL_PATH=/models/Ternary-Bonsai-27B-Q2_0.gguf
BONSAI_HF_REPO=prism-ml/Ternary-Bonsai-27B-gguf
BONSAI_MAIN_FILE=Ternary-Bonsai-27B-Q2_0.gguf
# Download model during bootstrap-stack.sh
DOWNLOAD_MODEL=true
DOWNLOAD_VISION=true
DOWNLOAD_DRAFTER=false
# Inference: vulkan on AMD iGPU; cpu for safe fallback
BONSAI_BACKEND=vulkan
BONSAI_NGL=99
BONSAI_CTX=16384
BONSAI_KV4=0
BONSAI_THREADS=12
BONSAI_TEMP=0.7
BONSAI_TOP_P=0.95
BONSAI_TOP_K=20
BONSAI_EXTRA_ARGS=
# Open WebUI
WEBUI_AUTH=true
OPENWEBUI_DEFAULT_MODEL=openai/Ternary-Bonsai-27B-Q2_0.gguf
RAG_EMBEDDING_ENGINE=
RAG_CHUNK_SIZE=1000
RAG_CHUNK_OVERLAP=100
# SearXNG
SEARXNG_SECRET=demo-searxng-secret-change-me
# OpenHands (compose profile: coding)
OPENHANDS_MODEL=openai/Ternary-Bonsai-27B-Q2_0.gguf
# true = also start openhands in bootstrap
START_OPENHANDS=false
# =============================================================================
# Forgejo
# =============================================================================
FORGEJO_DOMAIN=${STACK_HOST}
FORGEJO_ROOT_URL=http://${STACK_HOST}:3002/
FORGEJO_DISABLE_REGISTRATION=false
# First-run admin (set after install or via bootstrap when API allows)
FORGEJO_ADMIN_USER=${DEMO_USER}
FORGEJO_ADMIN_PASS=${DEMO_PASS}
FORGEJO_ADMIN_EMAIL=tim@stack.local
# Git remote used by server /opt/stack (see stack_deploy_method: git)
STACK_GIT_REPO=ssh://git@127.0.0.1:2222/tim/stack.git
STACK_GIT_BRANCH=main
# =============================================================================
# Usenet / NZB (also read by scripts/configure-usenet.sh)
# Prefer these names; legacy aliases still work (see configure-usenet.sh)
# =============================================================================
# NZBgeek indexer (Prowlarr)
NZBGEEKUSERNAME=
NZBGEEKEMAIL=
NZBGEEKAPI=https://api.nzbgeek.info/
NZBKEEPKEY=
# aliases: NZBGEEK_API_KEY
# Newshosting
NEWSHOSTINGAPI=news.newshosting.com
NEWSHOSTINGSSLPORT=563
NEWSHOSTINGUSER=
HNEWSHOSTINGPASS=
NEWSHOSTINGCONNECTIONS=20
# Tweaknews
TWEAKNEWSAPI=news.tweaknews.eu
TWEAKNEWSSSLPORT=563
TWEAKNEWSLOGIN=
TWEAKNEWSPASSWORD=
TWEAKNEWSCONNECTIONS=40
# =============================================================================
# FlareSolverr
# =============================================================================
FLARESOLVERR_LOG_LEVEL=info
FLARESOLVERR_CAPTCHA_SOLVER=none
# =============================================================================
# Bootstrap behaviour (scripts/bootstrap-stack.sh)
# =============================================================================
# compose profiles to enable: empty, or coding
COMPOSE_PROFILES=
# After containers are up, run configure-usenet.sh
CONFIGURE_USENET=true
# Recreate gluetun/qbittorrent if unhealthy after start
HEAL_GLUETUN=true
# Pull images before up
COMPOSE_PULL=true