84 lines
3.5 KiB
Markdown
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
|
|
```
|