Files
nuc/docs/palmr.md
Alejandro Gutiérrez f56528ddcd Slim CLAUDE.md from 65K to 21K by splitting app-specific docs
Move OpenClaw, Palmr, MinIO, JSX publishing, MCP configs, and migration
candidates into dedicated docs/ files. Keep only DevOps-essential content
inline (deployment rules, DNS, router, credentials, troubleshooting).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 02:56:08 +00:00

3.4 KiB

Palmr (File Sharing - Dropbox Alternative)

Self-hosted file sharing platform (like WeTransfer/Dropbox) for sending and receiving files.

Access

Property Value
Public URL https://alezmad-nuc.tail58f5ad.ts.net:8443
Local URL http://192.168.1.3:3334
Login page /login
Container palmr
Image kyantech/palmr:latest
Network coolify (IP: 10.0.1.5)

Users

Username Email Password Admin
alezmad agutierrez@mineryreport.com (set via UI) Yes
michi michi@nuc.lan FlexiCar2025. No

Architecture

External Browser → Funnel :8443 → 127.0.0.1:3334 → container:5487 (Next.js frontend)
                   Funnel :10000 → 127.0.0.1:9379 → container:9379 (MinIO uploads)
                                                      ↑ via port-fwd-palmr-minio

Palmr uses presigned URLs for file uploads — the browser uploads directly to MinIO, NOT through the backend. This means MinIO MUST be reachable from the client's browser.

Key Environment Variables

Variable Value Purpose
STORAGE_URL https://alezmad-nuc.tail58f5ad.ts.net:10000 Public MinIO URL for presigned upload URLs
API_BASE_URL http://127.0.0.1:3333 Internal backend API (Next.js → Fastify)

Volume Mounts

Volume Mount Point Contents
5273abd0c... (anonymous) /app/server SQLite DB, MinIO data, credentials
palmr_uploads /app/uploads Uploaded files

Container Recreation

ssh nuc "docker stop palmr && docker rm palmr && docker run -d \
  --name palmr \
  --network coolify \
  --restart unless-stopped \
  -p 3334:5487 \
  -v 5273abd0c536116056362397cdb568d2eab066b8289412dd91ecce58c174df68:/app/server \
  -v palmr_uploads:/app/uploads \
  -e STORAGE_URL=https://alezmad-nuc.tail58f5ad.ts.net:10000 \
  kyantech/palmr:latest"

Port Forwarder (MinIO)

MinIO runs inside the Palmr container on port 9379 (not exposed). A socat forwarder bridges it:

ssh nuc "docker run -d --name port-fwd-palmr-minio --network coolify -p 9379:9379 \
  alpine/socat tcp-listen:9379,fork,reuseaddr tcp-connect:palmr:9379"

Database Access

Palmr uses SQLite at /app/server/prisma/palmr.db. Passwords are bcrypt hashed.

# Copy DB locally for queries
ssh nuc "docker cp palmr:/app/server/prisma/palmr.db /tmp/palmr.db"
scp nuc:/tmp/palmr.db /tmp/palmr.db
sqlite3 /tmp/palmr.db "SELECT username, email, isAdmin FROM users;"

# Generate bcrypt hash inside container
ssh nuc "docker exec palmr sh -c 'cd /app/palmr-app && node -e \"const bcrypt = require(\\\"bcryptjs\\\"); console.log(bcrypt.hashSync(\\\"PASSWORD\\\", 10));\"'"

Troubleshooting

  1. Upload stuck on loader: Check docker logs palmr for STORAGE_URL errors. MinIO must be reachable from the client browser via the presigned URL.

  2. Blank page externally: Verify Funnel is on a supported port (443/8443/10000) and target uses 127.0.0.1 not localhost.

  3. JWT token invalid after restart: Expected — users must log in again after container recreation (JWT secret regenerated).

  4. Config limits: File size and storage limits are in app_configs table (values in bytes). Update via SQLite, copy DB back, restart.