Files
Sun-ZhenXing 902627bbc2 feat: add paca
2026-06-23 11:26:44 +08:00

84 lines
3.5 KiB
Markdown

# Paca
Self-hosted project management platform designed for human + AI collaboration as Scrum team members.
## Services
- `paca-postgres`: PostgreSQL 16 database for persistent storage.
- `paca-valkey`: Valkey 8 cache and pub-sub event bus.
- `paca-minio`: MinIO S3-compatible object store for file uploads.
- `paca-api`: Go REST API backend (port 8080 internal).
- `paca-web`: React SPA frontend served via internal nginx (port 3000 internal).
- `paca-realtime`: Node.js Socket.IO real-time event hub (port 3001 internal).
- `paca-gateway`: Nginx reverse proxy that routes all traffic to the correct service.
## Quick Start
1. Create a `.env` file from the example and set your secrets:
```bash
cp .env.example .env
# Edit .env to set PACA_JWT_SECRET, PACA_ENCRYPTION_KEY, PACA_ADMIN_PASSWORD, etc.
```
1. Start the stack:
```bash
docker compose up -d
```
1. Open `http://localhost` in your browser and log in with the configured admin credentials.
## Key Environment Variables
| Variable | Description | Default |
| -------------------------------- | --------------------------------- | ------------------ |
| `PACA_PORT_OVERRIDE` | Host port for the gateway | `80` |
| `PACA_VERSION` | Application image tag | `latest` |
| `PACA_POSTGRES_PASSWORD` | PostgreSQL password | `changeme` |
| `PACA_ADMIN_USERNAME` | Initial admin username | `admin` |
| `PACA_ADMIN_PASSWORD` | Initial admin password | `changeme` |
| `PACA_JWT_SECRET` | JWT signing secret (min 32 chars) | (placeholder) |
| `PACA_ENCRYPTION_KEY` | AES-256 key for plugin secrets | (empty) |
| `PACA_PUBLIC_URL` | Public base URL | `http://localhost` |
| `PACA_STORAGE_PROVIDER` | Object storage provider | `minio` |
| `PACA_STORAGE_ACCESS_KEY_ID` | Storage access key | `minioadmin` |
| `PACA_STORAGE_SECRET_ACCESS_KEY` | Storage secret key | `minioadmin` |
## Storage
| Volume | Purpose |
| ----------------------- | ----------------------------- |
| `paca_postgres_data` | PostgreSQL database files |
| `paca_valkey_data` | Valkey append-only file |
| `paca_minio_data` | MinIO object store data |
| `paca_backend_plugins` | WASM backend plugin binaries |
| `paca_frontend_plugins` | Frontend plugin static assets |
| `paca_mcp_plugins` | MCP plugin bundles |
## Using External Services
- **External PostgreSQL**: Set `PACA_DATABASE_URL` and run with `--scale paca-postgres=0`.
- **AWS S3 instead of MinIO**: Set `PACA_STORAGE_PROVIDER=s3` and run with `--scale paca-minio=0`.
- **External Valkey/Redis**: Set `PACA_REDIS_URL` and run with `--scale paca-valkey=0`.
## Security Notes
- Generate strong secrets with `openssl rand -hex 32`.
- Change all default passwords before using in production.
- Set `PACA_COOKIE_SECURE=true` when serving over HTTPS.
- The gateway binds to port 80 by default; use a reverse proxy with TLS for production.
- This stack runs multiple services as root (nginx, postgres); consider hardening for production.
## Scaling
You can selectively disable optional services:
```bash
# Without MinIO (use S3 instead)
docker compose up -d --scale paca-minio=0
# Without the web frontend (serve SPA from CDN)
docker compose up -d --scale paca-web=0
```