7c2489ea5c
Co-authored-by: Cursor <cursoragent@cursor.com>
61 lines
1.6 KiB
Markdown
61 lines
1.6 KiB
Markdown
# MincedPad
|
|
|
|
Self-hosted anonymous paste / file share: public wall, TTL, burn-after-read, and a password-gated admin panel. One Docker container serves the Vue SPA and FastAPI API on port **8080**.
|
|
|
|
## Deploy (Docker Compose)
|
|
|
|
```bash
|
|
docker compose up -d --build
|
|
```
|
|
|
|
Open http://127.0.0.1:8080/
|
|
Admin: http://127.0.0.1:8080/admin
|
|
|
|
Data (SQLite + uploads) persists in `./data` on the host (`DATA_DIR=/data` in the container).
|
|
|
|
## Environment
|
|
|
|
| Variable | Default | Meaning |
|
|
| --- | --- | --- |
|
|
| `ADMIN_PASSWORD` | `changeme` | Admin login password |
|
|
| `SECRET_KEY` | (dev default) | JWT signing secret — change in production |
|
|
| `MAX_UPLOAD_MB` | `200` | Max upload size in megabytes |
|
|
| `RATE_LIMIT_PER_SECOND` | `2` | Create/upload rate limit per IP |
|
|
| `DATA_DIR` | `/data` | SQLite + uploads directory |
|
|
|
|
Set these under `environment:` in `docker-compose.yml` (or via your orchestrator).
|
|
|
|
## Mobile
|
|
|
|
The UI is mobile-first (Element Plus responsive grid, full-width controls under 768px). Use a real phone or browser device mode for smoke checks after deploy.
|
|
|
|
## Local development
|
|
|
|
**API**
|
|
|
|
```bash
|
|
cd backend
|
|
python -m venv ../.venv && source ../.venv/bin/activate
|
|
pip install -r requirements.txt
|
|
DATA_DIR=../data PYTHONPATH=. uvicorn app.main:app --host 0.0.0.0 --port 8080 --reload
|
|
```
|
|
|
|
**Frontend** (proxies `/api` to `:8080`)
|
|
|
|
```bash
|
|
cd frontend
|
|
npm install
|
|
npm run dev
|
|
```
|
|
|
|
Production-style (API serves `frontend/dist`):
|
|
|
|
```bash
|
|
cd frontend && npm run build
|
|
cd ../backend && DATA_DIR=../data PYTHONPATH=. uvicorn app.main:app --port 8080
|
|
```
|
|
|
|
## License
|
|
|
|
Use as you like for self-hosting.
|