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>
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 | 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
-
Upload stuck on loader: Check
docker logs palmrforSTORAGE_URLerrors. MinIO must be reachable from the client browser via the presigned URL. -
Blank page externally: Verify Funnel is on a supported port (443/8443/10000) and target uses
127.0.0.1notlocalhost. -
JWT token invalid after restart: Expected — users must log in again after container recreation (JWT secret regenerated).
-
Config limits: File size and storage limits are in
app_configstable (values in bytes). Update via SQLite, copy DB back, restart.