Fix Coolify deployment: use expose instead of ports
This commit is contained in:
194
COOLIFY_QUICK_FIX.md
Normal file
194
COOLIFY_QUICK_FIX.md
Normal 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. 🎉
|
||||
Reference in New Issue
Block a user