mirror of
https://github.com/srbhr/Resume-Matcher.git
synced 2026-01-19 07:19:56 +00:00
- Introduced HighlightedResumeView to display resumes with matching keywords highlighted. - Added JDComparisonView for side-by-side comparison of job descriptions and resumes. - Implemented JDDisplay for read-only job description display. - Enhanced keyword extraction and matching utilities for better JD-resume analysis. - Updated ResumeBuilder to fetch job descriptions and integrate JD match analysis. - Improved UI for previewing enhancements in the enrichment step. - Added documentation for Docker and Ollama setup.
212 lines
4.5 KiB
Markdown
212 lines
4.5 KiB
Markdown
# Docker Deployment Guide
|
|
|
|
This guide explains how to run Resume Matcher using Docker.
|
|
|
|
## Quick Start
|
|
|
|
### Using Docker Compose (Recommended)
|
|
|
|
```bash
|
|
# Build and start
|
|
docker-compose up -d
|
|
|
|
# View logs
|
|
docker-compose logs -f
|
|
|
|
# Stop
|
|
docker-compose down
|
|
```
|
|
|
|
### Using Docker Directly
|
|
|
|
```bash
|
|
# Build the image
|
|
docker build -t resume-matcher .
|
|
|
|
# Run the container
|
|
docker run -d \
|
|
--name resume-matcher \
|
|
-p 3000:3000 \
|
|
-p 8000:8000 \
|
|
-v resume-data:/app/backend/data \
|
|
resume-matcher
|
|
```
|
|
|
|
## Accessing the Application
|
|
|
|
Once running, access the application at:
|
|
|
|
- **Frontend**: http://localhost:3000
|
|
- **Backend API**: http://localhost:8000
|
|
- **API Documentation**: http://localhost:8000/docs
|
|
|
|
## Initial Setup
|
|
|
|
### Configuring Your LLM Provider
|
|
|
|
Unlike local development, Docker deployments don't use `.env` files. Instead, configure your AI provider through the UI:
|
|
|
|
1. Open http://localhost:3000/settings
|
|
2. In the **LLM Configuration** section:
|
|
- Select your provider (OpenAI, Anthropic, etc.)
|
|
- Enter the model name (or use the default)
|
|
- Enter your API key
|
|
3. Click **Save**
|
|
4. Click **Test Connection** to verify
|
|
|
|
Your configuration is stored in `config.json` inside the persistent volume.
|
|
|
|
### Using Ollama (Local Models)
|
|
|
|
Running Ollama with Docker requires special networking configuration. See the **[Docker + Ollama Guide](docker-ollama.md)** for detailed setup instructions.
|
|
|
|
**Quick summary**: Use `http://host.docker.internal:11434` (Mac/Windows) or `http://172.17.0.1:11434` (Linux) as the Ollama Server URL instead of `localhost`.
|
|
|
|
## Data Persistence
|
|
|
|
All application data is stored in a Docker volume at `/app/backend/data/`:
|
|
|
|
| File | Purpose |
|
|
|------|---------|
|
|
| `database.json` | TinyDB database (resumes, jobs, improvements) |
|
|
| `config.json` | API keys and application settings |
|
|
| `uploads/` | Uploaded resume files |
|
|
|
|
### Backup Data
|
|
|
|
```bash
|
|
# Copy data from container
|
|
docker cp resume-matcher:/app/backend/data ./backup
|
|
|
|
# Or with docker-compose
|
|
docker-compose cp resume-matcher:/app/backend/data ./backup
|
|
```
|
|
|
|
### Restore Data
|
|
|
|
```bash
|
|
# Copy data to container
|
|
docker cp ./backup/. resume-matcher:/app/backend/data/
|
|
|
|
# Restart to pick up changes
|
|
docker-compose restart
|
|
```
|
|
|
|
## Environment Variables
|
|
|
|
While API keys should be set via UI, you can override some settings:
|
|
|
|
| Variable | Default | Description |
|
|
|----------|---------|-------------|
|
|
| `NEXT_PUBLIC_API_URL` | `http://localhost:8000` | Backend URL for frontend |
|
|
| `NODE_ENV` | `production` | Node environment |
|
|
|
|
Example with environment override:
|
|
|
|
```bash
|
|
docker run -d \
|
|
--name resume-matcher \
|
|
-p 3000:3000 \
|
|
-p 8000:8000 \
|
|
-e NEXT_PUBLIC_API_URL=http://your-backend:8000 \
|
|
-v resume-data:/app/backend/data \
|
|
resume-matcher
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Container Won't Start
|
|
|
|
Check logs for errors:
|
|
|
|
```bash
|
|
docker-compose logs resume-matcher
|
|
# or
|
|
docker logs resume-matcher
|
|
```
|
|
|
|
### Playwright/PDF Issues
|
|
|
|
Playwright and Chromium are pre-installed. If you see PDF generation errors:
|
|
|
|
```bash
|
|
# Enter container
|
|
docker exec -it resume-matcher bash
|
|
|
|
# Reinstall Playwright browsers
|
|
cd /app/backend && python -m playwright install chromium
|
|
```
|
|
|
|
### Permission Denied
|
|
|
|
The container runs as non-root user `appuser`. If you have permission issues with mounted volumes:
|
|
|
|
```bash
|
|
# Fix permissions on host
|
|
sudo chown -R 1000:1000 ./data
|
|
```
|
|
|
|
### Health Check Failing
|
|
|
|
Check if both services are running:
|
|
|
|
```bash
|
|
# Backend health
|
|
curl http://localhost:8000/api/v1/health
|
|
|
|
# Frontend (should return HTML)
|
|
curl http://localhost:3000
|
|
```
|
|
|
|
## Building Custom Image
|
|
|
|
Modify the Dockerfile as needed, then rebuild:
|
|
|
|
```bash
|
|
# Rebuild without cache
|
|
docker-compose build --no-cache
|
|
|
|
# Rebuild specific service
|
|
docker-compose build resume-matcher
|
|
```
|
|
|
|
## Resource Requirements
|
|
|
|
Minimum recommended resources:
|
|
|
|
- **CPU**: 2 cores
|
|
- **RAM**: 2 GB
|
|
- **Disk**: 5 GB (mostly for Chromium)
|
|
|
|
## Security Notes
|
|
|
|
1. **API Keys**: Stored in `config.json` inside the container volume. Not accessible without volume access.
|
|
2. **Non-root User**: Container runs as unprivileged user `appuser` (UID 1000).
|
|
3. **Network**: Only ports 3000 and 8000 are exposed.
|
|
4. **No Secrets in Image**: All sensitive configuration is done at runtime via UI.
|
|
|
|
## Updating
|
|
|
|
```bash
|
|
# Pull latest code
|
|
git pull
|
|
|
|
# Rebuild and restart
|
|
docker-compose down
|
|
docker-compose build
|
|
docker-compose up -d
|
|
```
|
|
|
|
## Uninstalling
|
|
|
|
```bash
|
|
# Stop and remove container
|
|
docker-compose down
|
|
|
|
# Remove volume (WARNING: deletes all data)
|
|
docker volume rm resume-matcher_resume-data
|
|
|
|
# Remove image
|
|
docker rmi resume-matcher
|
|
```
|