302 lines
7.6 KiB
Markdown
302 lines
7.6 KiB
Markdown
# ✅ Setup Complete - PostgreSQL Migration
|
|
|
|
## 🎉 What Was Done
|
|
|
|
Your QR Master application has been successfully migrated from Supabase to a local PostgreSQL database with Docker!
|
|
|
|
### ✅ Completed Tasks
|
|
|
|
1. **Removed Supabase Dependencies**
|
|
- ❌ Removed `DIRECT_URL` from Prisma schema
|
|
- ❌ Removed `DIRECT_URL` from environment validation
|
|
- ❌ Cleaned up all Supabase-specific configurations
|
|
|
|
2. **Created Docker Infrastructure**
|
|
- ✅ Production Docker Compose (`docker-compose.yml`)
|
|
- ✅ Development Docker Compose (`docker-compose.dev.yml`)
|
|
- ✅ Optimized Dockerfile for Next.js
|
|
- ✅ PostgreSQL 16 Alpine with persistence
|
|
- ✅ Redis 7 Alpine with AOF persistence
|
|
- ✅ Adminer database UI (optional)
|
|
- ✅ Custom bridge network for services
|
|
|
|
3. **Database Setup**
|
|
- ✅ PostgreSQL initialization script
|
|
- ✅ UUID and pg_trgm extensions
|
|
- ✅ Health checks for all services
|
|
- ✅ Volume persistence
|
|
|
|
4. **Documentation**
|
|
- ✅ Updated README.md
|
|
- ✅ Created DOCKER_SETUP.md (comprehensive guide)
|
|
- ✅ Created MIGRATION_FROM_SUPABASE.md
|
|
- ✅ Created docker/README.md
|
|
- ✅ Created CHANGELOG.md
|
|
- ✅ Created env.example template
|
|
|
|
5. **Developer Tools**
|
|
- ✅ Setup script for Linux/Mac (`scripts/setup.sh`)
|
|
- ✅ Setup script for Windows (`scripts/setup.ps1`)
|
|
- ✅ npm Docker scripts
|
|
- ✅ .dockerignore for optimization
|
|
|
|
6. **Environment Configuration**
|
|
- ✅ Created env.example template
|
|
- ✅ Updated environment validation
|
|
- ✅ Simplified configuration
|
|
|
|
## 🚀 How to Get Started
|
|
|
|
### Option 1: Quick Setup (Recommended)
|
|
|
|
#### Windows:
|
|
```powershell
|
|
cd scripts
|
|
.\setup.ps1
|
|
```
|
|
|
|
#### Linux/Mac:
|
|
```bash
|
|
chmod +x scripts/setup.sh
|
|
./scripts/setup.sh
|
|
```
|
|
|
|
### Option 2: Manual Setup
|
|
|
|
#### Development Mode (Database in Docker, App on Host)
|
|
```bash
|
|
# 1. Copy environment file
|
|
cp env.example .env
|
|
|
|
# 2. Edit .env and set NEXTAUTH_SECRET and IP_SALT
|
|
# Generate with: openssl rand -base64 32
|
|
|
|
# 3. Install dependencies
|
|
npm install
|
|
|
|
# 4. Start database services
|
|
npm run docker:dev
|
|
|
|
# 5. Run migrations
|
|
npm run db:migrate
|
|
|
|
# 6. Seed database
|
|
npm run db:seed
|
|
|
|
# 7. Start development server
|
|
npm run dev
|
|
```
|
|
|
|
#### Production Mode (Full Stack in Docker)
|
|
```bash
|
|
# 1. Copy and configure environment
|
|
cp env.example .env
|
|
# Edit .env with your settings
|
|
|
|
# 2. Build and start
|
|
npm run docker:prod
|
|
|
|
# 3. Run migrations
|
|
docker-compose exec web npx prisma migrate deploy
|
|
|
|
# 4. Access at http://localhost:3050
|
|
```
|
|
|
|
## 📍 Access Points
|
|
|
|
After setup, you can access:
|
|
|
|
- **🌐 Application**: http://localhost:3050
|
|
- **🗄️ Database UI (Adminer)**: http://localhost:8080
|
|
- System: PostgreSQL
|
|
- Server: db
|
|
- Username: postgres
|
|
- Password: postgres
|
|
- Database: qrmaster
|
|
- **💾 PostgreSQL**: localhost:5432
|
|
- **🔴 Redis**: localhost:6379
|
|
|
|
## 📦 What's Included
|
|
|
|
### Docker Services
|
|
|
|
| Service | Image | Port | Purpose |
|
|
|---------|-------|------|---------|
|
|
| web | Next.js (custom) | 3050 | Application |
|
|
| db | postgres:16-alpine | 5432 | Database |
|
|
| redis | redis:7-alpine | 6379 | Cache |
|
|
| adminer | adminer:latest | 8080 | DB UI |
|
|
|
|
### File Structure
|
|
|
|
```
|
|
QRMASTER/
|
|
├── docker/
|
|
│ ├── init-db.sh # PostgreSQL initialization
|
|
│ └── README.md # Docker commands
|
|
├── scripts/
|
|
│ ├── setup.sh # Quick setup (Linux/Mac)
|
|
│ └── setup.ps1 # Quick setup (Windows)
|
|
├── src/ # Application code
|
|
├── prisma/
|
|
│ └── schema.prisma # Updated schema (no directUrl)
|
|
├── docker-compose.yml # Production setup
|
|
├── docker-compose.dev.yml # Development setup
|
|
├── Dockerfile # Application container
|
|
├── env.example # Environment template
|
|
├── .dockerignore # Docker build optimization
|
|
├── DOCKER_SETUP.md # Complete Docker guide
|
|
├── MIGRATION_FROM_SUPABASE.md # Migration guide
|
|
├── CHANGELOG.md # What changed
|
|
└── README.md # Updated main docs
|
|
```
|
|
|
|
## 🛠️ Useful Commands
|
|
|
|
### Development
|
|
```bash
|
|
npm run dev # Start dev server
|
|
npm run docker:dev # Start database only
|
|
npm run docker:dev:stop # Stop database
|
|
```
|
|
|
|
### Database
|
|
```bash
|
|
npm run db:migrate # Run migrations
|
|
npm run db:seed # Seed database
|
|
npm run db:studio # Open Prisma Studio
|
|
npm run docker:db # PostgreSQL CLI
|
|
```
|
|
|
|
### Docker
|
|
```bash
|
|
npm run docker:prod # Start all services
|
|
npm run docker:stop # Stop all services
|
|
npm run docker:logs # View logs
|
|
npm run docker:backup # Backup database
|
|
```
|
|
|
|
### Management
|
|
```bash
|
|
docker-compose ps # Check status
|
|
docker-compose logs -f # Follow logs
|
|
docker-compose restart web # Restart app
|
|
docker-compose exec db psql -U postgres -d qrmaster # DB CLI
|
|
```
|
|
|
|
## 📚 Documentation
|
|
|
|
- **[README.md](README.md)** - Main documentation with quick start
|
|
- **[DOCKER_SETUP.md](DOCKER_SETUP.md)** - Complete Docker guide with troubleshooting
|
|
- **[MIGRATION_FROM_SUPABASE.md](MIGRATION_FROM_SUPABASE.md)** - Migration guide from Supabase
|
|
- **[docker/README.md](docker/README.md)** - Docker commands and operations
|
|
- **[CHANGELOG.md](CHANGELOG.md)** - What changed in this version
|
|
|
|
## 🔐 Security Checklist
|
|
|
|
Before deploying to production:
|
|
|
|
- [ ] Change PostgreSQL password in docker-compose.yml
|
|
- [ ] Set strong NEXTAUTH_SECRET (generate with `openssl rand -base64 32`)
|
|
- [ ] Set strong IP_SALT (generate with `openssl rand -base64 32`)
|
|
- [ ] Update NEXTAUTH_URL to your domain
|
|
- [ ] Enable HTTPS/SSL
|
|
- [ ] Set up firewall rules
|
|
- [ ] Configure automated backups
|
|
- [ ] Review and test all environment variables
|
|
|
|
## 🎯 Next Steps
|
|
|
|
1. **Test the Application**
|
|
```bash
|
|
npm run docker:dev
|
|
npm run dev
|
|
# Visit http://localhost:3050
|
|
```
|
|
|
|
2. **Review Configuration**
|
|
- Check `.env` file
|
|
- Verify database connection
|
|
- Test authentication
|
|
|
|
3. **Set Up Backups**
|
|
```bash
|
|
# Manual backup
|
|
npm run docker:backup
|
|
|
|
# Or create automated backup script
|
|
# See DOCKER_SETUP.md for examples
|
|
```
|
|
|
|
4. **Customize**
|
|
- Update database passwords
|
|
- Configure OAuth providers
|
|
- Adjust resource limits
|
|
- Set up monitoring
|
|
|
|
## 🆘 Need Help?
|
|
|
|
### Common Issues
|
|
|
|
**Database won't start:**
|
|
```bash
|
|
docker-compose logs db
|
|
docker-compose restart db
|
|
```
|
|
|
|
**Port already in use:**
|
|
```bash
|
|
# Windows
|
|
netstat -ano | findstr :3050
|
|
|
|
# Change port in docker-compose.yml if needed
|
|
```
|
|
|
|
**Prisma errors:**
|
|
```bash
|
|
npm run db:generate
|
|
npm run db:migrate
|
|
```
|
|
|
|
### Resources
|
|
|
|
- **DOCKER_SETUP.md** - Comprehensive troubleshooting
|
|
- **docker/README.md** - Common Docker commands
|
|
- **MIGRATION_FROM_SUPABASE.md** - Migration help
|
|
|
|
### Support
|
|
|
|
1. Check the documentation files
|
|
2. Review logs: `docker-compose logs -f`
|
|
3. Check service health: `docker-compose ps`
|
|
4. Open an issue on GitHub
|
|
|
|
## ✨ Features
|
|
|
|
Your application now has:
|
|
|
|
- ✅ **Self-hosted PostgreSQL** - Full control over your data
|
|
- ✅ **Redis caching** - Improved performance
|
|
- ✅ **Docker Compose** - Easy deployment
|
|
- ✅ **Health checks** - Automatic monitoring
|
|
- ✅ **Data persistence** - Volumes for data safety
|
|
- ✅ **Database UI** - Adminer for easy management
|
|
- ✅ **Development mode** - Run only what you need
|
|
- ✅ **Production ready** - Optimized Docker builds
|
|
- ✅ **Complete docs** - Multiple guides and references
|
|
|
|
## 🎊 Success!
|
|
|
|
You're now ready to develop and deploy QR Master with your own PostgreSQL database!
|
|
|
|
**Demo Credentials:**
|
|
- Email: demo@qrmaster.com
|
|
- Password: demo123
|
|
|
|
---
|
|
|
|
**Happy coding!** 🚀
|
|
|
|
Need more help? Check the documentation or run the setup scripts.
|
|
|