# Environment Setup Guide This guide walks you through setting up the Multi-Language Chat Agent application in different environments. ## Quick Start For the fastest setup, use the automated setup script: ```bash # Development environment python scripts/setup_environment.py --environment development # Production environment python scripts/setup_environment.py --environment production # Testing environment python scripts/setup_environment.py --environment testing ``` ## Manual Setup ### 1. Prerequisites #### System Requirements - **Python 3.8+**: Check with `python --version` - **PostgreSQL 12+**: For persistent data storage - **Redis 6+**: For caching and sessions (optional but recommended) - **Git**: For version control #### Install System Dependencies **Ubuntu/Debian:** ```bash sudo apt update sudo apt install python3 python3-pip python3-venv postgresql postgresql-contrib redis-server ``` **macOS (with Homebrew):** ```bash brew install python postgresql redis ``` **Windows:** - Install Python from python.org - Install PostgreSQL from postgresql.org - Install Redis from GitHub releases or use WSL ### 2. Project Setup #### Clone Repository ```bash git clone cd chat-agent ``` #### Create Virtual Environment ```bash python -m venv venv # Activate virtual environment # Linux/macOS: source venv/bin/activate # Windows: venv\Scripts\activate ``` #### Install Python Dependencies ```bash pip install --upgrade pip pip install -r requirements.txt ``` ### 3. Database Setup #### PostgreSQL Setup **Create Database and User:** ```sql -- Connect to PostgreSQL as superuser sudo -u postgres psql -- Create database and user CREATE DATABASE chat_agent_db; CREATE USER chatuser WITH PASSWORD 'your_password'; GRANT ALL PRIVILEGES ON DATABASE chat_agent_db TO chatuser; -- For development, you might want to create separate databases CREATE DATABASE chat_agent_dev; CREATE DATABASE chat_agent_test; GRANT ALL PRIVILEGES ON DATABASE chat_agent_dev TO chatuser; GRANT ALL PRIVILEGES ON DATABASE chat_agent_test TO chatuser; \q ``` **Test Connection:** ```bash psql -h localhost -U chatuser -d chat_agent_db -c "SELECT version();" ``` #### Redis Setup **Start Redis:** ```bash # Linux (systemd) sudo systemctl start redis sudo systemctl enable redis # macOS brew services start redis # Manual start redis-server ``` **Test Connection:** ```bash redis-cli ping # Should return: PONG ``` ### 4. Environment Configuration #### Create Environment File Copy the appropriate environment template: ```bash # Development cp config/development.env .env # Production cp config/production.env .env # Testing cp config/testing.env .env ``` #### Configure Environment Variables Edit `.env` file with your actual values: ```bash # Required Configuration GROQ_API_KEY=your_groq_api_key_here SECRET_KEY=your_secure_secret_key_here # Database Configuration DATABASE_URL=postgresql://chatuser:your_password@localhost:5432/chat_agent_db # Redis Configuration (optional) REDIS_URL=redis://localhost:6379/0 # Application Configuration FLASK_ENV=development # or production FLASK_DEBUG=True # False for production ``` #### Generate Secret Key ```python # Generate a secure secret key python -c "import secrets; print(secrets.token_urlsafe(32))" ``` ### 5. Database Initialization #### Run Migrations ```bash # Initialize database with schema python scripts/init_db.py init --config development # Check migration status python scripts/init_db.py status --config development # Seed with sample data (optional) python scripts/init_db.py seed --config development ``` #### Manual Migration (Alternative) ```bash python migrations/migrate.py migrate --config development ``` ### 6. Application Startup #### Development Server ```bash python app.py ``` The application will be available at `http://localhost:5000` #### Production Server ```bash # Install production server pip install gunicorn # Start with Gunicorn gunicorn --bind 0.0.0.0:5000 --workers 4 --worker-class eventlet app:app ``` ### 7. Verification #### Test Health Endpoints ```bash # Basic health check curl http://localhost:5000/health/ # Detailed health check curl http://localhost:5000/health/detailed # Expected response: { "status": "healthy", "timestamp": "2024-01-15T10:30:00Z", "service": "chat-agent", "version": "1.0.0" } ``` #### Test Chat Interface 1. Open browser to `http://localhost:5000` 2. You should see the chat interface 3. Try sending a message 4. Verify WebSocket connection works #### Test API Endpoints ```bash # Test session creation curl -X POST http://localhost:5000/api/sessions \ -H "Content-Type: application/json" \ -d '{"user_id": "test_user", "language": "python"}' # Test language switching curl -X PUT http://localhost:5000/api/sessions/SESSION_ID/language \ -H "Content-Type: application/json" \ -d '{"language": "javascript"}' ``` ## Environment-Specific Configuration ### Development Environment **Features:** - Debug mode enabled - Detailed logging - Hot reload - Development database - Relaxed security settings **Configuration:** ```bash FLASK_ENV=development FLASK_DEBUG=True LOG_LEVEL=DEBUG DATABASE_URL=postgresql://chatuser:password@localhost:5432/chat_agent_dev ``` **Additional Tools:** ```bash # Install development tools pip install flask-debugtoolbar ipdb watchdog # Enable debug toolbar export FLASK_DEBUG_TB_ENABLED=True ``` ### Production Environment **Features:** - Debug mode disabled - Optimized logging - Production database - Enhanced security - Performance monitoring **Configuration:** ```bash FLASK_ENV=production FLASK_DEBUG=False LOG_LEVEL=INFO DATABASE_URL=postgresql://user:pass@prod-host:5432/chat_agent_prod SECRET_KEY=very_secure_secret_key ``` **Security Considerations:** - Use environment variables for secrets - Enable HTTPS - Configure firewall - Set up monitoring - Regular backups ### Testing Environment **Features:** - In-memory database - Isolated test data - Fast execution - Minimal logging **Configuration:** ```bash FLASK_ENV=testing TESTING=True DATABASE_URL=sqlite:///:memory: REDIS_URL=redis://localhost:6379/1 LOG_LEVEL=WARNING ``` **Running Tests:** ```bash # Set testing environment export FLASK_ENV=testing # Run tests python -m pytest tests/ python -m pytest tests/ --cov=chat_agent ``` ## Troubleshooting ### Common Issues #### 1. Import Errors ```bash # Ensure virtual environment is activated source venv/bin/activate # Reinstall dependencies pip install -r requirements.txt ``` #### 2. Database Connection Issues ```bash # Check PostgreSQL service sudo systemctl status postgresql # Test connection manually psql -h localhost -U chatuser -d chat_agent_db # Check environment variables echo $DATABASE_URL ``` #### 3. Redis Connection Issues ```bash # Check Redis service sudo systemctl status redis # Test connection redis-cli ping # Check Redis URL echo $REDIS_URL ``` #### 4. Permission Issues ```bash # Fix file permissions chmod +x scripts/*.py # Fix directory permissions sudo chown -R $USER:$USER . ``` #### 5. Port Already in Use ```bash # Find process using port 5000 lsof -i :5000 # Kill process kill -9 PID # Use different port export PORT=5001 python app.py ``` ### Logging and Debugging #### Enable Debug Logging ```bash export LOG_LEVEL=DEBUG export FLASK_DEBUG=True python app.py ``` #### View Logs ```bash # Application logs tail -f logs/chat_agent.log # System logs journalctl -f -u postgresql journalctl -f -u redis ``` #### Database Debugging ```bash # Connect to database psql -h localhost -U chatuser -d chat_agent_db # Check tables \dt # Check migrations SELECT * FROM schema_migrations; # Check sample data SELECT * FROM chat_sessions LIMIT 5; ``` ## Performance Optimization ### Database Optimization ```sql -- Create indexes for better performance CREATE INDEX CONCURRENTLY idx_messages_session_timestamp ON messages(session_id, timestamp); CREATE INDEX CONCURRENTLY idx_sessions_user_active ON chat_sessions(user_id, is_active); ``` ### Redis Optimization ```bash # Configure Redis for production # Edit /etc/redis/redis.conf maxmemory 256mb maxmemory-policy allkeys-lru save 900 1 save 300 10 save 60 10000 ``` ### Application Optimization ```python # Use connection pooling SQLALCHEMY_ENGINE_OPTIONS = { 'pool_size': 10, 'pool_recycle': 120, 'pool_pre_ping': True } # Configure Redis connection pool REDIS_CONNECTION_POOL = { 'max_connections': 20, 'retry_on_timeout': True } ``` ## Next Steps After successful setup: 1. **Configure Groq API**: Add your actual API key 2. **Set up monitoring**: Configure health checks and logging 3. **Security hardening**: Review security settings 4. **Performance testing**: Test with expected load 5. **Backup strategy**: Set up database backups 6. **Documentation**: Document your specific configuration For deployment to production, see [DEPLOYMENT.md](DEPLOYMENT.md).