docs: cut version 0.1.21
This commit is contained in:
@@ -0,0 +1,127 @@
|
||||
---
|
||||
id: database-backups
|
||||
title: Database Backups
|
||||
description: Configure, run, and restore JobOps database backups.
|
||||
sidebar_position: 2
|
||||
---
|
||||
|
||||
## What this covers
|
||||
|
||||
This page is about database backups:
|
||||
|
||||
- automatic backup schedule
|
||||
- manual backup creation/deletion
|
||||
- retention behavior
|
||||
- restore workflow
|
||||
- backup troubleshooting
|
||||
|
||||
## Backup behavior
|
||||
|
||||
JobOps stores backups in the same data directory as `jobs.db`.
|
||||
|
||||
Two backup types exist:
|
||||
|
||||
- **Automatic** backups
|
||||
- **Manual** backups
|
||||
|
||||
### Automatic backups
|
||||
|
||||
- Scheduled daily.
|
||||
- Filename format: `jobs_YYYY_MM_DD.db`
|
||||
- Schedule hour is configured in Settings (**UTC hour**).
|
||||
- Automatic retention is capped by `backupMaxCount`.
|
||||
- If today’s automatic backup already exists, JobOps skips creating a duplicate.
|
||||
|
||||
### Manual backups
|
||||
|
||||
- Triggered from Settings or `POST /api/backups`.
|
||||
- Filename format: `jobs_manual_YYYY_MM_DD_HH_MM_SS.db`
|
||||
- If a filename collision occurs, JobOps appends `_1`, `_2`, etc.
|
||||
- Manual backups are **not** auto-deleted by automatic retention cleanup.
|
||||
|
||||
## Configure backups
|
||||
|
||||
In **Settings → Backup**:
|
||||
|
||||
1. Enable automatic backups.
|
||||
2. Set backup hour (`0-23`, UTC).
|
||||
3. Set max automatic backups to keep (`1-5`).
|
||||
4. Save settings.
|
||||
|
||||
## API reference
|
||||
|
||||
```bash
|
||||
# List backups + next scheduled run time
|
||||
curl "http://localhost:3001/api/backups"
|
||||
```
|
||||
|
||||
```bash
|
||||
# Create a manual backup
|
||||
curl -X POST "http://localhost:3001/api/backups"
|
||||
```
|
||||
|
||||
```bash
|
||||
# Delete a specific backup
|
||||
curl -X DELETE "http://localhost:3001/api/backups/jobs_manual_2026_02_15_10_20_30.db"
|
||||
```
|
||||
|
||||
```bash
|
||||
# Update backup settings via Settings API
|
||||
curl -X PATCH "http://localhost:3001/api/settings" \
|
||||
-H "content-type: application/json" \
|
||||
-d '{
|
||||
"backupEnabled": true,
|
||||
"backupHour": 2,
|
||||
"backupMaxCount": 5
|
||||
}'
|
||||
```
|
||||
|
||||
## Restore workflow
|
||||
|
||||
To restore from a backup:
|
||||
|
||||
1. Stop JobOps.
|
||||
2. Locate backup files in your data directory.
|
||||
3. Copy the chosen backup over the main DB file (`jobs.db`).
|
||||
4. Start JobOps.
|
||||
5. Verify jobs/runs in the UI.
|
||||
|
||||
Example shell flow:
|
||||
|
||||
```bash
|
||||
# Example only: adjust paths for your setup
|
||||
cp /path/to/data/jobs_manual_2026_02_15_10_20_30.db /path/to/data/jobs.db
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Backups are not running automatically
|
||||
|
||||
- Confirm `backupEnabled` is true.
|
||||
- Confirm backup hour is set as intended (UTC, not local time).
|
||||
- Verify the app process is running at scheduled time.
|
||||
|
||||
### `POST /api/backups` fails
|
||||
|
||||
- Confirm the data directory and `jobs.db` are writable/readable.
|
||||
- Confirm `jobs.db` exists.
|
||||
- In demo mode, manual backup creation is blocked.
|
||||
|
||||
### Cannot delete a backup
|
||||
|
||||
- Filename must match valid backup patterns.
|
||||
- Invalid names and missing files return errors.
|
||||
|
||||
### Next scheduled time is null
|
||||
|
||||
- Automatic backups are currently disabled.
|
||||
|
||||
## Notes
|
||||
|
||||
- Backup cleanup applies only to automatic backups.
|
||||
- Manual backups stay until you delete them.
|
||||
|
||||
## Related pages
|
||||
|
||||
- [Settings](../features/settings)
|
||||
- [Self-Hosting](./self-hosting)
|
||||
@@ -0,0 +1,122 @@
|
||||
---
|
||||
id: self-hosting
|
||||
title: Self-Hosting (Docker Compose)
|
||||
description: Deploy JobOps with Docker Compose and configure onboarding integrations.
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
The easiest way to run JobOps is via Docker Compose. The app is self-configuring and guides you through setup on first launch.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Docker Desktop or Docker Engine + Compose v2
|
||||
|
||||
## 1) Start the stack
|
||||
|
||||
No environment variables are required to boot:
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
This pulls the pre-built image from GHCR and starts the API, UI, and scrapers in one container.
|
||||
|
||||
To build locally instead:
|
||||
|
||||
```bash
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
## 2) Access the app and onboard
|
||||
|
||||
Open:
|
||||
|
||||
- **Dashboard**: `http://localhost:3005`
|
||||
|
||||
The onboarding wizard helps you validate and save:
|
||||
|
||||
1. **LLM Provider**: OpenRouter by default (or OpenAI/Gemini/local URL).
|
||||
2. **PDF Export**: RxResume credentials for PDF generation.
|
||||
3. **Template Resume**: Choose a base resume from your RxResume account.
|
||||
|
||||
Settings are saved to the local database.
|
||||
|
||||
## Gmail OAuth (Tracking Inbox)
|
||||
|
||||
If you want Gmail integration, configure OAuth credentials.
|
||||
|
||||
### 1) Create Google OAuth credentials
|
||||
|
||||
In Google Cloud:
|
||||
|
||||
1. Configure OAuth consent screen.
|
||||
2. Enable Gmail API.
|
||||
3. Create OAuth client ID (`Web application`).
|
||||
4. Add redirect URI:
|
||||
- `http://localhost:3005/oauth/gmail/callback`
|
||||
- Or your production URL, for example `https://your-domain.com/oauth/gmail/callback`
|
||||
|
||||
### 2) Configure environment variables
|
||||
|
||||
- `GMAIL_OAUTH_CLIENT_ID` (required)
|
||||
- `GMAIL_OAUTH_CLIENT_SECRET` (required)
|
||||
- `GMAIL_OAUTH_REDIRECT_URI` (optional, recommended in production)
|
||||
|
||||
### 3) Restart and connect
|
||||
|
||||
- Restart container
|
||||
- Open Tracking Inbox and click **Connect Gmail**
|
||||
|
||||
## Email-to-job matching overview
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[Recruitment email arrives in Gmail] --> B[Smart Router AI analyzes content]
|
||||
B --> C{How confident is the match?}
|
||||
|
||||
C -->|95-100%| D[Auto-linked to job]
|
||||
D --> E[Timeline updated automatically]
|
||||
|
||||
C -->|50-94%| F[Goes to Inbox for review with suggested job match]
|
||||
|
||||
C -->|<50%| G{Is it relevant?}
|
||||
G -->|Yes| H[Goes to Inbox as orphan]
|
||||
G -->|No| I[Ignored]
|
||||
|
||||
F --> J{User review}
|
||||
H --> J
|
||||
J -->|Approve| K[Linked to job + timeline update]
|
||||
J -->|Ignore| L[Marked not relevant]
|
||||
```
|
||||
|
||||
## Persistent data
|
||||
|
||||
`./data` bind-mount stores:
|
||||
|
||||
- SQLite DB: `data/jobs.db`
|
||||
- Generated PDFs: `data/pdfs/`
|
||||
|
||||
## Public demo mode
|
||||
|
||||
Set `DEMO_MODE=true` for sandbox deployments.
|
||||
|
||||
Behavior in demo mode:
|
||||
|
||||
- Works locally: browsing/filtering/status/timeline edits
|
||||
- Simulated: pipeline run/summarize/process/rescore/pdf/apply
|
||||
- Blocked: settings writes, DB clear, backups
|
||||
- Auto-reset: every 6 hours
|
||||
|
||||
## Updating
|
||||
|
||||
```bash
|
||||
git pull
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Self-hosted Reactive Resume
|
||||
|
||||
If you self-host Reactive Resume, set:
|
||||
|
||||
- `RXRESUME_URL=http://rxresume.local.net`
|
||||
Reference in New Issue
Block a user