mirror of
https://github.com/nickyeoman/docker-compose-cookbooks.git
synced 2026-09-03 18:36:22 +00:00
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:
@@ -4,62 +4,10 @@ These are containers that have been requested to add to the repo. This used to
|
||||
|
||||
## 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).
|
||||
|
||||
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
|
||||
|
||||
(empty — all previous requests have been added as stacks or moved to the section below)
|
||||
|
||||
## 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.
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1,6 @@
|
||||
# Authelia
|
||||
VOL_PATH=/data
|
||||
TZ=America/Vancouver
|
||||
AUTHELIA_IMAGE=authelia/authelia:latest
|
||||
AUTHELIA_RESTART=unless-stopped
|
||||
AUTHELIA_PORT=9091
|
||||
@@ -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
|
||||
@@ -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:
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1,5 @@
|
||||
# ComfyUI
|
||||
VOL_PATH=/data
|
||||
COMFYUI_IMAGE=yanwk/comfyui-boot:cu124-slim
|
||||
COMFYUI_RESTART=unless-stopped
|
||||
COMFYUI_PORT=8188
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1,5 @@
|
||||
# Dashy
|
||||
VOL_PATH=/data
|
||||
DASHY_IMAGE=lissy93/dashy:latest
|
||||
DASHY_RESTART=unless-stopped
|
||||
DASHY_PORT=4000
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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:
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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:
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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:
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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:
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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:
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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:
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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:
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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:
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1,5 @@
|
||||
# Tugtainer
|
||||
VOL_PATH=/data
|
||||
TUGTAINER_IMAGE=ghcr.io/quenary/tugtainer:1
|
||||
TUGTAINER_RESTART=unless-stopped
|
||||
TUGTAINER_PORT=9412
|
||||
@@ -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
|
||||
@@ -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:
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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:
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user