Compare commits

...

10 Commits

Author SHA1 Message Date
derekc 11e96df3eb created mealie 2026-05-21 00:45:37 -07:00
derekc c8cf83a1c9 Added new containers 2026-05-20 23:35:57 -07:00
derekc ec828c185d created metube 2026-05-20 23:05:43 -07:00
derekc 8309328890 removed memory limit 2026-05-19 10:04:30 -07:00
derekc 1b1d058ded added bind mount and updated env examples 2026-05-19 09:52:21 -07:00
derekc 472a09ea5c fixed healthcheck 2026-05-19 09:39:56 -07:00
derekc 068ccd6b4d increased the memory limit 2026-05-19 09:32:57 -07:00
derekc 44c1de67cd added healthchecks and resource limits. Also changed a variable 2026-05-19 09:28:51 -07:00
derekc 80f173ebc5 created pinchflat 2026-05-19 09:13:04 -07:00
derekc a4ec975fff set volume names 2026-05-16 01:07:38 -07:00
9 changed files with 233 additions and 1 deletions
+40
View File
@@ -0,0 +1,40 @@
# Mealie Docker Compose (NFS) - Environment Variables
# Copy this file to .env and fill in your values
# --- Image ---
# Mealie image tag (use a specific version for stability, or 'latest')
MEALIE_VERSION=latest
# --- Permissions ---
# User and group ID that Mealie runs as (match your host user to avoid permission issues)
MEALIE_PUID=1000
MEALIE_PGID=1000
# --- Network ---
# Host port to expose the Mealie web UI on
MEALIE_PORT=9000
# --- Application ---
# Full public URL where Mealie is accessible (used for links in emails and API responses)
MEALIE_BASE_URL=https://mealie.yourdomain.com
# Timezone for the container (affects scheduled tasks and timestamps)
MEALIE_TZ=America/Los_Angeles
# Allow new users to self-register (true/false)
MEALIE_ALLOW_SIGNUP=false
# Number of concurrent worker processes for the API server (tune to available CPU cores)
MEALIE_UVICORN_WORKERS=4
# --- NFS Volume ---
# IP address or hostname of the NFS server
MEALIE_NFS_SERVER=192.168.1.x
# NFS export path on the server (e.g. /mnt/pool/mealie)
MEALIE_NFS_DEVICE=:/path/to/nfs/export
+29
View File
@@ -0,0 +1,29 @@
services:
app:
image: ghcr.io/mealie-recipes/mealie:${MEALIE_VERSION:-latest}
container_name: mealie-app
ports:
- ${MEALIE_PORT:-9000}:9000
volumes:
- mealie-app:/app/data/
environment:
- ALLOW_SIGNUP=${MEALIE_ALLOW_SIGNUP:-false}
- PUID=${MEALIE_PUID:-1000}
- PGID=${MEALIE_PGID:-1000}
- TZ=${MEALIE_TZ:-America/Los_Angeles}
- BASE_URL=${MEALIE_BASE_URL}
- UVICORN_WORKERS=${MEALIE_UVICORN_WORKERS:-4}
deploy:
resources:
limits:
memory: 1000M
restart: unless-stopped
volumes:
mealie-app:
name: mealie-app
driver: local
driver_opts:
type: nfs
o: "addr=${MEALIE_NFS_SERVER},rw,noatime,rsize=65536,wsize=65536,timeo=600,nfsvers=4"
device: "${MEALIE_NFS_DEVICE}"
+34
View File
@@ -0,0 +1,34 @@
# MeTube Docker Compose - Environment Variables
# Copy this file to .env and fill in your values
# --- Image ---
# MeTube image tag (use a specific version for stability, or 'latest')
METUBE_VERSION=latest
# --- Permissions ---
# User and group ID that MeTube runs as (match your host user to avoid permission issues)
METUBE_PUID=1000
METUBE_PGID=1000
# File permission mask applied to downloaded files (022 = owner rw, group/others r)
METUBE_UMASK=022
# --- Storage ---
# Host path where downloaded files will be saved
METUBE_DOWNLOAD=/path/to/downloads
# --- Network ---
# Host port to expose the MeTube web UI on
METUBE_PORT=8081
# --- Download Behavior ---
# Delete the file from disk when trashed in the UI (true/false)
METUBE_DELETE_FILE_ON_TRASHCAN=true
# Seconds after completion before a finished download is removed from the queue (3600 = 1 hour, 0 = disabled)
METUBE_CLEAR_COMPLETED_AFTER=3600
+25
View File
@@ -0,0 +1,25 @@
services:
app:
image: alexta69/metube:${METUBE_VERSION:-latest}
container_name: metube-app
environment:
- PUID=${METUBE_PUID:-1000}
- PGID=${METUBE_PGID:-1000}
- UMASK=${METUBE_UMASK:-022}
- DELETE_FILE_ON_TRASHCAN=${METUBE_DELETE_FILE_ON_TRASHCAN:-true}
- CLEAR_COMPLETED_AFTER=${METUBE_CLEAR_COMPLETED_AFTER:-3600}
volumes:
- ${METUBE_DOWNLOAD}:/downloads
ports:
- ${METUBE_PORT}:8081
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8081/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
deploy:
resources:
limits:
memory: 512m
restart: unless-stopped
+41
View File
@@ -0,0 +1,41 @@
# Pinchflat
# Docker image tag to use (e.g. "latest" or a pinned version like "v2024.5.30")
PINCHFLAT_VERSION=latest
# IANA timezone name for the container (e.g. America/Chicago, America/New_York)
PINCHFLAT_TZ=America/Los_Angeles
# Host port to expose the Pinchflat web UI on
PINCHFLAT_PORT=8945
# Host path where downloaded media will be stored
PINCHFLAT_DOWNLOAD=/path/to/downloads
# Auth - required for production
# Username for HTTP basic auth on the web UI
PINCHFLAT_AUTH_USER=admin
# Password for HTTP basic auth — use a strong random value
PINCHFLAT_AUTH_PASS=changeme
# Secret used to sign/encrypt session cookies — generate with: openssl rand -hex 64
# Changing this will invalidate all active sessions
PINCHFLAT_SECRET_KEY=
# Controls default permissions on created files (022 = owner rw, group/other r)
PINCHFLAT_UMASK=022
# Bind mount only
# Host path for the config directory (SQLite DB, logs, metadata)
PINCHFLAT_CONFIG=/path/to/config
# NFS only
# IP address or hostname of the NFS server
PINCHFLAT_NFS_SERVER=192.168.1.x
# NFS export path on the server (e.g. :/mnt/pool/pinchflat)
PINCHFLAT_NFS_DEVICE=:/path/to/nfs/share
+22
View File
@@ -0,0 +1,22 @@
services:
app:
image: keglin/pinchflat:${PINCHFLAT_VERSION:-latest}
container_name: pinchflat-app
environment:
- TZ=${PINCHFLAT_TZ:-America/Los_Angeles}
- LOG_LEVEL=info
- YT_DLP_WORKER_CONCURRENCY=1
- BASIC_AUTH_USERNAME=${PINCHFLAT_AUTH_USER:-admin}
- BASIC_AUTH_PASSWORD=${PINCHFLAT_AUTH_PASS:-changeme}
- SECRET_KEY_BASE=${PINCHFLAT_SECRET_KEY}
- UMASK=${PINCHFLAT_UMASK:-022}
ports:
- ${PINCHFLAT_PORT:-8945}:8945
volumes:
- ${PINCHFLAT_CONFIG}:/config
- ${PINCHFLAT_DOWNLOAD}:/downloads
healthcheck:
test: ["CMD-SHELL", "curl --fail http://localhost:8945/healthcheck || exit 1"]
interval: 30s
start_period: 15s
restart: unless-stopped
+36
View File
@@ -0,0 +1,36 @@
services:
app:
image: keglin/pinchflat:${PINCHFLAT_VERSION:-latest}
container_name: pinchflat-app
environment:
- TZ=${PINCHFLAT_TZ:-America/Los_Angeles}
- LOG_LEVEL=info
- JOURNAL_MODE=delete
- YT_DLP_WORKER_CONCURRENCY=1
- BASIC_AUTH_USERNAME=${PINCHFLAT_AUTH_USER:-admin}
- BASIC_AUTH_PASSWORD=${PINCHFLAT_AUTH_PASS:-changeme}
- SECRET_KEY_BASE=${PINCHFLAT_SECRET_KEY}
- UMASK=${PINCHFLAT_UMASK:-022}
ports:
- ${PINCHFLAT_PORT:-8945}:8945
volumes:
- pinchflat-app:/config
- ${PINCHFLAT_DOWNLOAD}:/downloads
healthcheck:
test: ["CMD-SHELL", "curl --fail http://localhost:8945/healthcheck || exit 1"]
interval: 30s
start_period: 15s
deploy:
resources:
limits:
memory: 1G
restart: unless-stopped
volumes:
pinchflat-app:
name: pinchflat-app
driver: local
driver_opts:
type: nfs
o: "addr=${PINCHFLAT_NFS_SERVER},rw,noatime,rsize=65536,wsize=65536,timeo=600,nfsvers=4"
device: "${PINCHFLAT_NFS_DEVICE}"
+3
View File
@@ -26,8 +26,11 @@ Feel free to use any of these as a starting point for your own setup. Each appli
| IT-Tools | Collection of handy tools for developers and sysadmins | [Compose](./IT-Tools/docker-compose.yaml) | [Read the article](https://chns.tech/posts/2023/10-22-it-tools-handy-tools-for-developers/) |
| Kanboard | Self-hosted Kanban project management board | [NFS](./Kanboard/docker-compose-nfs.yaml) | [Read the article](https://chns.tech/posts/2024/04-28-kanboard-project-management-software/) |
| LinkStack | Self-hosted link-in-bio page builder | [NFS](./LinkStack/docker-compose-nfs.yaml) | [Read the article](https://chns.tech/posts/2024/02-04-linkstack-social-media-link-page/) |
| MeTube | Self-hosted web UI for yt-dlp — download video and audio from YouTube and hundreds of other sites | [Compose](./Metube/docker-compose.yaml) | [Read the article](https://chns.tech/posts/2024/01-14-metube-youtube-downloader/) |
| n8n | Open-source workflow automation platform with a visual node-based editor | [Volume](./n8n/docker-compose-volume.yaml) | [Read the article](#) |
| Ntfy | Self-hosted push notification service via HTTP | [Bind](./Ntfy/docker-compose-bind.yaml) | [Read the article](https://chns.tech/posts/2026/05-08-ntfy-self-hosted-push-notifications/) |
| OmniTools | Self-hosted collection of web-based utility tools | [Compose](./OmniTools/docker-compose.yaml) | [Read the article](#) |
| Pinchflat | Self-hosted YouTube subscription manager that downloads content automatically like a podcast feed | [NFS](./Pinchflat/docker-compose-nfs.yaml) · [Bind](./Pinchflat/docker-compose-bind.yaml) | [Read the article](https://chns.tech/posts/2024/06-30-pinchflat-channel-monitoring-youtube-downloader/) |
| Seerr | Media request management tool for self-hosted media servers | [Compose](./Seerr/docker-compose.yaml) · [NFS](./Seerr/docker-compose-nfs.yaml) | [Read the article](#) |
| SearXNG | Privacy-respecting, self-hosted metasearch engine | [Bind](./SearXNG/docker-compose-bind.yaml) | [Read the article](https://chns.tech/posts/2024/06-23-searxng-internet-metasearch-engine/) |
| Unifi-Network-Application | UniFi Network controller for managing Ubiquiti network devices | [NFS](./Unifi-Network-Application/docker-compose-nfs.yaml) | [Read the article](#) |
+2
View File
@@ -54,4 +54,6 @@ services:
volumes:
n8n-app:
name: n8n-app
n8n-db:
name: n8n-db