- Complete step-by-step deployment instructions - Prerequisites and system requirements - Database setup and configuration - Environment variables configuration - Development and production deployment options - Docker and traditional server deployment - Troubleshooting common issues - Maintenance and scaling considerations - Security best practices and SSL setup 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
744 lines
No EOL
15 KiB
Markdown
744 lines
No EOL
15 KiB
Markdown
# Ideas Generator 2025 - Installation Guide
|
|
|
|
A comprehensive installation guide for deploying the Ideas Generator 2025 application with dual-agent system, file upload support, and complete admin dashboard.
|
|
|
|
## 📋 Table of Contents
|
|
|
|
1. [Prerequisites](#prerequisites)
|
|
2. [Environment Setup](#environment-setup)
|
|
3. [Database Configuration](#database-configuration)
|
|
4. [Backend Installation](#backend-installation)
|
|
5. [Frontend Installation](#frontend-installation)
|
|
6. [Environment Variables](#environment-variables)
|
|
7. [Database Migration](#database-migration)
|
|
8. [Initial Data Setup](#initial-data-setup)
|
|
9. [Running the Application](#running-the-application)
|
|
10. [Production Deployment](#production-deployment)
|
|
11. [Troubleshooting](#troubleshooting)
|
|
12. [Maintenance](#maintenance)
|
|
|
|
## 🔧 Prerequisites
|
|
|
|
### System Requirements
|
|
- **Node.js**: 18.0.0 or higher
|
|
- **npm**: 9.0.0 or higher
|
|
- **PostgreSQL**: 14.0 or higher
|
|
- **Git**: Latest version
|
|
|
|
### Required Services
|
|
- **OpenAI API Account** with access to:
|
|
- Chat Completions API
|
|
- Responses API
|
|
- File Upload API
|
|
- Vector Stores (optional)
|
|
|
|
### Development Tools (Optional)
|
|
- **pgAdmin** or similar PostgreSQL management tool
|
|
- **Postman** for API testing
|
|
- **VS Code** with recommended extensions
|
|
|
|
## 🌍 Environment Setup
|
|
|
|
### 1. Clone the Repository
|
|
|
|
```bash
|
|
git clone https://bitbucket.org/zlalani/ideas-generator.git
|
|
cd ideas-generator
|
|
git checkout ideas-gen-2025
|
|
```
|
|
|
|
### 2. Verify Node.js Installation
|
|
|
|
```bash
|
|
node --version # Should be 18.0.0+
|
|
npm --version # Should be 9.0.0+
|
|
```
|
|
|
|
### 3. Install Global Dependencies
|
|
|
|
```bash
|
|
npm install -g nodemon
|
|
npm install -g pm2 # For production deployment
|
|
```
|
|
|
|
## 🗄️ Database Configuration
|
|
|
|
### 1. Install PostgreSQL
|
|
|
|
**macOS (using Homebrew):**
|
|
```bash
|
|
brew install postgresql@14
|
|
brew services start postgresql@14
|
|
```
|
|
|
|
**Ubuntu/Debian:**
|
|
```bash
|
|
sudo apt update
|
|
sudo apt install postgresql postgresql-contrib
|
|
sudo systemctl start postgresql
|
|
sudo systemctl enable postgresql
|
|
```
|
|
|
|
**Windows:**
|
|
Download and install from [PostgreSQL Official Site](https://www.postgresql.org/download/windows/)
|
|
|
|
### 2. Create Database and User
|
|
|
|
```bash
|
|
# Connect to PostgreSQL as superuser
|
|
sudo -u postgres psql
|
|
|
|
# Create database and user
|
|
CREATE DATABASE ideas_gen_dev;
|
|
CREATE USER ideas_gen_user WITH ENCRYPTED PASSWORD 'your_secure_password';
|
|
GRANT ALL PRIVILEGES ON DATABASE ideas_gen_dev TO ideas_gen_user;
|
|
|
|
# For production, create separate database
|
|
CREATE DATABASE ideas_gen_prod;
|
|
GRANT ALL PRIVILEGES ON DATABASE ideas_gen_prod TO ideas_gen_user;
|
|
|
|
\q
|
|
```
|
|
|
|
### 3. Test Database Connection
|
|
|
|
```bash
|
|
psql -h localhost -U ideas_gen_user -d ideas_gen_dev
|
|
```
|
|
|
|
## 🚀 Backend Installation
|
|
|
|
### 1. Navigate to Server Directory
|
|
|
|
```bash
|
|
cd server
|
|
```
|
|
|
|
### 2. Install Dependencies
|
|
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
### 3. Install Additional Dependencies (if needed)
|
|
|
|
```bash
|
|
npm install --save sequelize pg pg-hstore
|
|
npm install --save express cors helmet morgan
|
|
npm install --save openai multer node-fetch
|
|
npm install --save-dev nodemon
|
|
```
|
|
|
|
## 🎨 Frontend Installation
|
|
|
|
### 1. Navigate to Admin Directory
|
|
|
|
```bash
|
|
cd ../admin
|
|
```
|
|
|
|
### 2. Install Dependencies
|
|
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
### 3. Install Additional Dependencies (if needed)
|
|
|
|
```bash
|
|
npm install --save vue@next vue-router@4
|
|
npm install --save axios chart.js
|
|
npm install --save marked
|
|
npm install --save-dev @vitejs/plugin-vue vite
|
|
```
|
|
|
|
## 🔐 Environment Variables
|
|
|
|
### 1. Server Environment (.env)
|
|
|
|
Create `server/.env` file:
|
|
|
|
```env
|
|
# Application Settings
|
|
NODE_ENV=development
|
|
PORT=3000
|
|
FRONTEND_URL=http://localhost:5173
|
|
|
|
# Database Configuration
|
|
DB_NAME=ideas_gen_dev
|
|
DB_USER=ideas_gen_user
|
|
DB_PASSWORD=your_secure_password
|
|
DB_HOST=localhost
|
|
DB_PORT=5432
|
|
DB_DIALECT=postgres
|
|
|
|
# OpenAI API Configuration
|
|
OPENAI_API_KEY=sk-your-openai-api-key-here
|
|
OPENAI_ORG_ID=org-your-organization-id-here
|
|
|
|
# Security Settings
|
|
JWT_SECRET=your-super-secure-jwt-secret-key-here
|
|
SESSION_SECRET=your-super-secure-session-secret-here
|
|
|
|
# File Upload Settings
|
|
MAX_FILE_SIZE=10485760
|
|
UPLOAD_PATH=./uploads
|
|
|
|
# CORS Settings
|
|
CORS_ORIGIN=http://localhost:5173
|
|
|
|
# Logging
|
|
LOG_LEVEL=debug
|
|
```
|
|
|
|
### 2. Frontend Environment (.env)
|
|
|
|
Create `admin/.env` file:
|
|
|
|
```env
|
|
# API Configuration
|
|
VITE_API_BASE_URL=http://localhost:3000
|
|
VITE_API_TIMEOUT=30000
|
|
|
|
# Application Settings
|
|
VITE_APP_NAME=Ideas Generator 2025
|
|
VITE_APP_VERSION=2.0.0
|
|
|
|
# Development Settings
|
|
VITE_DEV_TOOLS=true
|
|
VITE_LOG_LEVEL=debug
|
|
```
|
|
|
|
### 3. Production Environment Variables
|
|
|
|
For production, create `server/.env.production`:
|
|
|
|
```env
|
|
# Application Settings
|
|
NODE_ENV=production
|
|
PORT=3000
|
|
FRONTEND_URL=https://your-domain.com
|
|
|
|
# Database Configuration
|
|
DB_NAME=ideas_gen_prod
|
|
DB_USER=ideas_gen_user
|
|
DB_PASSWORD=your_production_password
|
|
DB_HOST=your-db-host
|
|
DB_PORT=5432
|
|
DB_DIALECT=postgres
|
|
DB_SSL=true
|
|
|
|
# OpenAI API Configuration
|
|
OPENAI_API_KEY=sk-your-production-openai-key
|
|
OPENAI_ORG_ID=org-your-production-org-id
|
|
|
|
# Security Settings (Generate strong secrets!)
|
|
JWT_SECRET=your-production-jwt-secret
|
|
SESSION_SECRET=your-production-session-secret
|
|
|
|
# File Upload Settings
|
|
MAX_FILE_SIZE=10485760
|
|
UPLOAD_PATH=/var/www/uploads
|
|
|
|
# CORS Settings
|
|
CORS_ORIGIN=https://your-domain.com
|
|
|
|
# Logging
|
|
LOG_LEVEL=info
|
|
```
|
|
|
|
## 🗄️ Database Migration
|
|
|
|
### 1. Run Database Migrations
|
|
|
|
```bash
|
|
cd server
|
|
npm run migrate
|
|
```
|
|
|
|
### 2. If migrations don't exist, sync models
|
|
|
|
```bash
|
|
cd server
|
|
node -e "
|
|
const { sequelize } = require('./models');
|
|
sequelize.sync({ force: false })
|
|
.then(() => console.log('✅ Database synced'))
|
|
.catch(err => console.error('❌ Sync failed:', err));
|
|
"
|
|
```
|
|
|
|
### 3. Verify Tables Created
|
|
|
|
```bash
|
|
psql -h localhost -U ideas_gen_user -d ideas_gen_dev -c "\dt"
|
|
```
|
|
|
|
Expected tables:
|
|
- users
|
|
- assistants
|
|
- conversations
|
|
- messages
|
|
- response_sessions
|
|
- vector_stores
|
|
|
|
## 📊 Initial Data Setup
|
|
|
|
### 1. Create Admin User
|
|
|
|
```bash
|
|
cd server
|
|
node -e "
|
|
const { User } = require('./models');
|
|
(async () => {
|
|
try {
|
|
const admin = await User.create({
|
|
name: 'Admin User',
|
|
email: 'admin@yourdomain.com',
|
|
preferences: { role: 'admin' },
|
|
isActive: true
|
|
});
|
|
console.log('✅ Admin user created:', admin.email);
|
|
} catch(e) {
|
|
console.error('❌ Error:', e.message);
|
|
}
|
|
})();
|
|
"
|
|
```
|
|
|
|
### 2. Load Default Assistants (Optional)
|
|
|
|
If you have the assistant data file:
|
|
|
|
```bash
|
|
cd server
|
|
node -e "
|
|
const fs = require('fs');
|
|
const { Assistant } = require('./models');
|
|
const assistantsData = JSON.parse(fs.readFileSync('./data/assistants.json'));
|
|
(async () => {
|
|
try {
|
|
await Assistant.bulkCreate(assistantsData);
|
|
console.log('✅ Default assistants loaded');
|
|
} catch(e) {
|
|
console.error('❌ Error:', e.message);
|
|
}
|
|
})();
|
|
"
|
|
```
|
|
|
|
### 3. Verify Data
|
|
|
|
```bash
|
|
psql -h localhost -U ideas_gen_user -d ideas_gen_dev -c "SELECT COUNT(*) FROM assistants;"
|
|
psql -h localhost -U ideas_gen_user -d ideas_gen_dev -c "SELECT COUNT(*) FROM users;"
|
|
```
|
|
|
|
## 🏃♂️ Running the Application
|
|
|
|
### Development Mode
|
|
|
|
### 1. Start Backend Server
|
|
|
|
```bash
|
|
cd server
|
|
npm run dev
|
|
# or
|
|
nodemon index.js
|
|
```
|
|
|
|
Server should start on http://localhost:3000
|
|
|
|
### 2. Start Frontend Development Server
|
|
|
|
```bash
|
|
cd admin
|
|
npm run dev
|
|
```
|
|
|
|
Frontend should start on http://localhost:5173
|
|
|
|
### 3. Verify Installation
|
|
|
|
Visit http://localhost:5173 and check:
|
|
- ✅ Login page loads
|
|
- ✅ Can log in with admin credentials
|
|
- ✅ Home page shows assistants
|
|
- ✅ Chat interface works
|
|
- ✅ Admin dashboard accessible
|
|
|
|
### Production Mode
|
|
|
|
### 1. Build Frontend
|
|
|
|
```bash
|
|
cd admin
|
|
npm run build
|
|
```
|
|
|
|
### 2. Start Backend with PM2
|
|
|
|
```bash
|
|
cd server
|
|
pm2 start ecosystem.config.js --env production
|
|
```
|
|
|
|
Create `server/ecosystem.config.js`:
|
|
|
|
```javascript
|
|
module.exports = {
|
|
apps: [{
|
|
name: 'ideas-gen-2025',
|
|
script: 'index.js',
|
|
cwd: '/path/to/your/server',
|
|
instances: 'max',
|
|
exec_mode: 'cluster',
|
|
env: {
|
|
NODE_ENV: 'development'
|
|
},
|
|
env_production: {
|
|
NODE_ENV: 'production',
|
|
PORT: 3000
|
|
},
|
|
error_file: '/var/log/ideas-gen/error.log',
|
|
out_file: '/var/log/ideas-gen/out.log',
|
|
log_file: '/var/log/ideas-gen/combined.log',
|
|
time: true
|
|
}]
|
|
}
|
|
```
|
|
|
|
## 🌐 Production Deployment
|
|
|
|
### Using Docker (Recommended)
|
|
|
|
### 1. Create Docker Files
|
|
|
|
Create `Dockerfile`:
|
|
|
|
```dockerfile
|
|
# Multi-stage build
|
|
FROM node:18-alpine AS frontend-build
|
|
WORKDIR /app/admin
|
|
COPY admin/package*.json ./
|
|
RUN npm ci --only=production
|
|
COPY admin/ ./
|
|
RUN npm run build
|
|
|
|
FROM node:18-alpine AS backend
|
|
WORKDIR /app
|
|
COPY server/package*.json ./
|
|
RUN npm ci --only=production
|
|
COPY server/ ./
|
|
COPY --from=frontend-build /app/admin/dist ./public
|
|
|
|
EXPOSE 3000
|
|
CMD ["npm", "start"]
|
|
```
|
|
|
|
Create `docker-compose.yml`:
|
|
|
|
```yaml
|
|
version: '3.8'
|
|
|
|
services:
|
|
app:
|
|
build: .
|
|
ports:
|
|
- "3000:3000"
|
|
environment:
|
|
- NODE_ENV=production
|
|
- DB_HOST=postgres
|
|
- DB_NAME=ideas_gen_prod
|
|
- DB_USER=ideas_gen_user
|
|
- DB_PASSWORD=${DB_PASSWORD}
|
|
- OPENAI_API_KEY=${OPENAI_API_KEY}
|
|
- JWT_SECRET=${JWT_SECRET}
|
|
depends_on:
|
|
- postgres
|
|
volumes:
|
|
- ./uploads:/app/uploads
|
|
|
|
postgres:
|
|
image: postgres:14-alpine
|
|
environment:
|
|
- POSTGRES_DB=ideas_gen_prod
|
|
- POSTGRES_USER=ideas_gen_user
|
|
- POSTGRES_PASSWORD=${DB_PASSWORD}
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data
|
|
ports:
|
|
- "5432:5432"
|
|
|
|
nginx:
|
|
image: nginx:alpine
|
|
ports:
|
|
- "80:80"
|
|
- "443:443"
|
|
volumes:
|
|
- ./nginx.conf:/etc/nginx/nginx.conf
|
|
- ./ssl:/etc/ssl/certs
|
|
depends_on:
|
|
- app
|
|
|
|
volumes:
|
|
postgres_data:
|
|
```
|
|
|
|
### 2. Deploy
|
|
|
|
```bash
|
|
# Create environment file
|
|
echo "DB_PASSWORD=your_secure_password" > .env
|
|
echo "OPENAI_API_KEY=your_openai_key" >> .env
|
|
echo "JWT_SECRET=your_jwt_secret" >> .env
|
|
|
|
# Deploy
|
|
docker-compose up -d --build
|
|
```
|
|
|
|
### Using Traditional Server
|
|
|
|
### 1. Setup Nginx
|
|
|
|
Create `/etc/nginx/sites-available/ideas-gen-2025`:
|
|
|
|
```nginx
|
|
server {
|
|
listen 80;
|
|
server_name your-domain.com;
|
|
return 301 https://$server_name$request_uri;
|
|
}
|
|
|
|
server {
|
|
listen 443 ssl http2;
|
|
server_name your-domain.com;
|
|
|
|
ssl_certificate /path/to/your/certificate.crt;
|
|
ssl_certificate_key /path/to/your/private.key;
|
|
|
|
# Frontend static files
|
|
location / {
|
|
root /var/www/ideas-gen-2025/admin/dist;
|
|
try_files $uri $uri/ /index.html;
|
|
}
|
|
|
|
# API proxy
|
|
location /api {
|
|
proxy_pass http://localhost:3000;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection 'upgrade';
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
proxy_cache_bypass $http_upgrade;
|
|
}
|
|
}
|
|
```
|
|
|
|
### 2. Setup SSL (Let's Encrypt)
|
|
|
|
```bash
|
|
sudo apt install certbot python3-certbot-nginx
|
|
sudo certbot --nginx -d your-domain.com
|
|
```
|
|
|
|
### 3. Setup Process Manager
|
|
|
|
```bash
|
|
cd server
|
|
pm2 start index.js --name "ideas-gen-2025" --env production
|
|
pm2 save
|
|
pm2 startup
|
|
```
|
|
|
|
## 🔍 Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
#### 1. Database Connection Failed
|
|
|
|
**Error**: `ECONNREFUSED` or `database does not exist`
|
|
|
|
**Solutions**:
|
|
```bash
|
|
# Check PostgreSQL status
|
|
sudo systemctl status postgresql
|
|
|
|
# Restart PostgreSQL
|
|
sudo systemctl restart postgresql
|
|
|
|
# Verify database exists
|
|
psql -l | grep ideas_gen
|
|
|
|
# Recreate database if needed
|
|
createdb -U ideas_gen_user ideas_gen_dev
|
|
```
|
|
|
|
#### 2. OpenAI API Errors
|
|
|
|
**Error**: `Invalid API key` or `Rate limit exceeded`
|
|
|
|
**Solutions**:
|
|
- Verify API key in `.env` file
|
|
- Check OpenAI account billing and limits
|
|
- Test API key:
|
|
```bash
|
|
curl -H "Authorization: Bearer $OPENAI_API_KEY" \
|
|
https://api.openai.com/v1/models
|
|
```
|
|
|
|
#### 3. File Upload Issues
|
|
|
|
**Error**: `ENOENT: no such file or directory`
|
|
|
|
**Solutions**:
|
|
```bash
|
|
# Create uploads directory
|
|
mkdir -p server/uploads
|
|
chmod 755 server/uploads
|
|
|
|
# Check file size limits in .env
|
|
MAX_FILE_SIZE=10485760 # 10MB
|
|
```
|
|
|
|
#### 4. Frontend Build Errors
|
|
|
|
**Error**: `Module not found` or build failures
|
|
|
|
**Solutions**:
|
|
```bash
|
|
# Clear cache and reinstall
|
|
rm -rf admin/node_modules
|
|
rm admin/package-lock.json
|
|
cd admin && npm install
|
|
|
|
# Clear Vite cache
|
|
rm -rf admin/.vite
|
|
```
|
|
|
|
#### 5. CORS Issues
|
|
|
|
**Error**: `blocked by CORS policy`
|
|
|
|
**Solutions**:
|
|
- Check `CORS_ORIGIN` in server `.env`
|
|
- Verify frontend URL matches CORS setting
|
|
- For development, use: `CORS_ORIGIN=http://localhost:5173`
|
|
|
|
### Debug Commands
|
|
|
|
```bash
|
|
# Check server logs
|
|
cd server && npm run dev
|
|
|
|
# Test database connection
|
|
node -e "const {sequelize} = require('./models'); sequelize.authenticate().then(() => console.log('✅ DB OK')).catch(console.error);"
|
|
|
|
# Test API endpoints
|
|
curl http://localhost:3000/health
|
|
curl http://localhost:3000/api/assistants
|
|
|
|
# Check frontend build
|
|
cd admin && npm run build
|
|
|
|
# Test production build locally
|
|
cd admin && npm run preview
|
|
```
|
|
|
|
## 🔧 Maintenance
|
|
|
|
### Regular Tasks
|
|
|
|
#### 1. Database Backups
|
|
|
|
```bash
|
|
# Create backup script
|
|
#!/bin/bash
|
|
DATE=$(date +%Y%m%d_%H%M%S)
|
|
pg_dump -h localhost -U ideas_gen_user ideas_gen_prod > backup_$DATE.sql
|
|
|
|
# Automate with cron
|
|
echo "0 2 * * * /path/to/backup_script.sh" | crontab -
|
|
```
|
|
|
|
#### 2. Log Rotation
|
|
|
|
```bash
|
|
# Setup logrotate for PM2
|
|
sudo nano /etc/logrotate.d/pm2
|
|
|
|
/home/user/.pm2/logs/*.log {
|
|
daily
|
|
missingok
|
|
rotate 7
|
|
compress
|
|
notifempty
|
|
create 0644 user user
|
|
postrotate
|
|
pm2 reloadLogs
|
|
endscript
|
|
}
|
|
```
|
|
|
|
#### 3. Security Updates
|
|
|
|
```bash
|
|
# Update dependencies monthly
|
|
cd server && npm audit fix
|
|
cd admin && npm audit fix
|
|
|
|
# Update system packages
|
|
sudo apt update && sudo apt upgrade
|
|
```
|
|
|
|
#### 4. Performance Monitoring
|
|
|
|
```bash
|
|
# Monitor with PM2
|
|
pm2 monit
|
|
|
|
# Check system resources
|
|
htop
|
|
df -h
|
|
free -h
|
|
|
|
# Monitor database
|
|
psql -c "SELECT * FROM pg_stat_activity;"
|
|
```
|
|
|
|
### Scaling Considerations
|
|
|
|
#### 1. Database Scaling
|
|
- Consider PostgreSQL read replicas for heavy read workloads
|
|
- Implement connection pooling with `pg-pool`
|
|
- Monitor query performance and add indexes
|
|
|
|
#### 2. Application Scaling
|
|
- Use PM2 cluster mode: `pm2 start index.js -i max`
|
|
- Implement Redis for session storage
|
|
- Consider load balancer for multiple servers
|
|
|
|
#### 3. Storage Scaling
|
|
- Use cloud storage (AWS S3, Google Cloud Storage) for file uploads
|
|
- Implement CDN for static assets
|
|
- Regular cleanup of old conversation data
|
|
|
|
---
|
|
|
|
## 📞 Support
|
|
|
|
For issues and questions:
|
|
|
|
1. Check this installation guide
|
|
2. Review troubleshooting section
|
|
3. Check application logs
|
|
4. Contact system administrator
|
|
|
|
---
|
|
|
|
**Installation Guide Version**: 2.0.0
|
|
**Last Updated**: September 2025
|
|
**Compatible with**: Ideas Generator 2025 v2.x |