# ๐Ÿš€ Estate Platform Deployment Guide ## Overview This Next.js application is optimized for both local development and Coolify deployment with Traefik reverse proxy. ## ๐Ÿ“ฆ Docker Image Stats - **Base Image**: `node:20-bookworm-slim` - **Build Type**: Multi-stage (deps โ†’ builder โ†’ runner) - **Final Size**: ~245MB (optimized from 1.98GB) - **Output Mode**: Next.js standalone ## ๐Ÿ—๏ธ Quick Start ### Local Development 1. **Copy environment file**: ```bash cp .env.example .env # Ensure APP_PORT=3000 for local access ``` 2. **Start services**: ```bash bash dc.sh ``` 3. **Access application**: - Web: http://localhost:3000 - Adminer: http://localhost:8080 - Logs: `docker compose logs -f web` ### Coolify Deployment 1. **Push to Git repository** 2. **In Coolify dashboard**: - Create new resource โ†’ Docker Compose - Point to your `docker-compose.yml` - Set environment variables in Coolify UI 3. **Required Environment Variables**: ```bash # Leave APP_PORT empty for Coolify (Traefik handles routing) APP_PORT= # Database POSTGRES_USER=postgres POSTGRES_PASSWORD= POSTGRES_DB=estate_platform # Redis REDIS_PASSWORD= # Auth BETTER_AUTH_SECRET=<32-char-secret> BETTER_AUTH_URL=https://your-domain.com # OAuth (optional) GOOGLE_CLIENT_ID=... GOOGLE_CLIENT_SECRET=... # ... other OAuth providers ``` 4. **Deploy**: Coolify will read the Traefik labels and configure routing automatically ## ๐Ÿ”ง Configuration ### Port Exposure The `APP_PORT` environment variable controls port exposure: ```yaml # docker-compose.yml ports: - "${APP_PORT:-3000}:3000" ``` - **Local**: `APP_PORT=3000` (exposes port for localhost:3000) - **Coolify**: `APP_PORT=` (empty - Traefik handles all routing) ### Traefik Labels These labels are read by Coolify/Traefik: ```yaml labels: - coolify.managed=true - traefik.enable=true - traefik.http.services.web.loadbalancer.server.port=3000 ``` ## ๐Ÿ“ Static Assets Static files are served from `/public/`: - **Images**: `/images/` โ†’ access as `/images/logo.png` - **Fonts**: `/fonts/` โ†’ reference as `/fonts/custom.woff2` - **SEO**: `/robots.txt`, `/sitemap.xml` (update domain!) - **PWA**: `/manifest.json` (update theme/icons) - **Favicon**: `/favicon.ico` (replace placeholder) See [public/README.md](public/README.md) for usage examples. ## ๐Ÿ—„๏ธ Database ### Initial Credentials Created by seed script: - **Admin**: admin@ywyw.com / Dev1234# - **Customer**: cust@ywyw.com / Dev1234# ### Migrations ```bash # Apply migrations docker compose exec web npx prisma migrate deploy # Generate Prisma Client docker compose exec web npx prisma generate # Reset database (CAUTION: Development only!) docker compose exec web npx prisma migrate reset ``` ## ๐Ÿงน Maintenance ### Clean Docker Resources ```bash # Full cleanup (stops containers, removes volumes) bash docker-cleanup.sh # Rebuild from scratch bash dc.sh ``` ### View Logs ```bash # All services docker compose logs -f # Specific service docker compose logs -f web docker compose logs -f postgres docker compose logs -f redis ``` ### Update Dependencies ```bash # Update npm packages npm update # Rebuild container bash dc.sh ``` ## ๐Ÿ” Troubleshooting ### Port Already in Use ```bash # Find process using port 3000 lsof -ti:3000 # Kill process kill -9 $(lsof -ti:3000) ``` ### Build Failures ```bash # Clear Docker build cache docker builder prune -af # Remove all containers and volumes bash docker-cleanup.sh # Rebuild bash dc.sh ``` ### Database Connection Issues ```bash # Check postgres health docker compose ps postgres # View postgres logs docker compose logs postgres # Connect to postgres directly docker compose exec postgres psql -U postgres -d estate_platform ``` ### Static Files Not Serving 1. Verify files exist in `public/` directory 2. Rebuild container: `bash dc.sh` 3. Check file is copied: `docker compose exec web ls -la /app/public` 4. Test access: `curl http://localhost:3000/robots.txt` ## ๐Ÿ“Š Performance Tips 1. **Image Optimization**: Docker image is optimized to ~245MB using: - Multi-stage builds - Alpine base image - Next.js standalone output - Selective file copying 2. **Database Connection Pooling**: - Connection limit: 20 - Pool timeout: 20s 3. **Redis Caching**: Enabled for session management ## ๐Ÿ” Security Checklist - [ ] Change default database credentials - [ ] Generate secure BETTER_AUTH_SECRET (32+ characters) - [ ] Update Redis password - [ ] Set NODE_ENV=production for deployment - [ ] Configure OAuth redirect URIs correctly - [ ] Enable HTTPS in production (Traefik handles this in Coolify) - [ ] Review `robots.txt` rules - [ ] Change default admin password after first login ## ๐Ÿ“š Documentation - [Quick Reference](QUICK_REFERENCE.md) - [Public Assets](public/README.md) - [Environment Variables](.env.example) - [Docker Compose](docker-compose.yml) - [Dockerfile](Dockerfile) ## ๐Ÿ†˜ Support For issues: 1. Check logs: `docker compose logs -f` 2. Verify environment variables: `docker compose config` 3. Check container health: `docker compose ps` 4. Review [docs/](docs/) folder for detailed setup guides