add 23 requested stacks from container-requests list

Tdarr, Grocy, Dashy, Traefik, Fider, Twenty CRM, Outline, Chatwoot,
ComfyUI, Picard, VoidAuth, Tinyauth, Tugtainer, Sencho, Authelia,
Mail Archiver, ITFlow, Notifuse, Maybe Finance, DumbBudget, Silverpeas,
Portus, Obsidian — all as _dev stacks following repo conventions.

Harbor and Exportify moved to 'Apps That Will Not be in the Repo'
(installer-generated compose / no published image).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
code
2026-07-16 06:24:26 +00:00
co-authored by Claude Fable 5
parent b332b8a581
commit b4375c3e09
70 changed files with 2274 additions and 56 deletions
+4 -56
View File
@@ -4,62 +4,10 @@ These are containers that have been requested to add to the repo. This used to
## The List ## The List
1. [Tdarr](https://home.tdarr.io/) — Media transcoding and automation tool (part of the rr stack for managing media libraries and torrent workflows). (empty — all previous requests have been added as stacks or moved to the section below)
2. [Invoice Ninja](https://invoiceninja.com/) — Invoicing, payments, and client management for freelancers and small businesses.
3. [Duplicati](https://www.duplicati.com/) — Encrypted backup software for securely storing backups to cloud or local destinations.
5. [Portus (openSUSE)](https://hub.docker.com/r/opensuse/portus/) — Web UI and authorization service for Docker registries.
6. [Silverpeas](https://hub.docker.com/_/silverpeas) — Enterprise collaboration platform (intranet, document sharing, communication tools).
7. [Grocy](https://github.com/grocy/grocy-docker/blob/main/docker-compose.yml) — Self-hosted grocery, household inventory, and meal planning system.
8. [Dashy](https://dashy.to/) — Customizable self-hosted dashboard for organizing apps, services, and links.
9. [Traefik](https://traefik.io/) — Modern reverse proxy and load balancer designed for microservices and Docker environments.
10. [Etherpad](https://hub.docker.com/r/etherpad/etherpad) — Real-time collaborative text editor (like a shared notepad).
11. [Maybe Finance](https://maybefinance.com/) — Personal finance and budgeting tool with a focus on privacy and simplicity.
12. [DumbBudget](https://github.com/DumbWareio/DumbBudget) — Simple self-hosted budgeting tool for tracking expenses and income.
13. [Fider](https://fider.io/) — Feedback collection platform for product ideas, suggestions, and user voting.
14. [Exportify](https://github.com/watsonbox/exportify) — Tool to export Spotify playlists to CSV format.
15. [Obsidian](https://obsidian.md/) — Powerful local-first note-taking and knowledge management app.
16. [Twenty CRM](https://twenty.com/) — Modern open-source CRM system for managing customers and pipelines.
17. [Outline](https://www.getoutline.com/) — Team knowledge base and documentation wiki.
18. [Mail Archiver](https://github.com/s1t5/mail-archiver) — Self-hosted email archiving and storage tool.
19. [ITFlow](https://itflow.org/) — IT documentation and asset management platform.
20. [Chatwoot](https://www.chatwoot.com/) — Open-source customer support and live chat platform.
21. [Notifuse](https://www.notifuse.com/) — Newsletter and email campaign management tool.
22. [ComfyUI](https://www.comfy.org/) — Node-based interface for AI image generation workflows.
23. [Picard (Docker)](https://hub.docker.com/r/mikenye/picard) — MusicBrainz-powered music file tagging and organization tool.
24. [VoidAuth](https://voidauth.app/) — Lightweight authentication system (Auth0-style alternative).
25. [Tinyauth](https://tinyauth.app/) — Minimal authentication proxy for securing apps behind login.
26. [Tugtainer](https://github.com/Quenary/tugtainer) — GUI alternative to Watchtower for managing Docker container updates.
27. [Sencho](https://sencho.io/) — Lightweight self-hosted service platform.
28. https://www.authelia.com/ - replacement for authentik
29. Harbor - self hosted images
## Apps That Will Not be in the Repo ## Apps That Will Not be in the Repo
1. [Harbor](https://goharbor.io/) — Self-hosted container image registry. Harbor's compose file is generated by its own installer from harbor.yml (~10 tightly coupled services); a static compose file in this repo would drift immediately. Use the official installer.
2. [Exportify](https://github.com/watsonbox/exportify) — Spotify playlist CSV exporter. No published container image (Dockerfile only), and the hosted version at https://exportify.app/ runs entirely in the browser with no server-side data storage.
+57
View File
@@ -0,0 +1,57 @@
# Authelia
## Overview
Single sign-on and 2FA portal for protecting apps behind a reverse proxy (lighter replacement for Authentik).
## Project Details
- **Project Repository:** [GitHub](https://github.com/authelia/authelia)
- **Container Image:** [authelia/authelia](https://hub.docker.com/r/authelia/authelia)
- **Documentation:** [authelia.com](https://www.authelia.com/)
- **Reverse Proxy Port:** `9091`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:9091 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
Configuration is file-based; env vars can override any setting using the AUTHELIA_ prefix
## Volume Notes
/config configuration.yml, users_database.yml, and the local SQLite storage
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name authelia \
-p 9091:9091 \
-e TZ=America/Vancouver \
-v /data/authelia/config:/config \
authelia/authelia:latest
```
## Additional Notes / Gotchas
Authelia will not start without a valid `configuration.yml` in the config volume — generate one from the docs first (session secret, storage encryption key, and a users_database.yml are the minimum).
Works as forward-auth with Nginx Proxy Manager.
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: authelia_dev
Compose file path: authelia_dev/compose.yaml
Additional env file (optional): authelia_dev/sample.env
Then "Load" authelia_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+16
View File
@@ -0,0 +1,16 @@
services:
authelia:
image: ${AUTHELIA_IMAGE:-authelia/authelia:latest}
restart: ${AUTHELIA_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/authelia/config:/config
environment:
- TZ=${TZ:-America/Vancouver}
ports:
- ${AUTHELIA_PORT:-9091}:9091
networks:
- proxy
networks:
proxy:
external: true
+6
View File
@@ -0,0 +1,6 @@
# Authelia
VOL_PATH=/data
TZ=America/Vancouver
AUTHELIA_IMAGE=authelia/authelia:latest
AUTHELIA_RESTART=unless-stopped
AUTHELIA_PORT=9091
+62
View File
@@ -0,0 +1,62 @@
# Chatwoot
## Overview
Open-source customer support and live chat platform.
## Project Details
- **Project Repository:** [GitHub](https://github.com/chatwoot/chatwoot)
- **Container Image:** [chatwoot/chatwoot](https://hub.docker.com/r/chatwoot/chatwoot)
- **Documentation:** [chatwoot.com](https://www.chatwoot.com/docs/self-hosted)
- **Reverse Proxy Port:** `3000`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:3000 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
CHATWOOT_SECRET_KEY_BASE generate with `openssl rand -hex 64`
CHATWOOT_FRONTEND_URL public URL of the instance
## Volume Notes
/app/storage uploaded attachments (shared by rails and sidekiq)
/var/lib/postgresql/data PostgreSQL data (pgvector image required)
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name chatwoot \
-p 3000:3000 \
-e SECRET_KEY_BASE=changeme \
-e FRONTEND_URL=http://localhost:3000 \
-e POSTGRES_HOST=dbhost -e POSTGRES_USERNAME=chatwoot \
-e POSTGRES_PASSWORD=pass -e REDIS_URL=redis://redishost:6379 \
chatwoot/chatwoot:latest bundle exec rails s -p 3000 -b 0.0.0.0
```
## Additional Notes / Gotchas
Before first run, prepare the database once:
`docker compose run --rm chatwoot bundle exec rails db:chatwoot_prepare`
Chatwoot requires the pgvector Postgres extension, hence the pgvector image.
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: chatwoot_dev
Compose file path: chatwoot_dev/compose.yaml
Additional env file (optional): chatwoot_dev/sample.env
Then "Load" chatwoot_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+83
View File
@@ -0,0 +1,83 @@
services:
chatwoot:
image: ${CHATWOOT_IMAGE:-chatwoot/chatwoot:latest}
restart: ${CHATWOOT_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/chatwoot/storage:/app/storage
environment:
- SECRET_KEY_BASE=${CHATWOOT_SECRET_KEY_BASE:-ChangeThisPassword}
- FRONTEND_URL=${CHATWOOT_FRONTEND_URL:-http://localhost:3000}
- RAILS_ENV=production
- POSTGRES_HOST=chatwoot-db
- POSTGRES_USERNAME=chatwoot
- POSTGRES_PASSWORD=${CHATWOOT_DB_PASSWORD:-ChangeThisPassword}
- POSTGRES_DATABASE=chatwoot
- REDIS_URL=redis://chatwoot-redis:6379
ports:
- ${CHATWOOT_PORT:-3000}:3000
networks:
- proxy
- internal
depends_on:
- chatwoot-db
- chatwoot-redis
command:
- bundle
- exec
- rails
- s
- -p
- "3000"
- -b
- 0.0.0.0
chatwoot-sidekiq:
image: ${CHATWOOT_IMAGE:-chatwoot/chatwoot:latest}
restart: ${CHATWOOT_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/chatwoot/storage:/app/storage
environment:
- SECRET_KEY_BASE=${CHATWOOT_SECRET_KEY_BASE:-ChangeThisPassword}
- FRONTEND_URL=${CHATWOOT_FRONTEND_URL:-http://localhost:3000}
- RAILS_ENV=production
- POSTGRES_HOST=chatwoot-db
- POSTGRES_USERNAME=chatwoot
- POSTGRES_PASSWORD=${CHATWOOT_DB_PASSWORD:-ChangeThisPassword}
- POSTGRES_DATABASE=chatwoot
- REDIS_URL=redis://chatwoot-redis:6379
networks:
- internal
depends_on:
- chatwoot-db
- chatwoot-redis
command:
- bundle
- exec
- sidekiq
- -C
- config/sidekiq.yml
chatwoot-db:
image: ${PGVECTOR_IMAGE:-pgvector/pgvector:pg16}
restart: ${CHATWOOT_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/chatwoot/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=chatwoot
- POSTGRES_USER=chatwoot
- POSTGRES_PASSWORD=${CHATWOOT_DB_PASSWORD:-ChangeThisPassword}
networks:
- internal
chatwoot-redis:
image: ${REDIS_IMAGE:-redis:7-alpine}
restart: ${CHATWOOT_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/chatwoot/redis:/data
networks:
- internal
networks:
proxy:
external: true
internal:
+10
View File
@@ -0,0 +1,10 @@
# Chatwoot
VOL_PATH=/data
CHATWOOT_IMAGE=chatwoot/chatwoot:latest
PGVECTOR_IMAGE=pgvector/pgvector:pg16
REDIS_IMAGE=redis:7-alpine
CHATWOOT_RESTART=unless-stopped
CHATWOOT_PORT=3000
CHATWOOT_FRONTEND_URL=http://localhost:3000
CHATWOOT_SECRET_KEY_BASE=ChangeThisPassword
CHATWOOT_DB_PASSWORD=ChangeThisPassword
+58
View File
@@ -0,0 +1,58 @@
# ComfyUI
## Overview
Node-based interface for AI image generation workflows.
## Project Details
- **Project Repository:** [GitHub](https://github.com/comfyanonymous/ComfyUI)
- **Container Image:** [yanwk/comfyui-boot](https://hub.docker.com/r/yanwk/comfyui-boot)
- **Documentation:** [comfy.org](https://docs.comfy.org/)
- **Reverse Proxy Port:** `8188`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:8188 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
COMFYUI_IMAGE pick the tag matching your CUDA version (cu124-slim, cu121, etc.)
## Volume Notes
/root models, custom nodes, outputs, and settings
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name comfyui \
--gpus all \
-p 8188:8188 \
-v /data/comfyui:/root \
yanwk/comfyui-boot:cu124-slim
```
## Additional Notes / Gotchas
ComfyUI has no official image; yanwk/comfyui-boot is the most maintained community image.
GPU access is required for practical use — install the NVIDIA Container Toolkit and add a `gpus` / deploy reservation to the compose file (not included here since it depends on host setup).
Models are large; expect 20+ GB in the /root volume.
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: comfyui_dev
Compose file path: comfyui_dev/compose.yaml
Additional env file (optional): comfyui_dev/sample.env
Then "Load" comfyui_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+14
View File
@@ -0,0 +1,14 @@
services:
comfyui:
image: ${COMFYUI_IMAGE:-yanwk/comfyui-boot:cu124-slim}
restart: ${COMFYUI_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/comfyui:/root
ports:
- ${COMFYUI_PORT:-8188}:8188
networks:
- proxy
networks:
proxy:
external: true
+5
View File
@@ -0,0 +1,5 @@
# ComfyUI
VOL_PATH=/data
COMFYUI_IMAGE=yanwk/comfyui-boot:cu124-slim
COMFYUI_RESTART=unless-stopped
COMFYUI_PORT=8188
+56
View File
@@ -0,0 +1,56 @@
# Dashy
## Overview
Customizable self-hosted dashboard for organizing apps, services, and links.
## Project Details
- **Project Repository:** [GitHub](https://github.com/Lissy93/dashy)
- **Container Image:** [lissy93/dashy](https://hub.docker.com/r/lissy93/dashy)
- **Documentation:** [dashy.to](https://dashy.to/docs/)
- **Reverse Proxy Port:** `8080`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:4000 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
DASHY_PORT host port for the web UI
## Volume Notes
/app/user-data conf.yml and all dashboard configuration
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name dashy \
-p 4000:8080 \
-v /data/dashy/user-data:/app/user-data \
lissy93/dashy:latest
```
## Additional Notes / Gotchas
Configuration lives in `user-data/conf.yml` and can also be edited from the UI.
The repo already contains heimdall and homepage_dev as alternative dashboards.
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: dashy_dev
Compose file path: dashy_dev/compose.yaml
Additional env file (optional): dashy_dev/sample.env
Then "Load" dashy_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+14
View File
@@ -0,0 +1,14 @@
services:
dashy:
image: ${DASHY_IMAGE:-lissy93/dashy:latest}
restart: ${DASHY_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/dashy/user-data:/app/user-data
ports:
- ${DASHY_PORT:-4000}:8080
networks:
- proxy
networks:
proxy:
external: true
+5
View File
@@ -0,0 +1,5 @@
# Dashy
VOL_PATH=/data
DASHY_IMAGE=lissy93/dashy:latest
DASHY_RESTART=unless-stopped
DASHY_PORT=4000
+57
View File
@@ -0,0 +1,57 @@
# DumbBudget
## Overview
Stupid-simple self-hosted budgeting app for tracking expenses and income, protected by a PIN.
## Project Details
- **Project Repository:** [GitHub](https://github.com/DumbWareio/DumbBudget)
- **Container Image:** [dumbwareio/dumbbudget](https://hub.docker.com/r/dumbwareio/dumbbudget)
- **Documentation:** [GitHub README](https://github.com/DumbWareio/DumbBudget/blob/main/README.md)
- **Reverse Proxy Port:** `3000`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:3000 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
DUMBBUDGET_PIN access PIN (change it!)
DUMBBUDGET_CURRENCY ISO currency code
## Volume Notes
/app/data transactions and settings
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name dumbbudget \
-p 3000:3000 \
-e DUMBBUDGET_PIN=1234 -e BASE_URL=http://localhost:3000 -e CURRENCY=CAD \
-v /data/dumbbudget/data:/app/data \
dumbwareio/dumbbudget:latest
```
## Additional Notes / Gotchas
PIN auth only — keep behind the proxy and don't expose publicly.
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: dumbbudget_dev
Compose file path: dumbbudget_dev/compose.yaml
Additional env file (optional): dumbbudget_dev/sample.env
Then "Load" dumbbudget_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+18
View File
@@ -0,0 +1,18 @@
services:
dumbbudget:
image: ${DUMBBUDGET_IMAGE:-dumbwareio/dumbbudget:latest}
restart: ${DUMBBUDGET_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/dumbbudget/data:/app/data
environment:
- DUMBBUDGET_PIN=${DUMBBUDGET_PIN:-ChangeThisPassword}
- BASE_URL=${DUMBBUDGET_BASE_URL:-http://localhost:3000}
- CURRENCY=${DUMBBUDGET_CURRENCY:-CAD}
ports:
- ${DUMBBUDGET_PORT:-3000}:3000
networks:
- proxy
networks:
proxy:
external: true
+8
View File
@@ -0,0 +1,8 @@
# DumbBudget
VOL_PATH=/data
DUMBBUDGET_IMAGE=dumbwareio/dumbbudget:latest
DUMBBUDGET_RESTART=unless-stopped
DUMBBUDGET_PORT=3000
DUMBBUDGET_PIN=ChangeThisPassword
DUMBBUDGET_BASE_URL=http://localhost:3000
DUMBBUDGET_CURRENCY=CAD
+60
View File
@@ -0,0 +1,60 @@
# Fider
## Overview
Feedback collection platform for product ideas, suggestions, and user voting.
## Project Details
- **Project Repository:** [GitHub](https://github.com/getfider/fider)
- **Container Image:** [getfider/fider](https://hub.docker.com/r/getfider/fider)
- **Documentation:** [fider.io](https://fider.io/docs)
- **Reverse Proxy Port:** `3000`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:3000 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
FIDER_JWT_SECRET long random string, generate with `openssl rand -hex 32`
FIDER_BASE_URL public URL of the instance
FIDER_SMTP_* Fider requires working email to sign in (magic links)
## Volume Notes
/var/lib/postgresql/data PostgreSQL data
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name fider \
-p 3000:3000 \
-e BASE_URL=http://localhost:3000 \
-e DATABASE_URL=postgres://fider:pass@dbhost:5432/fider?sslmode=disable \
-e JWT_SECRET=changeme \
-e EMAIL_NOREPLY=noreply@example.com \
getfider/fider:stable
```
## Additional Notes / Gotchas
Email is not optional — sign-in uses magic links, so SMTP (or Mailgun env vars) must be configured before first use.
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: fider_dev
Compose file path: fider_dev/compose.yaml
Additional env file (optional): fider_dev/sample.env
Then "Load" fider_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+37
View File
@@ -0,0 +1,37 @@
services:
fider:
image: ${FIDER_IMAGE:-getfider/fider:stable}
restart: ${FIDER_RESTART:-unless-stopped}
environment:
- BASE_URL=${FIDER_BASE_URL:-http://localhost:3000}
- DATABASE_URL=postgres://fider:${FIDER_DB_PASSWORD:-ChangeThisPassword}@fider-db:5432/fider?sslmode=disable
- JWT_SECRET=${FIDER_JWT_SECRET:-ChangeThisPassword}
- EMAIL_NOREPLY=${FIDER_EMAIL_NOREPLY:-noreply@example.com}
- EMAIL_SMTP_HOST=${FIDER_SMTP_HOST:-smtp.example.com}
- EMAIL_SMTP_PORT=${FIDER_SMTP_PORT:-587}
- EMAIL_SMTP_USERNAME=${FIDER_SMTP_USERNAME:-user}
- EMAIL_SMTP_PASSWORD=${FIDER_SMTP_PASSWORD:-ChangeThisPassword}
ports:
- ${FIDER_PORT:-3000}:3000
networks:
- proxy
- internal
depends_on:
- fider-db
fider-db:
image: ${POSTGRES_IMAGE:-postgres:17-alpine}
restart: ${FIDER_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/fider/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=fider
- POSTGRES_USER=fider
- POSTGRES_PASSWORD=${FIDER_DB_PASSWORD:-ChangeThisPassword}
networks:
- internal
networks:
proxy:
external: true
internal:
+14
View File
@@ -0,0 +1,14 @@
# Fider
VOL_PATH=/data
FIDER_IMAGE=getfider/fider:stable
POSTGRES_IMAGE=postgres:17-alpine
FIDER_RESTART=unless-stopped
FIDER_PORT=3000
FIDER_BASE_URL=http://localhost:3000
FIDER_DB_PASSWORD=ChangeThisPassword
FIDER_JWT_SECRET=ChangeThisPassword
FIDER_EMAIL_NOREPLY=noreply@example.com
FIDER_SMTP_HOST=smtp.example.com
FIDER_SMTP_PORT=587
FIDER_SMTP_USERNAME=user
FIDER_SMTP_PASSWORD=ChangeThisPassword
+56
View File
@@ -0,0 +1,56 @@
# Grocy
## Overview
Self-hosted grocery, household inventory, chores, and meal planning system.
## Project Details
- **Project Repository:** [GitHub](https://github.com/grocy/grocy)
- **Container Image:** [linuxserver/grocy](https://docs.linuxserver.io/images/docker-grocy/)
- **Documentation:** [grocy.info](https://grocy.info/)
- **Reverse Proxy Port:** `80`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:9283 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
GROCY_PUID / GROCY_PGID file ownership for the config volume
## Volume Notes
/config application data and SQLite database
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name grocy \
-p 9283:80 \
-e TZ=America/Vancouver -e PUID=1000 -e PGID=1000 \
-v /data/grocy/config:/config \
lscr.io/linuxserver/grocy:latest
```
## Additional Notes / Gotchas
Default login is admin/admin — change it after first login.
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: grocy_dev
Compose file path: grocy_dev/compose.yaml
Additional env file (optional): grocy_dev/sample.env
Then "Load" grocy_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+18
View File
@@ -0,0 +1,18 @@
services:
grocy:
image: ${GROCY_IMAGE:-lscr.io/linuxserver/grocy:latest}
restart: ${GROCY_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/grocy/config:/config
environment:
- TZ=${TZ:-America/Vancouver}
- PUID=${GROCY_PUID:-1000}
- PGID=${GROCY_PGID:-1000}
ports:
- ${GROCY_PORT:-9283}:80
networks:
- proxy
networks:
proxy:
external: true
+8
View File
@@ -0,0 +1,8 @@
# Grocy
VOL_PATH=/data
TZ=America/Vancouver
GROCY_IMAGE=lscr.io/linuxserver/grocy:latest
GROCY_RESTART=unless-stopped
GROCY_PORT=9283
GROCY_PUID=1000
GROCY_PGID=1000
+56
View File
@@ -0,0 +1,56 @@
# ITFlow
## Overview
IT documentation, ticketing, and asset management platform for MSPs.
## Project Details
- **Project Repository:** [GitHub](https://github.com/itflow-org/itflow)
- **Container Image:** [itfloworg/itflow](https://hub.docker.com/r/itfloworg/itflow)
- **Documentation:** [docs.itflow.org](https://docs.itflow.org/installation_docker)
- **Reverse Proxy Port:** `80`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:8080 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
ITFLOW_DB_PASSWORD database password used by the setup wizard
## Volume Notes
/var/www/itflow/uploads uploaded files
/var/lib/mysql MariaDB data
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name itflow \
-p 8080:80 \
itfloworg/itflow:latest
```
## Additional Notes / Gotchas
The Docker image is community-maintained and explicitly not production-ready.
On first visit the setup wizard asks for the database host (`itflow-db`), user, and password.
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: itflow_dev
Compose file path: itflow_dev/compose.yaml
Additional env file (optional): itflow_dev/sample.env
Then "Load" itflow_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+31
View File
@@ -0,0 +1,31 @@
services:
itflow:
image: ${ITFLOW_IMAGE:-itfloworg/itflow:latest}
restart: ${ITFLOW_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/itflow/uploads:/var/www/itflow/uploads
ports:
- ${ITFLOW_PORT:-8080}:80
networks:
- proxy
- internal
depends_on:
- itflow-db
itflow-db:
image: ${MARIADB_IMAGE:-mariadb:latest}
restart: ${ITFLOW_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/itflow/db:/var/lib/mysql
environment:
- MARIADB_DATABASE=itflow
- MARIADB_USER=itflow
- MARIADB_PASSWORD=${ITFLOW_DB_PASSWORD:-ChangeThisPassword}
- MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD:-ChangeThisPassword}
networks:
- internal
networks:
proxy:
external: true
internal:
+8
View File
@@ -0,0 +1,8 @@
# ITFlow
VOL_PATH=/data
ITFLOW_IMAGE=itfloworg/itflow:latest
MARIADB_IMAGE=mariadb:latest
ITFLOW_RESTART=unless-stopped
ITFLOW_PORT=8080
ITFLOW_DB_PASSWORD=ChangeThisPassword
MARIADB_ROOT_PASSWORD=ChangeThisPassword
+57
View File
@@ -0,0 +1,57 @@
# Mail Archiver
## Overview
Self-hosted email archiving, search, and export tool with multi-account folder sync.
## Project Details
- **Project Repository:** [GitHub](https://github.com/s1t5/mail-archiver)
- **Container Image:** [s1t5/mailarchiver](https://hub.docker.com/r/s1t5/mailarchiver)
- **Documentation:** [Setup docs](https://github.com/s1t5/mail-archiver/blob/main/doc/Setup.md)
- **Reverse Proxy Port:** `5000`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:5000 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
MAILARCHIVER_USERNAME / MAILARCHIVER_PASSWORD web UI admin login
MAILARCHIVER_DB_PASSWORD must match in both the app connection string and postgres
## Volume Notes
/var/lib/postgresql/data PostgreSQL data (the archive itself)
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name mailarchiver \
-p 5000:5000 \
-e 'ConnectionStrings__DefaultConnection=Host=dbhost;Database=MailArchiver;Username=mailuser;Password=pass' \
-e Authentication__Username=admin -e Authentication__Password=pass \
s1t5/mailarchiver:latest
```
## Additional Notes / Gotchas
No built-in HTTPS — keep behind the reverse proxy. Add mail accounts through the web UI after first login.
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: mailarchiver_dev
Compose file path: mailarchiver_dev/compose.yaml
Additional env file (optional): mailarchiver_dev/sample.env
Then "Load" mailarchiver_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+33
View File
@@ -0,0 +1,33 @@
services:
mailarchiver:
image: ${MAILARCHIVER_IMAGE:-s1t5/mailarchiver:latest}
restart: ${MAILARCHIVER_RESTART:-unless-stopped}
environment:
- ConnectionStrings__DefaultConnection=Host=mailarchiver-db;Database=MailArchiver;Username=mailuser;Password=${MAILARCHIVER_DB_PASSWORD:-ChangeThisPassword}
- Authentication__Username=${MAILARCHIVER_USERNAME:-admin}
- Authentication__Password=${MAILARCHIVER_PASSWORD:-ChangeThisPassword}
- TimeZone__DisplayTimeZoneId=${MAILARCHIVER_TIMEZONE:-America/Vancouver}
ports:
- ${MAILARCHIVER_PORT:-5000}:5000
networks:
- proxy
- internal
depends_on:
- mailarchiver-db
mailarchiver-db:
image: ${POSTGRES_IMAGE:-postgres:17-alpine}
restart: ${MAILARCHIVER_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/mailarchiver/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=MailArchiver
- POSTGRES_USER=mailuser
- POSTGRES_PASSWORD=${MAILARCHIVER_DB_PASSWORD:-ChangeThisPassword}
networks:
- internal
networks:
proxy:
external: true
internal:
+10
View File
@@ -0,0 +1,10 @@
# Mail Archiver
VOL_PATH=/data
MAILARCHIVER_IMAGE=s1t5/mailarchiver:latest
POSTGRES_IMAGE=postgres:17-alpine
MAILARCHIVER_RESTART=unless-stopped
MAILARCHIVER_PORT=5000
MAILARCHIVER_USERNAME=admin
MAILARCHIVER_PASSWORD=ChangeThisPassword
MAILARCHIVER_DB_PASSWORD=ChangeThisPassword
MAILARCHIVER_TIMEZONE=America/Vancouver
+58
View File
@@ -0,0 +1,58 @@
# Maybe Finance
## Overview
Personal finance and budgeting tool with a focus on privacy.
## Project Details
- **Project Repository:** [GitHub](https://github.com/maybe-finance/maybe)
- **Container Image:** [ghcr.io/maybe-finance/maybe](https://github.com/maybe-finance/maybe/pkgs/container/maybe)
- **Documentation:** [GitHub docs](https://github.com/maybe-finance/maybe/tree/main/docs)
- **Reverse Proxy Port:** `3000`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:3000 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
MAYBE_SECRET_KEY_BASE generate with `openssl rand -hex 64`
## Volume Notes
/rails/storage uploaded files
/var/lib/postgresql/data PostgreSQL data
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name maybe \
-p 3000:3000 \
-e SELF_HOSTED=true -e RAILS_FORCE_SSL=false -e RAILS_ASSUME_SSL=false \
-e SECRET_KEY_BASE=changeme \
-e DB_HOST=dbhost -e POSTGRES_USER=maybe -e POSTGRES_PASSWORD=pass -e POSTGRES_DB=maybe \
ghcr.io/maybe-finance/maybe:latest
```
## Additional Notes / Gotchas
The Maybe company shut down and archived the repo — the image is frozen and receives no updates. Consider firefly_dev or paisa_dev in this repo as maintained alternatives.
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: maybe_dev
Compose file path: maybe_dev/compose.yaml
Additional env file (optional): maybe_dev/sample.env
Then "Load" maybe_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+68
View File
@@ -0,0 +1,68 @@
services:
maybe:
image: ${MAYBE_IMAGE:-ghcr.io/maybe-finance/maybe:latest}
restart: ${MAYBE_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/maybe/storage:/rails/storage
environment:
- SELF_HOSTED=true
- RAILS_FORCE_SSL=false
- RAILS_ASSUME_SSL=false
- SECRET_KEY_BASE=${MAYBE_SECRET_KEY_BASE:-ChangeThisPassword}
- DB_HOST=maybe-db
- POSTGRES_DB=maybe
- POSTGRES_USER=maybe
- POSTGRES_PASSWORD=${MAYBE_DB_PASSWORD:-ChangeThisPassword}
- REDIS_URL=redis://maybe-redis:6379/1
ports:
- ${MAYBE_PORT:-3000}:3000
networks:
- proxy
- internal
depends_on:
- maybe-db
- maybe-redis
maybe-worker:
image: ${MAYBE_IMAGE:-ghcr.io/maybe-finance/maybe:latest}
restart: ${MAYBE_RESTART:-unless-stopped}
environment:
- SELF_HOSTED=true
- SECRET_KEY_BASE=${MAYBE_SECRET_KEY_BASE:-ChangeThisPassword}
- DB_HOST=maybe-db
- POSTGRES_DB=maybe
- POSTGRES_USER=maybe
- POSTGRES_PASSWORD=${MAYBE_DB_PASSWORD:-ChangeThisPassword}
- REDIS_URL=redis://maybe-redis:6379/1
networks:
- internal
depends_on:
- maybe-db
- maybe-redis
command:
- bundle
- exec
- sidekiq
maybe-db:
image: ${POSTGRES_IMAGE:-postgres:16-alpine}
restart: ${MAYBE_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/maybe/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=maybe
- POSTGRES_USER=maybe
- POSTGRES_PASSWORD=${MAYBE_DB_PASSWORD:-ChangeThisPassword}
networks:
- internal
maybe-redis:
image: ${REDIS_IMAGE:-redis:7-alpine}
restart: ${MAYBE_RESTART:-unless-stopped}
networks:
- internal
networks:
proxy:
external: true
internal:
+9
View File
@@ -0,0 +1,9 @@
# Maybe Finance
VOL_PATH=/data
MAYBE_IMAGE=ghcr.io/maybe-finance/maybe:latest
POSTGRES_IMAGE=postgres:16-alpine
REDIS_IMAGE=redis:7-alpine
MAYBE_RESTART=unless-stopped
MAYBE_PORT=3000
MAYBE_SECRET_KEY_BASE=ChangeThisPassword
MAYBE_DB_PASSWORD=ChangeThisPassword
+61
View File
@@ -0,0 +1,61 @@
# Notifuse
## Overview
Newsletter, marketing campaign, and transactional email platform (open-source Mailchimp/Resend alternative).
## Project Details
- **Project Repository:** [GitHub](https://github.com/Notifuse/notifuse)
- **Container Image:** [notifuse/notifuse](https://hub.docker.com/r/notifuse/notifuse)
- **Documentation:** [docs.notifuse.com](https://docs.notifuse.com/self-hosting/installation)
- **Reverse Proxy Port:** `8080`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:8080 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
NOTIFUSE_SECRET_KEY encrypts all workspace secrets; NEVER change after setup or all stored credentials are lost
NOTIFUSE_ROOT_EMAIL initial admin account
NOTIFUSE_API_ENDPOINT public URL of the instance
## Volume Notes
/var/lib/postgresql/data PostgreSQL data
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name notifuse \
-p 8080:8080 \
-e API_ENDPOINT=http://localhost:8080 \
-e ROOT_EMAIL=admin@example.com \
-e SECRET_KEY=changeme \
-e DB_HOST=dbhost -e DB_USER=notifuse -e DB_PASSWORD=pass -e DB_NAME=notifuse \
notifuse/notifuse:latest
```
## Additional Notes / Gotchas
Notifuse creates a separate Postgres database per workspace, so the DB user needs CREATEDB privileges (the postgres superuser in this stack has it).
Sending requires an email provider (SES, Mailgun, SendGrid, Postmark, or SMTP) configured in the setup wizard.
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: notifuse_dev
Compose file path: notifuse_dev/compose.yaml
Additional env file (optional): notifuse_dev/sample.env
Then "Load" notifuse_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+37
View File
@@ -0,0 +1,37 @@
services:
notifuse:
image: ${NOTIFUSE_IMAGE:-notifuse/notifuse:latest}
restart: ${NOTIFUSE_RESTART:-unless-stopped}
environment:
- API_ENDPOINT=${NOTIFUSE_API_ENDPOINT:-http://localhost:8080}
- ROOT_EMAIL=${NOTIFUSE_ROOT_EMAIL:-admin@example.com}
- SECRET_KEY=${NOTIFUSE_SECRET_KEY:-ChangeThisPassword}
- DB_HOST=notifuse-db
- DB_PORT=5432
- DB_USER=notifuse
- DB_PASSWORD=${NOTIFUSE_DB_PASSWORD:-ChangeThisPassword}
- DB_NAME=notifuse
ports:
- ${NOTIFUSE_PORT:-8080}:8080
networks:
- proxy
- internal
depends_on:
- notifuse-db
notifuse-db:
image: ${POSTGRES_IMAGE:-postgres:17-alpine}
restart: ${NOTIFUSE_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/notifuse/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=notifuse
- POSTGRES_USER=notifuse
- POSTGRES_PASSWORD=${NOTIFUSE_DB_PASSWORD:-ChangeThisPassword}
networks:
- internal
networks:
proxy:
external: true
internal:
+10
View File
@@ -0,0 +1,10 @@
# Notifuse
VOL_PATH=/data
NOTIFUSE_IMAGE=notifuse/notifuse:latest
POSTGRES_IMAGE=postgres:17-alpine
NOTIFUSE_RESTART=unless-stopped
NOTIFUSE_PORT=8080
NOTIFUSE_API_ENDPOINT=http://localhost:8080
NOTIFUSE_ROOT_EMAIL=admin@example.com
NOTIFUSE_SECRET_KEY=ChangeThisPassword
NOTIFUSE_DB_PASSWORD=ChangeThisPassword
+56
View File
@@ -0,0 +1,56 @@
# Obsidian
## Overview
Local-first note-taking and knowledge management app, run as a web-accessible desktop via KasmVNC.
## Project Details
- **Project Repository:** [obsidian.md](https://obsidian.md/)
- **Container Image:** [linuxserver/obsidian](https://docs.linuxserver.io/images/docker-obsidian/)
- **Documentation:** [help.obsidian.md](https://help.obsidian.md/)
- **Reverse Proxy Port:** `3000`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:3000 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
OBSIDIAN_PUID / OBSIDIAN_PGID ownership of the vault files
## Volume Notes
/config Obsidian settings and your vaults
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name obsidian \
-p 3000:3000 \
-e TZ=America/Vancouver -e PUID=1000 -e PGID=1000 \
-v /data/obsidian/config:/config \
lscr.io/linuxserver/obsidian:latest
```
## Additional Notes / Gotchas
This streams the Obsidian desktop app to your browser (KasmVNC) — it is unauthenticated by default, so keep it behind the proxy with auth. Obsidian itself is proprietary (free for personal use).
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: obsidian_dev
Compose file path: obsidian_dev/compose.yaml
Additional env file (optional): obsidian_dev/sample.env
Then "Load" obsidian_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+18
View File
@@ -0,0 +1,18 @@
services:
obsidian:
image: ${OBSIDIAN_IMAGE:-lscr.io/linuxserver/obsidian:latest}
restart: ${OBSIDIAN_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/obsidian/config:/config
environment:
- TZ=${TZ:-America/Vancouver}
- PUID=${OBSIDIAN_PUID:-1000}
- PGID=${OBSIDIAN_PGID:-1000}
ports:
- ${OBSIDIAN_PORT:-3000}:3000
networks:
- proxy
networks:
proxy:
external: true
+8
View File
@@ -0,0 +1,8 @@
# Obsidian
VOL_PATH=/data
TZ=America/Vancouver
OBSIDIAN_IMAGE=lscr.io/linuxserver/obsidian:latest
OBSIDIAN_RESTART=unless-stopped
OBSIDIAN_PORT=3000
OBSIDIAN_PUID=1000
OBSIDIAN_PGID=1000
+62
View File
@@ -0,0 +1,62 @@
# Outline
## Overview
Team knowledge base and documentation wiki.
## Project Details
- **Project Repository:** [GitHub](https://github.com/outline/outline)
- **Container Image:** [outlinewiki/outline](https://hub.docker.com/r/outlinewiki/outline)
- **Documentation:** [docs.getoutline.com](https://docs.getoutline.com/s/hosting)
- **Reverse Proxy Port:** `3000`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:3000 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
OUTLINE_SECRET_KEY / OUTLINE_UTILS_SECRET generate each with `openssl rand -hex 32`
OUTLINE_URL public URL, must match how you access it
## Volume Notes
/var/lib/outline/data local file/attachment storage
/var/lib/postgresql/data PostgreSQL data
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name outline \
-p 3000:3000 \
-e URL=http://localhost:3000 \
-e SECRET_KEY=$(openssl rand -hex 32) \
-e UTILS_SECRET=$(openssl rand -hex 32) \
-e DATABASE_URL=postgres://outline:pass@dbhost:5432/outline \
-e PGSSLMODE=disable \
-e REDIS_URL=redis://redishost:6379 \
outlinewiki/outline:latest
```
## Additional Notes / Gotchas
Outline has no built-in username/password login — you must configure an auth provider (OIDC, Google, Slack, etc.) via additional env vars before anyone can sign in. Authentik or Authelia from this repo work as OIDC providers.
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: outline_dev
Compose file path: outline_dev/compose.yaml
Additional env file (optional): outline_dev/sample.env
Then "Load" outline_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+46
View File
@@ -0,0 +1,46 @@
services:
outline:
image: ${OUTLINE_IMAGE:-outlinewiki/outline:latest}
restart: ${OUTLINE_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/outline/data:/var/lib/outline/data
environment:
- URL=${OUTLINE_URL:-http://localhost:3000}
- SECRET_KEY=${OUTLINE_SECRET_KEY:-ChangeThisPassword}
- UTILS_SECRET=${OUTLINE_UTILS_SECRET:-ChangeThisPassword}
- DATABASE_URL=postgres://outline:${OUTLINE_DB_PASSWORD:-ChangeThisPassword}@outline-db:5432/outline
- PGSSLMODE=disable
- REDIS_URL=redis://outline-redis:6379
- FILE_STORAGE=local
- FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data
ports:
- ${OUTLINE_PORT:-3000}:3000
networks:
- proxy
- internal
depends_on:
- outline-db
- outline-redis
outline-db:
image: ${POSTGRES_IMAGE:-postgres:16-alpine}
restart: ${OUTLINE_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/outline/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=outline
- POSTGRES_USER=outline
- POSTGRES_PASSWORD=${OUTLINE_DB_PASSWORD:-ChangeThisPassword}
networks:
- internal
outline-redis:
image: ${REDIS_IMAGE:-redis:7-alpine}
restart: ${OUTLINE_RESTART:-unless-stopped}
networks:
- internal
networks:
proxy:
external: true
internal:
+11
View File
@@ -0,0 +1,11 @@
# Outline
VOL_PATH=/data
OUTLINE_IMAGE=outlinewiki/outline:latest
POSTGRES_IMAGE=postgres:16-alpine
REDIS_IMAGE=redis:7-alpine
OUTLINE_RESTART=unless-stopped
OUTLINE_PORT=3000
OUTLINE_URL=http://localhost:3000
OUTLINE_SECRET_KEY=ChangeThisPassword
OUTLINE_UTILS_SECRET=ChangeThisPassword
OUTLINE_DB_PASSWORD=ChangeThisPassword
+59
View File
@@ -0,0 +1,59 @@
# Picard
## Overview
MusicBrainz-powered music file tagging and organization tool, accessed through a web-based desktop.
## Project Details
- **Project Repository:** [GitHub](https://github.com/mikenye/docker-picard)
- **Container Image:** [mikenye/picard](https://hub.docker.com/r/mikenye/picard)
- **Documentation:** [picard.musicbrainz.org](https://picard.musicbrainz.org/)
- **Reverse Proxy Port:** `5800`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:5800 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
PICARD_MUSIC host path to your music library
PICARD_PUID / PICARD_PGID ownership for written tags/files
## Volume Notes
/config Picard settings
/storage your music library
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name picard \
-p 5800:5800 \
-e TZ=America/Vancouver \
-v /data/picard/config:/config:rw \
-v /data/media/music:/storage:rw \
mikenye/picard:latest
```
## Additional Notes / Gotchas
This is a GUI app streamed to the browser via VNC — it is single-user and unauthenticated by default; keep it behind the proxy.
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: picard_dev
Compose file path: picard_dev/compose.yaml
Additional env file (optional): picard_dev/sample.env
Then "Load" picard_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+19
View File
@@ -0,0 +1,19 @@
services:
picard:
image: ${PICARD_IMAGE:-mikenye/picard:latest}
restart: ${PICARD_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/picard/config:/config:rw
- ${PICARD_MUSIC:-/data/media/music}:/storage:rw
environment:
- TZ=${TZ:-America/Vancouver}
- USER_ID=${PICARD_PUID:-1000}
- GROUP_ID=${PICARD_PGID:-1000}
ports:
- ${PICARD_PORT:-5800}:5800
networks:
- proxy
networks:
proxy:
external: true
+9
View File
@@ -0,0 +1,9 @@
# Picard
VOL_PATH=/data
TZ=America/Vancouver
PICARD_IMAGE=mikenye/picard:latest
PICARD_RESTART=unless-stopped
PICARD_PORT=5800
PICARD_PUID=1000
PICARD_PGID=1000
PICARD_MUSIC=/data/media/music
+60
View File
@@ -0,0 +1,60 @@
# Portus
## Overview
Web UI and authorization service for on-premise Docker registries.
## Project Details
- **Project Repository:** [GitHub](https://github.com/SUSE/Portus)
- **Container Image:** [opensuse/portus](https://hub.docker.com/r/opensuse/portus/)
- **Documentation:** [port.us.org](http://port.us.org/)
- **Reverse Proxy Port:** `3000`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:3000 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
PORTUS_FQDN hostname Portus is reached at (must match registry config)
PORTUS_SECRET_KEY_BASE generate with `openssl rand -hex 64`
PORTUS_PASSWORD internal password Portus uses to talk to the registry
## Volume Notes
/var/lib/mysql MariaDB data
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name portus \
-p 3000:3000 \
-e PORTUS_MACHINE_FQDN_VALUE=portus.localhost \
-e PORTUS_SECRET_KEY_BASE=changeme \
-e PORTUS_PASSWORD=changeme \
-e PORTUS_DB_HOST=dbhost \
opensuse/portus:2.5
```
## Additional Notes / Gotchas
Portus was abandoned by openSUSE/SUSE years ago — kept here for reference only. It also needs a Docker registry container configured with Portus as its token auth endpoint (not included). For a maintained registry UI consider Harbor or the built-in gitea registry.
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: portus_dev
Compose file path: portus_dev/compose.yaml
Additional env file (optional): portus_dev/sample.env
Then "Load" portus_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+39
View File
@@ -0,0 +1,39 @@
services:
portus:
image: ${PORTUS_IMAGE:-opensuse/portus:2.5}
restart: ${PORTUS_RESTART:-unless-stopped}
environment:
- PORTUS_MACHINE_FQDN_VALUE=${PORTUS_FQDN:-portus.localhost}
- PORTUS_SECRET_KEY_BASE=${PORTUS_SECRET_KEY_BASE:-ChangeThisPassword}
- PORTUS_KEY_PATH=/certificates/portus.key
- PORTUS_PASSWORD=${PORTUS_PASSWORD:-ChangeThisPassword}
- PORTUS_DB_HOST=portus-db
- PORTUS_DB_DATABASE=portus
- PORTUS_DB_USERNAME=portus
- PORTUS_DB_PASSWORD=${PORTUS_DB_PASSWORD:-ChangeThisPassword}
- PORTUS_CHECK_SSL_USAGE_ENABLED=false
ports:
- ${PORTUS_PORT:-3000}:3000
networks:
- proxy
- internal
depends_on:
- portus-db
portus-db:
image: ${MARIADB_IMAGE:-mariadb:10.11}
restart: ${PORTUS_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/portus/db:/var/lib/mysql
environment:
- MARIADB_DATABASE=portus
- MARIADB_USER=portus
- MARIADB_PASSWORD=${PORTUS_DB_PASSWORD:-ChangeThisPassword}
- MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD:-ChangeThisPassword}
networks:
- internal
networks:
proxy:
external: true
internal:
+11
View File
@@ -0,0 +1,11 @@
# Portus
VOL_PATH=/data
PORTUS_IMAGE=opensuse/portus:2.5
MARIADB_IMAGE=mariadb:10.11
PORTUS_RESTART=unless-stopped
PORTUS_PORT=3000
PORTUS_FQDN=portus.localhost
PORTUS_SECRET_KEY_BASE=ChangeThisPassword
PORTUS_PASSWORD=ChangeThisPassword
PORTUS_DB_PASSWORD=ChangeThisPassword
MARIADB_ROOT_PASSWORD=ChangeThisPassword
+60
View File
@@ -0,0 +1,60 @@
# Sencho
## Overview
Self-hosted, multi-node Docker Compose management dashboard.
## Project Details
- **Project Repository:** [GitHub](https://github.com/Studio-Saelix/sencho)
- **Container Image:** [saelix/sencho](https://hub.docker.com/r/saelix/sencho)
- **Documentation:** [docs.sencho.io](https://docs.sencho.io/)
- **Reverse Proxy Port:** `1852`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:1852 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
SENCHO_COMPOSE_DIR host directory where compose stacks live (source of truth)
## Volume Notes
/data Sencho application data
/compose your compose stacks on the host filesystem
/var/run/docker.sock Docker socket (required)
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name sencho \
-p 1852:1852 \
-e COMPOSE_DIR=/compose -e DATA_DIR=/data \
-v /data/sencho/data:/data \
-v /data/compose:/compose \
-v /var/run/docker.sock:/var/run/docker.sock \
saelix/sencho:latest
```
## Additional Notes / Gotchas
Sencho overlaps heavily with Dockhand (the manager this repo is built around) — treat this stack as an evaluation/experiment, not a replacement.
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: sencho_dev
Compose file path: sencho_dev/compose.yaml
Additional env file (optional): sencho_dev/sample.env
Then "Load" sencho_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+19
View File
@@ -0,0 +1,19 @@
services:
sencho:
image: ${SENCHO_IMAGE:-saelix/sencho:latest}
restart: ${SENCHO_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/sencho/data:/data
- ${SENCHO_COMPOSE_DIR:-/data/compose}:/compose
- /var/run/docker.sock:/var/run/docker.sock
environment:
- COMPOSE_DIR=/compose
- DATA_DIR=/data
ports:
- ${SENCHO_PORT:-1852}:1852
networks:
- proxy
networks:
proxy:
external: true
+6
View File
@@ -0,0 +1,6 @@
# Sencho
VOL_PATH=/data
SENCHO_IMAGE=saelix/sencho:latest
SENCHO_RESTART=unless-stopped
SENCHO_PORT=1852
SENCHO_COMPOSE_DIR=/data/compose
+59
View File
@@ -0,0 +1,59 @@
# Silverpeas
## Overview
Enterprise collaboration platform: intranet, document sharing, and communication tools.
## Project Details
- **Project Repository:** [silverpeas.org](https://www.silverpeas.org/)
- **Container Image:** [silverpeas](https://hub.docker.com/_/silverpeas)
- **Documentation:** [Docker Hub](https://hub.docker.com/_/silverpeas)
- **Reverse Proxy Port:** `8000`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:8000 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
SILVERPEAS_DB_PASSWORD shared between the app and postgres
## Volume Notes
/opt/silverpeas/data documents and application data
/opt/silverpeas/log logs
/var/lib/postgresql/data PostgreSQL data
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name silverpeas \
-p 8000:8000 \
-e DB_SERVERTYPE=POSTGRESQL -e DB_SERVER=dbhost \
-e DB_NAME=silverpeas -e DB_USER=silverpeas -e DB_PASSWORD=pass \
silverpeas:latest
```
## Additional Notes / Gotchas
The app is served under the `/silverpeas` path (http://localhost:8000/silverpeas). Default admin is SilverAdmin/SilverAdmin — change it.
First startup is slow (Wildfly + DB migration).
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: silverpeas_dev
Compose file path: silverpeas_dev/compose.yaml
Additional env file (optional): silverpeas_dev/sample.env
Then "Load" silverpeas_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+37
View File
@@ -0,0 +1,37 @@
services:
silverpeas:
image: ${SILVERPEAS_IMAGE:-silverpeas:latest}
restart: ${SILVERPEAS_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/silverpeas/data:/opt/silverpeas/data
- ${VOL_PATH:-/data}/silverpeas/log:/opt/silverpeas/log
environment:
- DB_SERVERTYPE=POSTGRESQL
- DB_SERVER=silverpeas-db
- DB_NAME=silverpeas
- DB_USER=silverpeas
- DB_PASSWORD=${SILVERPEAS_DB_PASSWORD:-ChangeThisPassword}
ports:
- ${SILVERPEAS_PORT:-8000}:8000
networks:
- proxy
- internal
depends_on:
- silverpeas-db
silverpeas-db:
image: ${POSTGRES_IMAGE:-postgres:16-alpine}
restart: ${SILVERPEAS_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/silverpeas/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=silverpeas
- POSTGRES_USER=silverpeas
- POSTGRES_PASSWORD=${SILVERPEAS_DB_PASSWORD:-ChangeThisPassword}
networks:
- internal
networks:
proxy:
external: true
internal:
+7
View File
@@ -0,0 +1,7 @@
# Silverpeas
VOL_PATH=/data
SILVERPEAS_IMAGE=silverpeas:latest
POSTGRES_IMAGE=postgres:16-alpine
SILVERPEAS_RESTART=unless-stopped
SILVERPEAS_PORT=8000
SILVERPEAS_DB_PASSWORD=ChangeThisPassword
+67
View File
@@ -0,0 +1,67 @@
# Tdarr
## Overview
Distributed media transcoding and library automation (part of the *rr media stack).
## Project Details
- **Project Repository:** [GitHub](https://github.com/HaveAGitGat/Tdarr)
- **Container Image:** [ghcr.io/haveagitgat/tdarr](https://github.com/HaveAGitGat/Tdarr/pkgs/container/tdarr)
- **Documentation:** [Docs](https://docs.tdarr.io/)
- **Reverse Proxy Port:** `8265`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:8265 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
TDARR_MEDIA host path to your media library
TDARR_SERVER_PORT internal server port used by nodes (8266)
TDARR_NODE_NAME name of the built-in internal node
## Volume Notes
/app/server Tdarr server data
/app/configs configuration
/app/logs logs
/temp transcode cache (use fast storage)
/media your media library
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name tdarr \
-p 8265:8265 -p 8266:8266 \
-e TZ=America/Vancouver \
-e serverIP=0.0.0.0 -e serverPort=8266 -e webUIPort=8265 \
-e internalNode=true -e inContainer=true \
-v /data/tdarr/server:/app/server \
-v /data/tdarr/configs:/app/configs \
-v /data/media:/media \
ghcr.io/haveagitgat/tdarr:latest
```
## Additional Notes / Gotchas
For hardware transcoding pass through your GPU (e.g. `--gpus all` or `/dev/dri`); not included in this compose file.
Extra transcode nodes can join by pointing at port 8266.
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: tdarr_dev
Compose file path: tdarr_dev/compose.yaml
Additional env file (optional): tdarr_dev/sample.env
Then "Load" tdarr_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+27
View File
@@ -0,0 +1,27 @@
services:
tdarr:
image: ${TDARR_IMAGE:-ghcr.io/haveagitgat/tdarr:latest}
restart: ${TDARR_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/tdarr/server:/app/server
- ${VOL_PATH:-/data}/tdarr/configs:/app/configs
- ${VOL_PATH:-/data}/tdarr/logs:/app/logs
- ${VOL_PATH:-/data}/tdarr/cache:/temp
- ${TDARR_MEDIA:-/data/media}:/media
environment:
- TZ=${TZ:-America/Vancouver}
- serverIP=0.0.0.0
- serverPort=${TDARR_SERVER_PORT:-8266}
- webUIPort=${TDARR_PORT:-8265}
- internalNode=true
- inContainer=true
- nodeName=${TDARR_NODE_NAME:-InternalNode}
ports:
- ${TDARR_PORT:-8265}:8265
- ${TDARR_SERVER_PORT:-8266}:8266
networks:
- proxy
networks:
proxy:
external: true
+9
View File
@@ -0,0 +1,9 @@
# Tdarr
VOL_PATH=/data
TZ=America/Vancouver
TDARR_IMAGE=ghcr.io/haveagitgat/tdarr:latest
TDARR_RESTART=unless-stopped
TDARR_PORT=8265
TDARR_SERVER_PORT=8266
TDARR_NODE_NAME=InternalNode
TDARR_MEDIA=/data/media
+58
View File
@@ -0,0 +1,58 @@
# Tinyauth
## Overview
Minimal authentication proxy middleware for securing apps behind a login screen.
## Project Details
- **Project Repository:** [GitHub](https://github.com/steveiliop56/tinyauth)
- **Container Image:** [ghcr.io/steveiliop56/tinyauth](https://github.com/steveiliop56/tinyauth/pkgs/container/tinyauth)
- **Documentation:** [tinyauth.app](https://tinyauth.app/docs/getting-started/)
- **Reverse Proxy Port:** `3000`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:3000 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
TINYAUTH_APPURL public URL of the tinyauth instance
TINYAUTH_AUTH_USERS user:bcrypt-hash pairs; generate with `docker run -i -t --rm ghcr.io/steveiliop56/tinyauth:v5 user create --interactive`
Note: `$` in bcrypt hashes must be escaped as `$$` inside compose files
## Volume Notes
None — tinyauth is stateless
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name tinyauth \
-p 3000:3000 \
-e TINYAUTH_APPURL=http://localhost:3000 \
-e 'TINYAUTH_AUTH_USERS=user:$2a$10$hash' \
ghcr.io/steveiliop56/tinyauth:v5
```
## Additional Notes / Gotchas
Tinyauth is forward-auth middleware — it protects apps via your reverse proxy (Traefik/NPM/Caddy) rather than being visited directly. Nginx Proxy Manager guide: https://tinyauth.app/docs/guides/nginx-proxy-manager/
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: tinyauth_dev
Compose file path: tinyauth_dev/compose.yaml
Additional env file (optional): tinyauth_dev/sample.env
Then "Load" tinyauth_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+15
View File
@@ -0,0 +1,15 @@
services:
tinyauth:
image: ${TINYAUTH_IMAGE:-ghcr.io/steveiliop56/tinyauth:v5}
restart: ${TINYAUTH_RESTART:-unless-stopped}
environment:
- TINYAUTH_APPURL=${TINYAUTH_APPURL:-http://localhost:3000}
- TINYAUTH_AUTH_USERS=${TINYAUTH_AUTH_USERS:-user:$$2a$$10$$ReplaceWithBcryptHash}
ports:
- ${TINYAUTH_PORT:-3000}:3000
networks:
- proxy
networks:
proxy:
external: true
+7
View File
@@ -0,0 +1,7 @@
# Tinyauth
VOL_PATH=/data
TINYAUTH_IMAGE=ghcr.io/steveiliop56/tinyauth:v5
TINYAUTH_RESTART=unless-stopped
TINYAUTH_PORT=3000
TINYAUTH_APPURL=http://localhost:3000
TINYAUTH_AUTH_USERS=user:$2a$10$ReplaceWithBcryptHash
+61
View File
@@ -0,0 +1,61 @@
# Traefik
## Overview
Modern reverse proxy and load balancer designed for microservices and Docker environments.
## Project Details
- **Project Repository:** [GitHub](https://github.com/traefik/traefik)
- **Container Image:** [traefik](https://hub.docker.com/_/traefik)
- **Documentation:** [doc.traefik.io](https://doc.traefik.io/traefik/)
- **Reverse Proxy Port:** `8080` (dashboard)
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:8080 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
TRAEFIK_HTTP_PORT / TRAEFIK_HTTPS_PORT entrypoint ports
TRAEFIK_DASHBOARD_PORT dashboard/API port
## Volume Notes
/var/run/docker.sock read-only Docker socket for service discovery
/letsencrypt ACME certificate storage
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name traefik \
-p 80:80 -p 443:443 -p 8080:8080 \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
traefik:v3 \
--api.insecure=true --providers.docker=true \
--providers.docker.exposedbydefault=false \
--entrypoints.web.address=:80 --entrypoints.websecure.address=:443
```
## Additional Notes / Gotchas
This repo assumes Nginx Proxy Manager as the main reverse proxy — running Traefik alongside it will conflict on ports 80/443 unless you change them.
`--api.insecure=true` exposes the dashboard without auth; do not expose port 8080 publicly.
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: traefik_dev
Compose file path: traefik_dev/compose.yaml
Additional env file (optional): traefik_dev/sample.env
Then "Load" traefik_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+23
View File
@@ -0,0 +1,23 @@
services:
traefik:
image: ${TRAEFIK_IMAGE:-traefik:v3}
restart: ${TRAEFIK_RESTART:-unless-stopped}
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ${VOL_PATH:-/data}/traefik/letsencrypt:/letsencrypt
ports:
- ${TRAEFIK_HTTP_PORT:-80}:80
- ${TRAEFIK_HTTPS_PORT:-443}:443
- ${TRAEFIK_DASHBOARD_PORT:-8080}:8080
networks:
- proxy
command:
- --api.insecure=true
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
networks:
proxy:
external: true
+7
View File
@@ -0,0 +1,7 @@
# Traefik
VOL_PATH=/data
TRAEFIK_IMAGE=traefik:v3
TRAEFIK_RESTART=unless-stopped
TRAEFIK_HTTP_PORT=80
TRAEFIK_HTTPS_PORT=443
TRAEFIK_DASHBOARD_PORT=8080
+58
View File
@@ -0,0 +1,58 @@
# Tugtainer
## Overview
Web UI alternative to Watchtower for checking and automating Docker container image updates.
## Project Details
- **Project Repository:** [GitHub](https://github.com/Quenary/tugtainer)
- **Container Image:** [ghcr.io/quenary/tugtainer](https://github.com/Quenary/tugtainer/pkgs/container/tugtainer)
- **Documentation:** [GitHub README](https://github.com/Quenary/tugtainer)
- **Reverse Proxy Port:** `80`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:9412 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
TUGTAINER_PORT host port for the web UI
## Volume Notes
/tugtainer application data
/var/run/docker.sock read-only Docker socket (required)
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name tugtainer \
-p 9412:80 \
-v /data/tugtainer:/tugtainer \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
ghcr.io/quenary/tugtainer:1
```
## Additional Notes / Gotchas
Upstream states the project is not production-ready — home lab use only.
It is dependency-aware and can update compose stacks in the right order.
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: tugtainer_dev
Compose file path: tugtainer_dev/compose.yaml
Additional env file (optional): tugtainer_dev/sample.env
Then "Load" tugtainer_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+15
View File
@@ -0,0 +1,15 @@
services:
tugtainer:
image: ${TUGTAINER_IMAGE:-ghcr.io/quenary/tugtainer:1}
restart: ${TUGTAINER_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/tugtainer:/tugtainer
- /var/run/docker.sock:/var/run/docker.sock:ro
ports:
- ${TUGTAINER_PORT:-9412}:80
networks:
- proxy
networks:
proxy:
external: true
+5
View File
@@ -0,0 +1,5 @@
# Tugtainer
VOL_PATH=/data
TUGTAINER_IMAGE=ghcr.io/quenary/tugtainer:1
TUGTAINER_RESTART=unless-stopped
TUGTAINER_PORT=9412
+60
View File
@@ -0,0 +1,60 @@
# Twenty CRM
## Overview
Modern open-source CRM system for managing customers and pipelines.
## Project Details
- **Project Repository:** [GitHub](https://github.com/twentyhq/twenty)
- **Container Image:** [twentycrm/twenty](https://hub.docker.com/r/twentycrm/twenty)
- **Documentation:** [twenty.com](https://twenty.com/developers/section/self-hosting)
- **Reverse Proxy Port:** `3000`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:3000 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
TWENTY_APP_SECRET generate with `openssl rand -base64 32`
TWENTY_SERVER_URL public URL of the instance
## Volume Notes
/app/packages/twenty-server/.local-storage uploaded files (shared by server and worker)
/var/lib/postgresql/data PostgreSQL data
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name twenty \
-p 3000:3000 \
-e SERVER_URL=http://localhost:3000 \
-e APP_SECRET=changeme \
-e PG_DATABASE_URL=postgres://twenty:pass@dbhost:5432/default \
-e REDIS_URL=redis://redishost:6379 \
twentycrm/twenty:latest
```
## Additional Notes / Gotchas
The worker container is required for background jobs (sync, imports). Both containers must share the same APP_SECRET and storage volume.
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: twenty_dev
Compose file path: twenty_dev/compose.yaml
Additional env file (optional): twenty_dev/sample.env
Then "Load" twenty_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+62
View File
@@ -0,0 +1,62 @@
services:
twenty:
image: ${TWENTY_IMAGE:-twentycrm/twenty:latest}
restart: ${TWENTY_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/twenty/data:/app/packages/twenty-server/.local-storage
environment:
- SERVER_URL=${TWENTY_SERVER_URL:-http://localhost:3000}
- APP_SECRET=${TWENTY_APP_SECRET:-ChangeThisPassword}
- PG_DATABASE_URL=postgres://twenty:${TWENTY_DB_PASSWORD:-ChangeThisPassword}@twenty-db:5432/default
- REDIS_URL=redis://twenty-redis:6379
ports:
- ${TWENTY_PORT:-3000}:3000
networks:
- proxy
- internal
depends_on:
- twenty-db
- twenty-redis
twenty-worker:
image: ${TWENTY_IMAGE:-twentycrm/twenty:latest}
restart: ${TWENTY_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/twenty/data:/app/packages/twenty-server/.local-storage
environment:
- SERVER_URL=${TWENTY_SERVER_URL:-http://localhost:3000}
- APP_SECRET=${TWENTY_APP_SECRET:-ChangeThisPassword}
- PG_DATABASE_URL=postgres://twenty:${TWENTY_DB_PASSWORD:-ChangeThisPassword}@twenty-db:5432/default
- REDIS_URL=redis://twenty-redis:6379
- DISABLE_DB_MIGRATIONS=true
networks:
- internal
depends_on:
- twenty-db
- twenty-redis
command:
- yarn
- worker:prod
twenty-db:
image: ${POSTGRES_IMAGE:-postgres:16-alpine}
restart: ${TWENTY_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/twenty/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=default
- POSTGRES_USER=twenty
- POSTGRES_PASSWORD=${TWENTY_DB_PASSWORD:-ChangeThisPassword}
networks:
- internal
twenty-redis:
image: ${REDIS_IMAGE:-redis:7-alpine}
restart: ${TWENTY_RESTART:-unless-stopped}
networks:
- internal
networks:
proxy:
external: true
internal:
+10
View File
@@ -0,0 +1,10 @@
# Twenty CRM
VOL_PATH=/data
TWENTY_IMAGE=twentycrm/twenty:latest
POSTGRES_IMAGE=postgres:16-alpine
REDIS_IMAGE=redis:7-alpine
TWENTY_RESTART=unless-stopped
TWENTY_PORT=3000
TWENTY_SERVER_URL=http://localhost:3000
TWENTY_APP_SECRET=ChangeThisPassword
TWENTY_DB_PASSWORD=ChangeThisPassword
+58
View File
@@ -0,0 +1,58 @@
# VoidAuth
## Overview
Lightweight self-hosted authentication system (SSO / identity provider).
## Project Details
- **Project Repository:** [GitHub](https://github.com/voidauth/voidauth)
- **Container Image:** [voidauth/voidauth](https://hub.docker.com/r/voidauth/voidauth)
- **Documentation:** [voidauth.app](https://voidauth.app/)
- **Reverse Proxy Port:** `3000`
## Getting Started
1. Start the container: `docker compose up -d`
2. Open http://localhost:3000 in your browser
3. Follow the initial setup wizard to configure the application
## Environment Variable Notes
VOIDAUTH_STORAGE_KEY encryption key, generate with `openssl rand -hex 32`; do not change after setup
VOIDAUTH_APP_URL public URL of the instance
## Volume Notes
/var/lib/postgresql/data PostgreSQL data
## Network Notes
Requires proxy network
## Docker Run
```bash
docker run -d \
--name voidauth \
-p 3000:3000 \
-e APP_URL=http://localhost:3000 \
-e STORAGE_KEY=changeme \
-e DB_HOST=dbhost -e DB_PASSWORD=pass \
voidauth/voidauth:latest
```
## Additional Notes / Gotchas
See also authentik_dev, authelia_dev, and tinyauth_dev in this repo for alternative auth stacks.
## Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: voidauth_dev
Compose file path: voidauth_dev/compose.yaml
Additional env file (optional): voidauth_dev/sample.env
Then "Load" voidauth_dev/sample.env into the Environmental variables in dockhand
Create the Stack
+33
View File
@@ -0,0 +1,33 @@
services:
voidauth:
image: ${VOIDAUTH_IMAGE:-voidauth/voidauth:latest}
restart: ${VOIDAUTH_RESTART:-unless-stopped}
environment:
- APP_URL=${VOIDAUTH_APP_URL:-http://localhost:3000}
- STORAGE_KEY=${VOIDAUTH_STORAGE_KEY:-ChangeThisPassword}
- DB_HOST=voidauth-db
- DB_PASSWORD=${VOIDAUTH_DB_PASSWORD:-ChangeThisPassword}
ports:
- ${VOIDAUTH_PORT:-3000}:3000
networks:
- proxy
- internal
depends_on:
- voidauth-db
voidauth-db:
image: ${POSTGRES_IMAGE:-postgres:17-alpine}
restart: ${VOIDAUTH_RESTART:-unless-stopped}
volumes:
- ${VOL_PATH:-/data}/voidauth/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=voidauth
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=${VOIDAUTH_DB_PASSWORD:-ChangeThisPassword}
networks:
- internal
networks:
proxy:
external: true
internal:
+9
View File
@@ -0,0 +1,9 @@
# VoidAuth
VOL_PATH=/data
VOIDAUTH_IMAGE=voidauth/voidauth:latest
POSTGRES_IMAGE=postgres:17-alpine
VOIDAUTH_RESTART=unless-stopped
VOIDAUTH_PORT=3000
VOIDAUTH_APP_URL=http://localhost:3000
VOIDAUTH_STORAGE_KEY=ChangeThisPassword
VOIDAUTH_DB_PASSWORD=ChangeThisPassword