6c3e88a588
Test and Lint / backend-test (push) Successful in 1m8s
continuous-integration/drone/push Build is passing
Test and Lint / frontend-test (push) Successful in 2m8s
Version and Release / version-bump (push) Successful in 32s
Version and Release / trigger-drone (push) Successful in 2s
- Add missing created_at column to email_queue table - Fix 502 Bad Gateway errors with proper Traefik routing configuration - Create docker-compose.traefik.yml for external Traefik deployment - Fix health check endpoint path for API path stripping - Add PostgreSQL init script for Umami database creation - Add comprehensive deployment guide for Traefik setup The backend now properly handles /api prefix stripping by Traefik and migrations run safely in production environments with existing schemas. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
92 lines
2.8 KiB
Markdown
92 lines
2.8 KiB
Markdown
# Deployment Guide - Traefik Production Setup
|
|
|
|
## Overview
|
|
|
|
This guide explains how to deploy PicPeak with an external Traefik reverse proxy for production use.
|
|
|
|
## Fixed Issues
|
|
|
|
1. **Database Migration**: Added missing `created_at` column to `email_queue` table
|
|
2. **502 Bad Gateway**: Properly configured Traefik routing and backend accessibility
|
|
3. **Health Checks**: Fixed health check endpoint imports and paths
|
|
|
|
## Deployment Steps
|
|
|
|
### 1. Update Environment Variables
|
|
|
|
Ensure your `.env` file has the correct URLs:
|
|
```bash
|
|
ADMIN_URL=https://picpeak.nothaft.cloud
|
|
FRONTEND_URL=https://picpeak.nothaft.cloud
|
|
```
|
|
|
|
### 2. Build Images
|
|
|
|
```bash
|
|
# Build backend image
|
|
docker build -t picpeak-backend:latest ./backend
|
|
|
|
# Build frontend image
|
|
docker build -t picpeak-frontend:latest ./frontend \
|
|
--build-arg VITE_API_URL=/api \
|
|
--build-arg VITE_UMAMI_URL=${VITE_UMAMI_URL} \
|
|
--build-arg VITE_UMAMI_WEBSITE_ID=${VITE_UMAMI_WEBSITE_ID}
|
|
```
|
|
|
|
### 3. Deploy with Traefik
|
|
|
|
Use the new Traefik-specific compose file:
|
|
```bash
|
|
docker-compose -f docker-compose.traefik.yml up -d
|
|
```
|
|
|
|
### 4. Verify Deployment
|
|
|
|
Check that all services are healthy:
|
|
```bash
|
|
# Check container status
|
|
docker-compose -f docker-compose.traefik.yml ps
|
|
|
|
# Check backend health
|
|
curl https://picpeak.nothaft.cloud/api/health
|
|
|
|
# Check logs
|
|
docker-compose -f docker-compose.traefik.yml logs -f backend
|
|
```
|
|
|
|
## Key Differences from Standard Deployment
|
|
|
|
1. **No Internal Nginx**: Traefik handles all routing externally
|
|
2. **API Path Stripping**: Traefik strips `/api` prefix when forwarding to backend
|
|
3. **Network Configuration**: Services join external `traefik` network
|
|
4. **Health Checks**: Backend exposes `/health` endpoint (not `/api/health`)
|
|
|
|
## Why CI/CD Tests Pass But Production Fails
|
|
|
|
CI/CD tests typically:
|
|
- Use in-memory or temporary databases with fresh migrations
|
|
- Don't test through reverse proxy (direct API calls)
|
|
- Don't run background services (email processor, etc.)
|
|
- Have different network configurations
|
|
|
|
Production environment has:
|
|
- Persistent database that may have migration state issues
|
|
- Reverse proxy routing complexity
|
|
- All background services running
|
|
- Different security and network constraints
|
|
|
|
## Troubleshooting
|
|
|
|
### 502 Bad Gateway
|
|
- Check Traefik network connectivity: `docker network ls`
|
|
- Verify backend is in traefik network: `docker inspect picpeak-backend`
|
|
- Check Traefik logs: `docker logs traefik`
|
|
|
|
### Database Issues
|
|
- Connect to database: `docker exec -it picpeak-db psql -U picpeak`
|
|
- Check migration status: `SELECT * FROM migrations;`
|
|
- Run migrations manually: `docker exec -it picpeak-backend npm run migrate:safe`
|
|
|
|
### Email Service Errors
|
|
- Check email queue: `SELECT * FROM email_queue ORDER BY created_at DESC LIMIT 10;`
|
|
- Monitor email processor: `docker logs picpeak-backend | grep "email"` |