Files
igny8/master-docs/01-TECH-STACK-AND-INFRASTRUCTURE.md
2025-11-18 04:16:37 +05:00

1154 lines
32 KiB
Markdown

# IGNY8 Technology Stack & Infrastructure
**Last Updated:** 2025-01-XX
**Purpose:** Complete technology stack, infrastructure setup, Docker deployment, and fresh installation guide for the IGNY8 platform.
---
## Table of Contents
1. [Executive Summary](#executive-summary)
2. [Technology Stack](#technology-stack)
3. [System Architecture](#system-architecture)
4. [Core Architecture Principles](#core-architecture-principles)
5. [Infrastructure Components](#infrastructure-components)
6. [External Service Integrations](#external-service-integrations)
7. [Deployment Architecture](#deployment-architecture)
8. [Complete Fresh Installation Guide](#complete-fresh-installation-guide)
---
## Executive Summary
**IGNY8** is a full-stack SaaS platform for SEO keyword management and AI-driven content generation. The system is built with modern technologies and follows a multi-tenant architecture with complete account isolation.
### Key Metrics
- **Architecture**: Multi-tenant SaaS with account isolation
- **Backend**: Django 5.2+ with Django REST Framework
- **Frontend**: React 19 with TypeScript
- **Database**: PostgreSQL 15
- **Task Queue**: Celery with Redis
- **Deployment**: Docker-based containerization
- **Reverse Proxy**: Caddy (HTTPS termination)
- **AI Functions**: 5 primary AI operations
- **Modules**: 5 core modules (Planner, Writer, Thinker, System, Billing)
---
## Technology Stack
### Backend Stack
| Component | Technology | Version | Purpose |
|-----------|------------|---------|---------|
| **Framework** | Django | 5.2.7+ | Web framework |
| **API Framework** | Django REST Framework | Latest | RESTful API |
| **Database** | PostgreSQL | 15 | Primary database |
| **Database Adapter** | psycopg2-binary | Latest | PostgreSQL Python adapter |
| **Task Queue** | Celery | 5.3.0+ | Asynchronous tasks |
| **Cache/Broker** | Redis | 7 | Celery broker & caching |
| **Authentication** | JWT | PyJWT 2.8.0+ | Token-based auth |
| **HTTP Client** | Requests | 2.31.0+ | External API calls |
| **WSGI Server** | Gunicorn | Latest | Production server |
| **Static Files** | WhiteNoise | Latest | Static file serving |
| **HTML Parsing** | BeautifulSoup4 | 4.12.0+ | HTML parsing & processing |
| **System Utils** | psutil | 5.9.0+ | System & process utilities |
| **Docker Client** | docker | 7.0.0+ | Docker API client |
| **Django Packages** | django-filter | Latest | Advanced filtering |
| **Django Packages** | django-cors-headers | Latest | CORS handling |
### Frontend Stack
| Component | Technology | Version | Purpose |
|-----------|------------|---------|---------|
| **Framework** | React | 19.0.0 | UI library |
| **Framework** | React DOM | 19.0.0 | DOM rendering |
| **Language** | TypeScript | 5.7.2 | Type safety |
| **Build Tool** | Vite | 6.1.0 | Build tool & dev server |
| **Styling** | Tailwind CSS | 4.0.8 | Utility-first CSS |
| **State Management** | Zustand | 5.0.8 | Lightweight state |
| **Routing** | React Router | v7.9.5 | Client-side routing |
| **HTTP Client** | Fetch API | Native | API communication |
| **SEO** | react-helmet-async | 2.0.5 | Dynamic head management |
### Frontend UI Libraries
| Library | Version | Purpose |
|---------|---------|---------|
| **Icons** | @heroicons/react | 2.2.0 | Icon library |
| **Charts** | apexcharts | 4.1.0 | Chart library |
| **Charts** | react-apexcharts | 1.7.0 | React wrapper for ApexCharts |
| **Calendar** | @fullcalendar/core | 6.1.15 | Calendar component |
| **Calendar** | @fullcalendar/react | 6.1.15 | React wrapper for FullCalendar |
| **Calendar** | @fullcalendar/daygrid | 6.1.15 | Day grid view |
| **Calendar** | @fullcalendar/timegrid | 6.1.15 | Time grid view |
| **Calendar** | @fullcalendar/interaction | 6.1.15 | Calendar interactions |
| **Calendar** | @fullcalendar/list | 6.1.15 | List view |
| **Maps** | @react-jvectormap/core | 1.0.4 | Vector map library |
| **Maps** | @react-jvectormap/world | 1.1.2 | World map component |
| **Carousel** | swiper | 11.2.3 | Carousel/slider component |
| **Date Picker** | flatpickr | 4.6.13 | Date/time picker |
| **Drag & Drop** | react-dnd | 16.0.1 | Drag and drop functionality |
| **Drag & Drop** | react-dnd-html5-backend | 16.0.1 | HTML5 drag & drop backend |
| **File Upload** | react-dropzone | 14.3.5 | File upload component |
### Frontend Utilities
| Library | Version | Purpose |
|---------|---------|---------|
| **Class Utils** | clsx | 2.1.1 | Conditional class names |
| **Tailwind Utils** | tailwind-merge | 3.0.1 | Merge Tailwind classes |
### Frontend Development Tools
| Tool | Version | Purpose |
|------|---------|---------|
| **Linter** | ESLint | 9.19.0 | Code linting |
| **TypeScript Linter** | typescript-eslint | 8.22.0 | TypeScript linting |
| **Vite Plugin** | @vitejs/plugin-react | 4.3.4 | React plugin for Vite |
| **SVG Plugin** | vite-plugin-svgr | 4.3.0 | SVG as React components |
| **PostCSS** | postcss | 8.5.2 | CSS processing |
| **Tailwind PostCSS** | @tailwindcss/postcss | 4.0.8 | Tailwind PostCSS plugin |
### Infrastructure Stack
| Component | Technology | Purpose |
|-----------|------------|---------|
| **Containerization** | Docker | Application containers |
| **Orchestration** | Docker Compose | Multi-container orchestration |
| **Reverse Proxy** | Caddy | HTTPS termination & routing |
| **Database Admin** | pgAdmin | PostgreSQL administration |
| **File Management** | FileBrowser | Web-based file management |
| **Container Management** | Portainer | Docker container management |
### External Services
| Service | Purpose | Integration |
|---------|---------|-------------|
| **OpenAI API** | Text generation (GPT models) | API integration |
| **OpenAI DALL-E** | Image generation | API integration |
| **Runware API** | Alternative image generation | API integration |
| **WordPress** | Content publishing | REST API integration |
| **Stripe** | Payment processing | Webhook integration (planned) |
---
## System Architecture
### High-Level Architecture
```
┌─────────────────────────────────────────────────────────────┐
│ Client Layer │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Browser │ │ Mobile │ │ Admin │ │
│ │ (React) │ │ (Future) │ │ Panel │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
└─────────┼──────────────────┼──────────────────┼─────────────┘
│ │ │
└──────────────────┼──────────────────┘
┌────────────────────────────┼──────────────────────────────┐
│ Reverse Proxy Layer │
│ ┌───────────────┐ │
│ │ Caddy │ │
│ │ (HTTPS/443) │ │
│ └───────┬───────┘ │
└────────────────────────────┼──────────────────────────────┘
┌────────────────────────────┼──────────────────────────────┐
│ Application Layer │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Frontend │ │ Backend │ │
│ │ (React) │◄─────────────┤ (Django) │ │
│ │ Port 8021 │ REST API │ Port 8011 │ │
│ └──────────────┘ └──────┬───────┘ │
│ │ │
│ ┌────────┴────────┐ │
│ │ Celery Worker │ │
│ │ (Async Tasks) │ │
│ └────────┬────────┘ │
└───────────────────────────────────────┼──────────────────┘
┌───────────────────────────────────────┼──────────────────┐
│ Data Layer │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ PostgreSQL │ │ Redis │ │ Storage │ │
│ │ (Database) │ │ (Cache/Broker)│ │ (Files) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└──────────────────────────────────────────────────────────┘
┌───────────────────────────────────────┼──────────────────┐
│ External Services │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ OpenAI │ │ Runware │ │ WordPress │ │
│ │ (GPT/DALL-E)│ │ (Images) │ │ (Publish) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└──────────────────────────────────────────────────────────┘
```
### Request Flow
```
1. User Request
2. Browser (React Frontend)
3. Caddy Reverse Proxy (HTTPS Termination)
4. Django Backend (API Endpoint)
5. AccountContextMiddleware (Account Isolation)
6. ViewSet (Business Logic)
7. Serializer (Validation)
8. Model (Database)
9. Response (JSON)
10. Frontend (UI Update)
```
### AI Task Flow
```
1. User Action (e.g., "Auto Cluster Keywords")
2. Frontend API Call
3. Backend Endpoint (ViewSet Action)
4. Celery Task Queued
5. Task ID Returned to Frontend
6. Frontend Polls Progress Endpoint
7. Celery Worker Processes Task
8. AIProcessor Makes API Calls
9. Results Saved to Database
10. Progress Updates Sent
11. Frontend Displays Results
```
---
## Core Architecture Principles
### 1. Configuration-Driven Everything
**Principle**: Zero HTML/JSX duplication - All UI rendered from configuration.
**Implementation**:
- **Frontend**: Config files in `/config/pages/` and `/config/snippets/`
- **Backend**: DRF serializers and ViewSet actions
- **Templates**: 4 universal templates (Dashboard, Table, Form, System)
**Benefits**:
- Single source of truth
- Easy maintenance
- Consistent UI/UX
- Rapid feature development
### 2. Multi-Tenancy Foundation
**Principle**: Complete account isolation with automatic filtering.
**Implementation**:
- All models inherit `AccountBaseModel`
- All ViewSets inherit `AccountModelViewSet`
- Middleware injects account context from JWT
- Site > Sector hierarchy for content organization
**Benefits**:
- Data security
- Scalability
- Resource isolation
- Simplified access control
### 3. Template System (4 Universal Templates)
**Principle**: Reusable templates for all page types.
| Template | Purpose | Usage |
|----------|---------|-------|
| **DashboardTemplate** | Module home pages | KPIs, workflow steps, charts |
| **TablePageTemplate** | CRUD table pages | Keywords, Clusters, Tasks, etc. |
| **FormPageTemplate** | Settings/form pages | Settings, Integration, etc. |
| **SystemPageTemplate** | System/admin pages | Logs, Status, Monitoring |
### 4. Unified AI Processor
**Principle**: Single interface for all AI operations.
**Implementation**:
- Single `AIEngine` class orchestrates all AI operations
- All AI functions inherit from `BaseAIFunction`
- Manual and automated workflows use same functions
- Account-specific API keys and model configuration
**Benefits**:
- Code reusability
- Consistent error handling
- Unified logging
- Easy to extend
### 5. Module-Based Organization
**Principle**: Clear module boundaries with shared utilities.
**Modules**:
- **Planner**: Keywords, Clusters, Ideas
- **Writer**: Tasks, Content, Images
- **Thinker**: Prompts, Author Profiles, Strategies, Image Testing
- **System**: Settings, Integrations, AI Configuration
- **Billing**: Credits, Transactions, Usage
- **Auth**: Accounts, Users, Sites, Sectors
---
## Infrastructure Components
### Docker Architecture
The system uses a two-stack Docker architecture:
1. **Infrastructure Stack (`igny8-infra`)**: Shared services
2. **Application Stack (`igny8-app`)**: Application-specific services
### Infrastructure Stack Services
| Service | Container Name | Port | Purpose |
|---------|----------------|------|---------|
| **PostgreSQL** | `igny8_postgres` | 5432 (internal) | Database |
| **Redis** | `igny8_redis` | 6379 (internal) | Cache & Celery broker |
| **pgAdmin** | `igny8_pgadmin` | 5050:80 | Database administration |
| **FileBrowser** | `igny8_filebrowser` | 8080:80 | File management |
| **Caddy** | `igny8_caddy` | 80:80, 443:443 | Reverse proxy & HTTPS |
| **Setup Helper** | `setup-helper` | - | Utility container |
### Application Stack Services
| Service | Container Name | Port | Purpose |
|---------|----------------|------|---------|
| **Backend** | `igny8_backend` | 8011:8010 | Django REST API |
| **Frontend** | `igny8_frontend` | 8021:5173 | React application (main app) |
| **Marketing Dev** | `igny8_marketing_dev` | 8023:5174 | Marketing site (dev server) |
| **Celery Worker** | `igny8_celery_worker` | - | Async task processing |
| **Celery Beat** | `igny8_celery_beat` | - | Scheduled tasks |
### Network Configuration
- **Network Name**: `igny8_net`
- **Type**: External bridge network
- **Purpose**: Inter-container communication
- **Creation**: Must be created manually before starting stacks
### Volume Management
**Infrastructure Volumes**:
- `pgdata`: PostgreSQL database data
- `redisdata`: Redis data
- `pgadmin_data`: pgAdmin configuration
- `filebrowser_db`: FileBrowser database
- `caddy_data`: Caddy SSL certificates
- `caddy_config`: Caddy configuration
**Application Volumes**:
- Host mounts for application code
- Host mounts for logs
- Docker socket for container management
### Port Allocation
| Service | External Port | Internal Port | Access |
|---------|---------------|---------------|--------|
| **pgAdmin** | 5050 | 80 | http://localhost:5050 |
| **FileBrowser** | 8080 | 80 | http://localhost:8080 |
| **Caddy** | 80, 443 | 80, 443 | https://domain.com |
| **Backend** | 8011 | 8010 | http://localhost:8011 |
| **Frontend** | 8021 | 5173 | http://localhost:8021 |
| **Marketing Dev** | 8023 | 5174 | http://localhost:8023 |
---
## External Service Integrations
### OpenAI Integration
**Purpose**: Text generation and image generation
**Services Used**:
- GPT models for text generation
- DALL-E for image generation
**Configuration**:
- API key stored per account in `IntegrationSettings`
- Model selection per account
- Cost tracking per request
### Runware Integration
**Purpose**: Alternative image generation service
**Configuration**:
- API key stored per account
- Model selection (e.g., `runware:97@1`)
- Image type selection (realistic, artistic, cartoon)
### WordPress Integration
**Purpose**: Content publishing
**Configuration**:
- WordPress URL per site
- Username and password stored per site
- REST API integration for publishing
**Workflow**:
1. Content generated in IGNY8
2. Images attached
3. Content published to WordPress via REST API
4. Status updated in IGNY8
### Stripe Integration (Planned)
**Purpose**: Payment processing
**Status**: Planned for future implementation
**Features**:
- Subscription management
- Payment processing
- Webhook integration
---
## Deployment Architecture
### Deployment Model
**Container-Based**: All services run in Docker containers
**Stack Separation**:
- Infrastructure stack runs independently
- Application stack depends on infrastructure stack
- Both stacks share the same Docker network
### Environment Configuration
**Backend Environment Variables**:
- Database connection (PostgreSQL)
- Redis connection
- Django settings (DEBUG, SECRET_KEY, etc.)
- JWT settings
- Celery configuration
**Frontend Environment Variables**:
- Backend API URL
- Environment (development/production)
**Infrastructure Environment Variables**:
- PostgreSQL credentials
- pgAdmin credentials
- FileBrowser configuration
### Health Checks
**Backend Health Check**:
- Endpoint: `/api/v1/system/status/`
- Interval: 30 seconds
- Timeout: 10 seconds
- Retries: 3
**PostgreSQL Health Check**:
- Command: `pg_isready`
- Interval: 20 seconds
- Timeout: 3 seconds
- Retries: 5
**Redis Health Check**:
- Command: `redis-cli ping`
- Interval: 20 seconds
- Timeout: 3 seconds
- Retries: 5
### Scaling Considerations
**Horizontal Scaling**:
- Multiple Celery workers can be added
- Multiple backend instances can be added (with load balancer)
- Frontend can be scaled independently
**Vertical Scaling**:
- Database can be scaled with more resources
- Redis can be scaled with more memory
- Containers can be allocated more CPU/memory
### Backup & Recovery
**Database Backups**:
- PostgreSQL dumps stored in `/data/backups`
- Automated backup scripts
- Point-in-time recovery support
**Volume Backups**:
- Docker volume backups
- Application code backups
- Configuration backups
---
## Summary
The IGNY8 platform is built on a modern, scalable architecture using:
- **Django 5.2+** for the backend API
- **React 19** for the frontend
- **PostgreSQL 15** for data storage
- **Celery & Redis** for async processing
- **Docker** for containerization
- **Caddy** for reverse proxy and HTTPS
The architecture follows principles of:
- Configuration-driven development
- Multi-tenancy with account isolation
- Module-based organization
- Unified AI processing
- Template-based UI rendering
This architecture supports scalability, maintainability, and rapid feature development while ensuring data security and isolation.
---
## Complete Fresh Installation Guide
This guide covers installing IGNY8 on a fresh Ubuntu VPS from scratch, including all prerequisites, Docker, Portainer, and the complete IGNY8 application stack.
### Prerequisites
**System Requirements**:
- **OS**: Ubuntu 22.04 LTS or 24.04 LTS (recommended)
- **RAM**: Minimum 4GB (8GB+ recommended for production)
- **CPU**: 2+ cores (4+ cores recommended)
- **Storage**: 50GB+ free space
- **Network**: Static IP address or domain name
- **Access**: Root or sudo access
**Domain Setup** (Optional but recommended):
- Domain name pointing to server IP
- DNS records configured:
- `igny8.com` → Server IP
- `www.igny8.com` → Server IP
- `app.igny8.com` → Server IP
- `api.igny8.com` → Server IP
---
### Step 1: Initial Server Setup
#### 1.1 Update System
```bash
# Update package list
sudo apt update && sudo apt upgrade -y
# Install essential tools
sudo apt install -y curl wget git vim ufw software-properties-common apt-transport-https ca-certificates gnupg lsb-release
```
#### 1.2 Configure Firewall
```bash
# Enable UFW firewall
sudo ufw enable
# Allow SSH (adjust port if needed)
sudo ufw allow 22/tcp
# Allow HTTP and HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Allow Portainer (if accessing directly)
sudo ufw allow 9000/tcp
# Check firewall status
sudo ufw status
```
#### 1.3 Create Application User (Optional but Recommended)
```bash
# Create user for application
sudo adduser igny8
sudo usermod -aG sudo igny8
# Switch to application user
su - igny8
```
---
### Step 2: Install Docker
#### 2.1 Install Docker Engine
```bash
# Remove old Docker versions if any
sudo apt remove -y docker docker-engine docker.io containerd runc
# Add Docker's official GPG key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Set up Docker repository
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Install Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Verify Docker installation
sudo docker --version
sudo docker compose version
```
#### 2.2 Configure Docker (Optional)
```bash
# Add user to docker group (to run docker without sudo)
sudo usermod -aG docker $USER
# Apply group changes (logout/login or use newgrp)
newgrp docker
# Test Docker without sudo
docker run hello-world
# Configure Docker to start on boot
sudo systemctl enable docker
sudo systemctl start docker
```
---
### Step 3: Install Portainer
#### 3.1 Create Portainer Volume
```bash
# Create volume for Portainer data
docker volume create portainer_data
```
#### 3.2 Run Portainer Container
```bash
# Run Portainer Community Edition
docker run -d \
-p 9000:9000 \
--name=portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
```
#### 3.3 Access Portainer
1. Open browser: `http://your-server-ip:9000`
2. Create admin account (first-time setup)
3. Select "Docker" environment
4. Portainer dashboard will load
**Note**: For production, configure Portainer behind Caddy reverse proxy with HTTPS.
---
### Step 4: Create Docker Network
```bash
# Create external network for IGNY8 services
docker network create igny8_net
# Verify network creation
docker network ls | grep igny8_net
```
**Important**: This network must exist before starting IGNY8 services.
---
### Step 5: Prepare Application Directories
#### 5.1 Create Directory Structure
```bash
# Create main application directory
sudo mkdir -p /data/app
sudo chown $USER:$USER /data/app
# Create subdirectories
mkdir -p /data/app/igny8
mkdir -p /data/app/logs
mkdir -p /data/backups
```
#### 5.2 Clone or Copy IGNY8 Repository
**Option A: Git Clone** (if repository is available):
```bash
cd /data/app
git clone <repository-url> igny8
cd igny8
```
**Option B: Copy Files** (if files are already available):
```bash
# Copy application files to /data/app/igny8
# Ensure all files are in place:
# - backend/
# - frontend/
# - docker-compose.yml (infrastructure)
# - docker-compose.app.yml (application)
```
---
### Step 6: Install Infrastructure Stack
#### 6.1 Navigate to Infrastructure Directory
```bash
cd /data/app
# Infrastructure docker-compose.yml should be here
```
#### 6.2 Configure Infrastructure
**Edit `docker-compose.yml`** (if needed):
- Update PostgreSQL credentials
- Update pgAdmin credentials
- Configure Caddy domain names
- Set volume paths
#### 6.3 Start Infrastructure Stack
```bash
# Start infrastructure services
docker compose -f docker-compose.yml -p igny8-infra up -d
# Verify services are running
docker compose -f docker-compose.yml -p igny8-infra ps
# Check logs
docker compose -f docker-compose.yml -p igny8-infra logs -f
```
**Infrastructure Services**:
- PostgreSQL (database)
- Redis (cache/broker)
- pgAdmin (database admin)
- FileBrowser (file management)
- Caddy (reverse proxy)
#### 6.4 Verify Infrastructure
```bash
# Check PostgreSQL
docker exec igny8_postgres pg_isready
# Check Redis
docker exec igny8_redis redis-cli ping
# Check all containers
docker ps | grep igny8
```
---
### Step 7: Build Application Images
#### 7.1 Build Backend Image
```bash
cd /data/app/igny8/backend
# Build backend Docker image
docker build -t igny8-backend:latest -f Dockerfile .
# Verify image
docker images | grep igny8-backend
```
#### 7.2 Build Frontend Images
```bash
cd /data/app/igny8/frontend
# Build main app dev image
docker build -t igny8-frontend-dev:latest -f Dockerfile.dev .
# Build marketing dev image
docker build -t igny8-marketing-dev:latest -f Dockerfile.marketing.dev .
# Verify images
docker images | grep igny8-frontend
docker images | grep igny8-marketing
```
**Note**: For production, also build production images:
```bash
# Production frontend image
docker build -t igny8-frontend:latest -f Dockerfile .
# Production marketing image
docker build -t igny8-marketing:latest -f Dockerfile.marketing .
```
---
### Step 8: Configure Application
#### 8.1 Configure Environment Variables
**Backend Environment** (in `docker-compose.app.yml` or `.env`):
```bash
# Database
DB_HOST=postgres
DB_NAME=igny8_db
DB_USER=igny8
DB_PASSWORD=your_secure_password
# Redis
REDIS_HOST=redis
REDIS_PORT=6379
# Django
SECRET_KEY=your_django_secret_key
DEBUG=False
USE_SECURE_COOKIES=True
USE_SECURE_PROXY_HEADER=True
# JWT Settings (if needed)
JWT_SECRET_KEY=your_jwt_secret_key
```
**Frontend Environment**:
```bash
# In docker-compose.app.yml
VITE_BACKEND_URL=https://api.igny8.com/api
```
#### 8.2 Configure Caddy
**Edit Caddyfile** for domain routing:
- `igny8.com` → Marketing site
- `app.igny8.com` → Main application
- `api.igny8.com` → Backend API
---
### Step 9: Start Application Stack
#### 9.1 Navigate to Application Directory
```bash
cd /data/app/igny8
```
#### 9.2 Start Application Services
```bash
# Start application stack
docker compose -f docker-compose.app.yml -p igny8-app up -d
# Verify services
docker compose -f docker-compose.app.yml -p igny8-app ps
# Check logs
docker compose -f docker-compose.app.yml -p igny8-app logs -f
```
#### 9.3 Verify All Services
```bash
# Check all containers
docker ps
# Check network connectivity
docker network inspect igny8_net
# Test backend health
curl http://localhost:8011/api/v1/system/status/
# Test frontend
curl http://localhost:8021
```
---
### Step 10: Initialize Database
#### 10.1 Run Migrations
```bash
# Execute migrations
docker exec igny8_backend python manage.py migrate
# Create superuser (optional)
docker exec -it igny8_backend python manage.py createsuperuser
```
#### 10.2 Load Initial Data (if needed)
```bash
# Load default plans, industries, etc.
docker exec igny8_backend python manage.py loaddata initial_data.json
```
---
### Step 11: Configure Caddy for HTTPS
#### 11.1 Update Caddyfile
Ensure Caddyfile includes:
- Domain names
- SSL certificate auto-generation
- Reverse proxy rules
#### 11.2 Restart Caddy
```bash
# Restart Caddy container
docker compose -f docker-compose.yml -p igny8-infra restart igny8_caddy
# Check Caddy logs
docker logs igny8_caddy
```
---
### Step 12: Verify Installation
#### 12.1 Check Service Status
```bash
# Infrastructure services
docker compose -f docker-compose.yml -p igny8-infra ps
# Application services
docker compose -f docker-compose.app.yml -p igny8-app ps
# All services should show "Up" status
```
#### 12.2 Test Access
1. **Marketing Site**: `https://igny8.com` (or `http://your-ip:8023` for dev)
2. **Main App**: `https://app.igny8.com` (or `http://your-ip:8021` for dev)
3. **Backend API**: `https://api.igny8.com/api/v1/system/status/`
4. **Portainer**: `http://your-ip:9000`
5. **pgAdmin**: `http://your-ip:5050`
#### 12.3 Check Logs
```bash
# Backend logs
docker logs igny8_backend
# Frontend logs
docker logs igny8_frontend
# Marketing logs
docker logs igny8_marketing_dev
# Check for errors
docker logs igny8_backend 2>&1 | grep -i error
```
---
### Step 13: Post-Installation Configuration
#### 13.1 Configure Integration Settings
1. Access application: `https://app.igny8.com`
2. Sign up or log in
3. Navigate to Settings → Integration
4. Configure:
- OpenAI API key
- Runware API key (optional)
- WordPress credentials (per site)
#### 13.2 Create First Site
1. Navigate to Settings → Sites
2. Create a new site
3. Configure WordPress integration (if needed)
4. Create sectors (1-5 per site)
#### 13.3 Set Up Monitoring (Optional)
- Configure health checks
- Set up log rotation
- Configure backup scripts
- Set up monitoring alerts
---
### Troubleshooting
#### Common Issues
**1. Port Already in Use**:
```bash
# Check what's using the port
sudo lsof -i :8011
sudo lsof -i :8021
# Stop conflicting services or change ports in docker-compose
```
**2. Network Not Found**:
```bash
# Recreate network
docker network rm igny8_net
docker network create igny8_net
# Restart services
docker compose -f docker-compose.app.yml -p igny8-app restart
```
**3. Database Connection Failed**:
```bash
# Check PostgreSQL is running
docker ps | grep postgres
# Check network connectivity
docker exec igny8_backend ping postgres
# Verify credentials in docker-compose
```
**4. Permission Denied**:
```bash
# Fix directory permissions
sudo chown -R $USER:$USER /data/app
sudo chmod -R 755 /data/app
```
**5. Caddy SSL Issues**:
```bash
# Check Caddy logs
docker logs igny8_caddy
# Verify domain DNS points to server
nslookup igny8.com
# Check firewall allows port 80/443
sudo ufw status
```
---
### Maintenance Commands
#### View Logs
```bash
# All services
docker compose -f docker-compose.app.yml -p igny8-app logs -f
# Specific service
docker logs -f igny8_backend
```
#### Restart Services
```bash
# Restart all app services
docker compose -f docker-compose.app.yml -p igny8-app restart
# Restart specific service
docker restart igny8_backend
```
#### Update Application
```bash
# Pull latest code
cd /data/app/igny8
git pull
# Rebuild images
docker build -t igny8-backend:latest -f backend/Dockerfile ./backend
docker build -t igny8-frontend-dev:latest -f frontend/Dockerfile.dev ./frontend
# Restart services
docker compose -f docker-compose.app.yml -p igny8-app up -d
```
#### Backup Database
```bash
# Create backup
docker exec igny8_postgres pg_dump -U igny8 igny8_db > /data/backups/backup_$(date +%Y%m%d_%H%M%S).sql
```
---
### Security Checklist
- [ ] Firewall configured (UFW)
- [ ] SSH key-based authentication enabled
- [ ] Strong passwords for all services
- [ ] Docker socket permissions secured
- [ ] Caddy HTTPS configured
- [ ] Environment variables secured
- [ ] Regular backups scheduled
- [ ] Log rotation configured
- [ ] Monitoring set up
- [ ] Security updates automated
---
### Next Steps
After installation:
1. **Configure Domain**: Update DNS records and Caddy configuration
2. **Set Up Backups**: Configure automated database backups
3. **Monitor Logs**: Set up log aggregation and monitoring
4. **Performance Tuning**: Optimize Docker resources and database
5. **Security Hardening**: Review security settings and access controls
---
## Summary
The complete installation process includes:
1. **Server Setup**: Ubuntu VPS preparation
2. **Docker Installation**: Docker Engine and Docker Compose
3. **Portainer Setup**: Container management UI
4. **Network Creation**: Docker network for services
5. **Infrastructure Stack**: PostgreSQL, Redis, Caddy, etc.
6. **Application Build**: Build Docker images
7. **Application Deployment**: Start application services
8. **Database Initialization**: Run migrations
9. **HTTPS Configuration**: Caddy SSL setup
10. **Verification**: Test all services
This installation guide provides a complete path from a fresh Ubuntu server to a fully operational IGNY8 platform.