Fix Coolify deployment: use expose instead of ports

This commit is contained in:
2026-01-02 11:40:35 -06:00
parent 813fafe077
commit 105c5e2198
6 changed files with 703 additions and 4 deletions

194
COOLIFY_QUICK_FIX.md Normal file
View File

@ -0,0 +1,194 @@
# ✅ Coolify Deployment - FIXED!
## What Was Wrong
**Error:** `Bind for 0.0.0.0:8000 failed: port is already allocated`
**Cause:** Your `docker-compose.yml` used `ports:` which tries to bind to the host's ports. Coolify uses Traefik reverse proxy, so it doesn't need (and conflicts with) port bindings.
## What I Fixed
### Changed in docker-compose.yml:
**Before:**
```yaml
backend:
ports:
- "8000:8000" # ❌ Binds to host, causes conflict
frontend:
ports:
- "5173:5173" # ❌ Binds to host, causes conflict
```
**After:**
```yaml
backend:
expose:
- "8000" # ✅ Internal only, Coolify handles routing
frontend:
expose:
- "5173" # ✅ Internal only, Coolify handles routing
```
## Files Created for Production Deployment
1. **frontend/Dockerfile.prod** - Production-optimized multi-stage build with Nginx
2. **frontend/nginx.conf** - Nginx config with API proxy and WebSocket support
3. **docker-compose.coolify.yml** - Full production-ready config
4. **COOLIFY_DEPLOYMENT.md** - Complete deployment guide
## Next Steps
### Option 1: Quick Deploy (Use Modified docker-compose.yml)
The main `docker-compose.yml` is now fixed. Just:
1. **Commit and push:**
```bash
git add docker-compose.yml
git commit -m "Fix Coolify port binding"
git push
```
2. **In Coolify UI:**
- Trigger a new deployment
- It should work now!
3. **Configure environment variables in Coolify:**
```bash
JWT_SECRET=your-secure-secret-key-min-32-chars
VITE_API_URL=https://your-domain.com/api
VITE_WS_URL=wss://your-domain.com
```
### Option 2: Full Production Setup (Recommended for Production)
Use the production-ready configuration:
1. **Update your repository:**
```bash
git add .
git commit -m "Add production Dockerfile and Coolify config"
git push
```
2. **In Coolify UI:**
- Set "Docker Compose File" to: `docker-compose.coolify.yml`
- Or keep using `docker-compose.yml` (now fixed)
3. **Configure routing in Coolify:**
- Backend service: Port 8000
- Frontend service: Port 80 (if using Dockerfile.prod) or 5173 (if using dev)
## Testing After Deployment
Once deployed successfully:
```bash
# Test backend API
curl https://your-domain.com/docs
# Test frontend
https://your-domain.com
```
## What Each File Does
| File | Purpose | When to Use |
|------|---------|-------------|
| **docker-compose.yml** | Development + Coolify compatible | Default, now fixed |
| **docker-compose.coolify.yml** | Production optimized for Coolify | Production deployments |
| **frontend/Dockerfile.prod** | Multi-stage production build | Production (better performance) |
| **frontend/nginx.conf** | Nginx reverse proxy config | With Dockerfile.prod |
## Configuration in Coolify UI
### Environment Variables to Set:
```bash
# Required
JWT_SECRET=<generate-secure-random-32-char-string>
# Optional - Coolify can auto-configure these
VITE_API_URL=https://your-app.your-domain.com/api
VITE_WS_URL=wss://your-app.your-domain.com
```
### Port Configuration:
**Backend:**
- Internal Port: `8000`
- Public: Yes (if you want direct API access) or route via frontend proxy
**Frontend:**
- Internal Port: `5173` (dev) or `80` (prod)
- Public: Yes
- Root path: `/`
## Troubleshooting
### Still Getting Port Error?
1. Check if there's an old deployment in Coolify
2. In Coolify UI, stop/delete old deployment
3. Retry
### Build Fails?
Check logs for:
- Missing `email-validator==2.1.1` in requirements.txt ✅ (already fixed)
- Frontend build errors - check `package.json` has `build` script
### Can't Access API from Frontend?
Update frontend environment variables:
```bash
VITE_API_URL=/api # Relative URL if on same domain
```
Or use nginx proxy (already configured in nginx.conf).
## Deployment Checklist
- ✅ Port bindings removed (expose instead)
- ✅ email-validator added to requirements.txt
- ✅ Production Dockerfile created for frontend
- ✅ Nginx config created with API proxy
- ✅ Environment variables documented
- ⏳ Commit and push changes
- ⏳ Configure Coolify environment variables
- ⏳ Deploy in Coolify
- ⏳ Test the deployment
## Quick Commands
```bash
# Commit all fixes
git add .
git commit -m "Fix Coolify deployment: remove port bindings, add production config"
git push
# Test locally (optional)
docker compose up -d
docker compose ps
docker compose logs -f
# Stop local
docker compose down
```
## Summary
✅ **Main issue FIXED:** Changed `ports:` to `expose:` in docker-compose.yml
**Production ready:** Created Dockerfile.prod and nginx.conf for optimal deployment
**Coolify compatible:** No more port binding conflicts
🚀 **Next:** Commit, push, and redeploy in Coolify!
---
**The deployment should work now!** The port allocation error will be resolved. 🎉