mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-18 20:09:25 +00:00
feat: enhance deployment configuration with port fixes, debug script, and updated documentation
This commit is contained in:
parent
23d0ef5994
commit
40c63156a5
5 changed files with 139 additions and 5 deletions
95
DEPLOYMENT_TROUBLESHOOTING.md
Normal file
95
DEPLOYMENT_TROUBLESHOOTING.md
Normal file
|
|
@ -0,0 +1,95 @@
|
||||||
|
# LearnHouse Deployment Troubleshooting Guide
|
||||||
|
|
||||||
|
## Current Status: Port Configuration Fixed ✅
|
||||||
|
|
||||||
|
### Recent Changes Made:
|
||||||
|
|
||||||
|
1. **Fixed Port Mismatch Issue** - The root cause of "no available server":
|
||||||
|
- Changed Docker Compose from port 3000 → 80
|
||||||
|
- Updated healthcheck from port 3000 → 80
|
||||||
|
- Added explicit Traefik port label: `traefik.http.services.*.loadbalancer.server.port=80`
|
||||||
|
|
||||||
|
2. **Enhanced Start Script** (`extra/start.sh`):
|
||||||
|
- Added explicit port assignments: PORT=8000, LEARNHOUSE_PORT=9000
|
||||||
|
- Fixed backend startup: Uses `uvicorn app:app --host 0.0.0.0 --port 9000`
|
||||||
|
- Fixed frontend startup: Uses Next.js standalone server on port 8000
|
||||||
|
|
||||||
|
3. **Added Debug Capabilities**:
|
||||||
|
- Created `debug-services.sh` script for troubleshooting
|
||||||
|
- Script checks PM2 processes, port usage, service connectivity
|
||||||
|
|
||||||
|
### Current Architecture:
|
||||||
|
|
||||||
|
```
|
||||||
|
Internet → Coolify/Traefik → Container:80 → Nginx → {
|
||||||
|
├── Frontend (Next.js standalone): localhost:8000
|
||||||
|
└── Backend API (FastAPI): localhost:9000
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Network Isolation Configuration:
|
||||||
|
|
||||||
|
- **DEV deployment**: `DEPLOYMENT_NAME=dev` → `dev-network`
|
||||||
|
- **LIVE deployment**: `DEPLOYMENT_NAME=live` → `live-network`
|
||||||
|
- Each deployment has isolated databases, Redis instances, and networks
|
||||||
|
|
||||||
|
### Environment Variables Required:
|
||||||
|
|
||||||
|
See `COOLIFY_ENV_VARS.md` for complete list. Key variables for isolation:
|
||||||
|
|
||||||
|
- `DEPLOYMENT_NAME=live` (or `dev`)
|
||||||
|
- `LEARNHOUSE_COOKIE_DOMAIN=edu.adradviser.ro`
|
||||||
|
- `LEARNHOUSE_SQL_CONNECTION_STRING` (separate for each deployment)
|
||||||
|
- `LEARNHOUSE_REDIS_CONNECTION_STRING` (separate for each deployment)
|
||||||
|
|
||||||
|
### Current Error Status:
|
||||||
|
|
||||||
|
- ✅ **Port mismatch fixed**: Changed from 3000 to 80
|
||||||
|
- ✅ **Container accessibility**: Traefik can now route to port 80
|
||||||
|
- ⚠️ **404 errors remain**: Frontend/backend internal communication issue
|
||||||
|
|
||||||
|
### Next Debugging Steps:
|
||||||
|
|
||||||
|
1. **Deploy the updated configuration**
|
||||||
|
2. **Check container logs** for any startup errors
|
||||||
|
3. **Run debug script** inside container:
|
||||||
|
```bash
|
||||||
|
docker exec -it <container_name> /app/debug-services.sh
|
||||||
|
```
|
||||||
|
4. **Test internal services**:
|
||||||
|
```bash
|
||||||
|
# Test frontend
|
||||||
|
curl http://localhost:8000
|
||||||
|
# Test backend
|
||||||
|
curl http://localhost:9000
|
||||||
|
# Test nginx
|
||||||
|
curl http://localhost:80
|
||||||
|
```
|
||||||
|
|
||||||
|
### Troubleshooting Commands:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check PM2 processes
|
||||||
|
docker exec -it <container> pm2 list
|
||||||
|
|
||||||
|
# Check ports in use
|
||||||
|
docker exec -it <container> netstat -tlnp
|
||||||
|
|
||||||
|
# Check nginx config
|
||||||
|
docker exec -it <container> nginx -t
|
||||||
|
|
||||||
|
# View PM2 logs
|
||||||
|
docker exec -it <container> pm2 logs
|
||||||
|
|
||||||
|
# Run full debug
|
||||||
|
docker exec -it <container> /app/debug-services.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Expected Resolution:
|
||||||
|
|
||||||
|
The 404 errors should resolve once:
|
||||||
|
1. Frontend service starts correctly on port 8000
|
||||||
|
2. Backend service starts correctly on port 9000
|
||||||
|
3. Nginx properly proxies requests between them
|
||||||
|
|
||||||
|
The port configuration fix was the critical missing piece for Traefik routing.
|
||||||
|
|
@ -59,6 +59,8 @@ WORKDIR /app
|
||||||
COPY ./extra/nginx.conf /etc/nginx/conf.d/default.conf
|
COPY ./extra/nginx.conf /etc/nginx/conf.d/default.conf
|
||||||
ENV PORT=80 LEARNHOUSE_PORT=9000 HOSTNAME=0.0.0.0
|
ENV PORT=80 LEARNHOUSE_PORT=9000 HOSTNAME=0.0.0.0
|
||||||
COPY ./extra/start.sh /app/start.sh
|
COPY ./extra/start.sh /app/start.sh
|
||||||
|
COPY ./debug-services.sh /app/debug-services.sh
|
||||||
|
RUN chmod +x /app/start.sh /app/debug-services.sh
|
||||||
|
|
||||||
# Add near the end of your Dockerfile_coolify
|
# Add near the end of your Dockerfile_coolify
|
||||||
RUN echo '#!/bin/bash\n\
|
RUN echo '#!/bin/bash\n\
|
||||||
|
|
|
||||||
|
|
@ -99,10 +99,18 @@ LEARNHOUSE_COOKIE_DOMAIN=your-staging-domain.example.com
|
||||||
|
|
||||||
This automatically creates `staging-network` and Coolify handles volume isolation.
|
This automatically creates `staging-network` and Coolify handles volume isolation.
|
||||||
|
|
||||||
|
## Current Status
|
||||||
|
|
||||||
|
✅ **Port Configuration Fixed**: Changed from port 3000 to 80 to match nginx configuration
|
||||||
|
✅ **Network Isolation Implemented**: Using `DEPLOYMENT_NAME` for unique networks
|
||||||
|
✅ **Environment Variables Configured**: Complete isolation between deployments
|
||||||
|
⚠️ **In Progress**: Resolving 404 API routing issues
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
If you experience cookie mixing:
|
If you encounter issues after deployment, use the debug script:
|
||||||
1. **Verify DEPLOYMENT_NAME** is set differently for each deployment
|
```bash
|
||||||
2. **Check cookie domains** match exactly in browser DevTools
|
docker exec -it <container_name> /app/debug-services.sh
|
||||||
3. **Clear browser data** for both domains
|
```
|
||||||
4. **Confirm network isolation** using the verification commands above
|
|
||||||
|
See `DEPLOYMENT_TROUBLESHOOTING.md` for detailed troubleshooting steps.
|
||||||
|
|
|
||||||
24
debug-services.sh
Normal file
24
debug-services.sh
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
#!/bin/bash
|
||||||
|
echo "=== LearnHouse Service Debug Script ==="
|
||||||
|
echo
|
||||||
|
echo "1. Checking PM2 processes:"
|
||||||
|
pm2 list
|
||||||
|
echo
|
||||||
|
echo "2. Checking which ports are in use:"
|
||||||
|
netstat -tlnp 2>/dev/null || ss -tlnp
|
||||||
|
echo
|
||||||
|
echo "3. Testing internal service connections:"
|
||||||
|
echo " - Testing frontend (port 8000):"
|
||||||
|
curl -s -o /dev/null -w "Status: %{http_code}\n" http://localhost:8000/ || echo "Frontend not responding"
|
||||||
|
echo " - Testing backend (port 9000):"
|
||||||
|
curl -s -o /dev/null -w "Status: %{http_code}\n" http://localhost:9000/ || echo "Backend not responding"
|
||||||
|
echo " - Testing nginx (port 80):"
|
||||||
|
curl -s -o /dev/null -w "Status: %{http_code}\n" http://localhost:80/ || echo "Nginx not responding"
|
||||||
|
echo
|
||||||
|
echo "4. Checking nginx configuration:"
|
||||||
|
nginx -t
|
||||||
|
echo
|
||||||
|
echo "5. Recent PM2 logs (last 10 lines):"
|
||||||
|
pm2 logs --lines 10
|
||||||
|
echo
|
||||||
|
echo "=== Debug Complete ==="
|
||||||
|
|
@ -33,6 +33,11 @@ services:
|
||||||
- LEARNHOUSE_SITE_NAME=${LEARNHOUSE_SITE_NAME}
|
- LEARNHOUSE_SITE_NAME=${LEARNHOUSE_SITE_NAME}
|
||||||
- LEARNHOUSE_SSL=${LEARNHOUSE_SSL}
|
- LEARNHOUSE_SSL=${LEARNHOUSE_SSL}
|
||||||
- LEARNHOUSE_SYSTEM_EMAIL_ADDRESS=${LEARNHOUSE_SYSTEM_EMAIL_ADDRESS}
|
- LEARNHOUSE_SYSTEM_EMAIL_ADDRESS=${LEARNHOUSE_SYSTEM_EMAIL_ADDRESS}
|
||||||
|
# Backend port configuration
|
||||||
|
- LEARNHOUSE_PORT=9000
|
||||||
|
# Frontend port configuration
|
||||||
|
- PORT=8000
|
||||||
|
- HOSTNAME=0.0.0.0
|
||||||
depends_on:
|
depends_on:
|
||||||
db:
|
db:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue