Spaces:
Sleeping
Sleeping
| # Production Deployment Guide | |
| This guide covers deploying the Chatty application in a production environment with proper security configurations. | |
| ## Prerequisites | |
| - Python 3.8+ | |
| - MongoDB Atlas account or MongoDB server | |
| - HTTPS-enabled domain (required for secure cookies) | |
| - Environment with proper SSL/TLS support | |
| ## Quick Start | |
| 1. **Generate Production Configuration** | |
| ```bash | |
| python deploy.py gen-prod-env | |
| ``` | |
| This creates `.env.production` with secure defaults. | |
| 2. **Configure Environment Variables** | |
| Edit `.env.production` and update: | |
| - `MONGODB_URL`: Your MongoDB connection string | |
| - Review all other settings | |
| 3. **Validate Configuration** | |
| ```bash | |
| FLASK_ENV=production python deploy.py check-prod | |
| ``` | |
| 4. **Deploy** | |
| ```bash | |
| export FLASK_ENV=production | |
| ./start.sh | |
| ``` | |
| ## Environment Variables | |
| ### Required Variables | |
| | Variable | Description | Example | | |
| |----------|-------------|---------| | |
| | `SECRET_KEY` | Flask secret key (32+ chars) | `abc123...` | | |
| | `MONGODB_URL` | MongoDB connection string | `mongodb+srv://...` | | |
| | `FLASK_ENV` | Environment mode | `production` | | |
| ### Security Variables | |
| | Variable | Default | Production | Description | | |
| |----------|---------|------------|-------------| | |
| | `SESSION_COOKIE_SECURE` | `false` | `true` | Require HTTPS for cookies | | |
| | `WTF_CSRF_SSL_STRICT` | `false` | `true` | Strict CSRF over HTTPS | | |
| | `MAX_LOGIN_ATTEMPTS` | `5` | `3` | Failed login limit | | |
| | `RATE_LIMIT_WINDOW` | `900` | `1800` | Rate limit window (seconds) | | |
| ### Optional Variables | |
| | Variable | Default | Description | | |
| |----------|---------|-------------| | |
| | `SESSION_LIFETIME_HOURS` | `24` | Session duration | | |
| | `API_TIMEOUT` | `30` | External API timeout | | |
| | `LOG_LEVEL` | `INFO` | Logging level | | |
| | `LOG_FILE` | None | Log file path | | |
| | `PORT` | `7860` | Server port | | |
| ## Security Checklist | |
| ### Before Deployment | |
| - [ ] Generate secure `SECRET_KEY` (32+ characters) | |
| - [ ] Configure MongoDB with authentication | |
| - [ ] Set up HTTPS/SSL certificates | |
| - [ ] Review rate limiting settings | |
| - [ ] Configure proper logging | |
| - [ ] Test database connectivity | |
| ### Production Configuration | |
| - [ ] `FLASK_ENV=production` | |
| - [ ] `DEBUG=False` (automatic in production) | |
| - [ ] `SESSION_COOKIE_SECURE=true` | |
| - [ ] `WTF_CSRF_SSL_STRICT=true` | |
| - [ ] Strong MongoDB credentials | |
| - [ ] Firewall rules configured | |
| ### Monitoring | |
| - [ ] Set up log monitoring | |
| - [ ] Configure health checks | |
| - [ ] Monitor database connections | |
| - [ ] Track authentication failures | |
| ## Deployment Methods | |
| ### Hugging Face Spaces | |
| 1. Create `.env` file with production variables | |
| 2. Ensure `PORT=7860` is set | |
| 3. Deploy with: | |
| ```bash | |
| export FLASK_ENV=production | |
| python app.py | |
| ``` | |
| ### Docker Deployment | |
| Create `Dockerfile`: | |
| ```dockerfile | |
| FROM python:3.9-slim | |
| WORKDIR /app | |
| COPY ../requirements.txt . | |
| RUN pip install -r requirements.txt | |
| COPY .. . | |
| ENV FLASK_ENV=production | |
| EXPOSE 7860 | |
| CMD ["python", "app.py"] | |
| ``` | |
| Build and run: | |
| ```bash | |
| docker build -t chatty . | |
| docker run -p 7860:7860 --env-file .env.production chatty | |
| ``` | |
| ### Traditional Server | |
| 1. Set up reverse proxy (nginx/Apache) | |
| 2. Configure SSL certificates | |
| 3. Use process manager (systemd/supervisor) | |
| 4. Set environment variables | |
| 5. Start application | |
| Example systemd service (`/etc/systemd/system/chatty.service`): | |
| ```ini | |
| [Unit] | |
| Description=Chatty Application | |
| After=network.target | |
| [Service] | |
| Type=simple | |
| User=chatty | |
| WorkingDirectory=/opt/chatty | |
| Environment=FLASK_ENV=production | |
| EnvironmentFile=/opt/chatty/.env.production | |
| ExecStart=/opt/chatty/atlas_env/bin/python app.py | |
| Restart=always | |
| [Install] | |
| WantedBy=multi-user.target | |
| ``` | |
| ## Database Configuration | |
| ### MongoDB Atlas | |
| 1. Create cluster in MongoDB Atlas | |
| 2. Configure network access (IP whitelist) | |
| 3. Create database user with appropriate permissions | |
| 4. Get connection string from Atlas dashboard | |
| 5. Update `MONGODB_URL` in environment | |
| ### Self-Hosted MongoDB | |
| 1. Install and configure MongoDB | |
| 2. Enable authentication | |
| 3. Create application database and user | |
| 4. Configure SSL/TLS if needed | |
| 5. Set connection string in `MONGODB_URL` | |
| ## Troubleshooting | |
| ### Configuration Issues | |
| ```bash | |
| # Check configuration | |
| python deploy.py check-prod | |
| # Generate new secret key | |
| python deploy.py gen-secret | |
| # Test database connection | |
| python -c "from database import test_connection; test_connection()" | |
| ``` | |
| ### Common Issues | |
| 1. **Secret Key Errors** | |
| - Generate new key: `python deploy.py gen-secret` | |
| - Ensure key is 32+ characters | |
| 2. **Database Connection Failures** | |
| - Check MongoDB URI format | |
| - Verify network connectivity | |
| - Check authentication credentials | |
| 3. **Session/Cookie Issues** | |
| - Ensure HTTPS is configured | |
| - Check `SESSION_COOKIE_SECURE` setting | |
| - Verify domain configuration | |
| 4. **CSRF Token Errors** | |
| - Check `WTF_CSRF_SSL_STRICT` setting | |
| - Ensure forms include CSRF tokens | |
| - Verify HTTPS configuration | |
| ### Logs and Monitoring | |
| - Application logs: Check `LOG_FILE` or console output | |
| - Database logs: MongoDB logs for connection issues | |
| - Web server logs: nginx/Apache access and error logs | |
| - System logs: systemd journal for service issues | |
| ## Security Best Practices | |
| 1. **Environment Variables** | |
| - Never commit `.env` files to version control | |
| - Use secure secret management in production | |
| - Rotate secrets regularly | |
| 2. **Database Security** | |
| - Use strong passwords | |
| - Enable MongoDB authentication | |
| - Configure network restrictions | |
| - Regular backups | |
| 3. **Application Security** | |
| - Keep dependencies updated | |
| - Monitor for security vulnerabilities | |
| - Use HTTPS everywhere | |
| - Implement proper logging | |
| 4. **Infrastructure Security** | |
| - Keep OS updated | |
| - Configure firewall rules | |
| - Use fail2ban for brute force protection | |
| - Regular security audits | |
| ## Performance Optimization | |
| 1. **Database Optimization** | |
| - Proper indexing (handled automatically) | |
| - Connection pooling (configured) | |
| - Query optimization | |
| 2. **Application Optimization** | |
| - Enable gzip compression | |
| - Use CDN for static assets | |
| - Implement caching where appropriate | |
| 3. **Infrastructure Optimization** | |
| - Use reverse proxy (nginx) | |
| - Load balancing for high traffic | |
| - Monitor resource usage | |
| ## Backup and Recovery | |
| 1. **Database Backups** | |
| - Regular MongoDB backups | |
| - Test restore procedures | |
| - Store backups securely | |
| 2. **Application Backups** | |
| - Code repository backups | |
| - Configuration backups | |
| - Log file archival | |
| 3. **Disaster Recovery** | |
| - Document recovery procedures | |
| - Test disaster recovery | |
| - Maintain backup infrastructure |