feat: add Presenton AI presentation generator with Azure OpenAI integration

Deployed Presenton (AI-powered presentation generator) to production infrastructure.

Features:
- AI-generated presentations from text prompts and documents
- Azure OpenAI GPT-5 for text generation
- Azure OpenAI DALL-E 3 for image generation
- Export to PPTX and PDF formats
- Custom template support with HTML/Tailwind CSS
- Privacy-focused (local data processing)

Infrastructure:
- Container: ghcr.io/presenton/presenton:latest
- Domain: presentation.ai-impress.com
- SSL: Automatic via Traefik + Cloudflare DNS
- Network: traefik-public
- Resources: 1-2 CPU cores, 1-2GB RAM

Configuration:
- LLM: Azure OpenAI Custom endpoint (GPT-5)
- Images: Azure DALL-E 3
- API keys managed via .env (not committed)
- UI key management enabled (CAN_CHANGE_KEYS=true)

Services started:
- Nginx (port 80) - reverse proxy
- Next.js (port 3000) - frontend
- FastAPI (port 8000) - backend API
- MCP Server (port 8001) - Model Context Protocol

Location: /opt/02-core/presenton/

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
SamoilenkoVadym 2025-11-05 23:03:18 +00:00
parent b052b91f9b
commit 117de92709
2 changed files with 280 additions and 0 deletions

View file

@ -0,0 +1,248 @@
# Presenton - AI Presentation Generator
AI-powered presentation generator with Azure OpenAI integration.
## Overview
**Presenton** is an open-source AI presentation generator that creates professional presentations from prompts, documents, or existing PowerPoint files. Privacy-focused alternative to Gamma, Beautiful.ai, and Decktopus.
- **URL:** https://presentation.ai-impress.com
- **Repository:** https://github.com/presenton/presenton
- **AI Provider:** Azure OpenAI (GPT-5 + DALL-E 3)
## Features
- AI-generated presentations from text prompts
- Document upload support (PDF, DOCX, PPTX)
- Custom template creation (HTML + Tailwind CSS)
- Export to PPTX and PDF formats
- Model Context Protocol (MCP) server support
- Local data processing (privacy-focused)
## Architecture
```
presenton/
├── docker-compose.yml # Container configuration with Traefik
├── .env # Azure OpenAI credentials
├── README.md # This file
└── app_data/ # Persistent storage (auto-created)
├── presentations/ # Generated presentations
├── templates/ # Custom templates
└── uploads/ # Uploaded documents
```
## Technology Stack
**Frontend:**
- Next.js (React)
- Node.js 20
- Port: 3000 (internal)
**Backend:**
- FastAPI (Python 3.11)
- Port: 8000 (internal)
**Additional Services:**
- MCP Server (Port: 8001)
- Nginx (Port: 80 - exposed via Traefik)
**AI Integration:**
- Azure OpenAI GPT-5 (text generation)
- Azure OpenAI DALL-E 3 (image generation)
## Configuration
### Environment Variables (.env)
**LLM Configuration:**
- `LLM=custom` - Use custom Azure OpenAI endpoint
- `CUSTOM_LLM_URL` - Azure OpenAI chat completions URL
- `CUSTOM_LLM_API_KEY` - Azure API key
- `CUSTOM_MODEL=gpt-5` - Model name
- `TOOL_CALLS=true` - Enable function calling
**Image Generation:**
- `IMAGE_PROVIDER=dall-e-3` - Use DALL-E 3 for images
- `OPENAI_API_KEY` - Azure DALL-E API key
**Advanced Features:**
- `CAN_CHANGE_KEYS=true` - Allow API key changes in UI
- `EXTENDED_REASONING=true` - Enable for GPT-5
- `DISABLE_ANONYMOUS_TELEMETRY=true` - Privacy
### Traefik Integration
Presenton is configured to work with Traefik reverse proxy:
- **Domain:** presentation.ai-impress.com
- **SSL:** Automatic via Let's Encrypt (Cloudflare DNS)
- **Network:** traefik-public
## Usage
### Start the service
```bash
cd /opt/02-core/presenton
docker compose up -d
```
### View logs
```bash
docker logs presenton -f
```
### Stop the service
```bash
docker compose down
```
### Restart the service
```bash
docker compose restart
```
### Update to latest version
```bash
docker compose pull
docker compose up -d
```
## API Access
**API Documentation:**
- Swagger UI: https://presentation.ai-impress.com/api/v1/docs
- OpenAPI spec: https://presentation.ai-impress.com/api/v1/openapi.json
**Generate Presentation Endpoint:**
```bash
POST /api/v1/ppt/presentation/generate
```
**Example Request:**
```bash
curl -X POST "https://presentation.ai-impress.com/api/v1/ppt/presentation/generate" \
-H "Content-Type: application/json" \
-d '{
"content": "Create a presentation about AI trends in 2025",
"slide_count": 10,
"language": "en",
"tone": "professional",
"export_format": "pptx"
}'
```
## Troubleshooting
### Container won't start
Check logs for errors:
```bash
docker logs presenton --tail 100
```
Check if Traefik network exists:
```bash
docker network ls | grep traefik-public
```
### Azure OpenAI connection issues
Verify environment variables:
```bash
docker exec presenton env | grep -E "LLM|CUSTOM|OPENAI"
```
Test Azure OpenAI endpoint:
```bash
curl -X POST "https://aipmress-ai-n8n.cognitiveservices.azure.com/openai/deployments/gpt-5/chat/completions?api-version=2025-01-01-preview" \
-H "Content-Type: application/json" \
-H "api-key: YOUR_API_KEY" \
-d '{"messages":[{"role":"user","content":"Hello"}]}'
```
### DALL-E image generation not working
Azure DALL-E uses a different API format than OpenAI. If images fail to generate:
1. Check logs: `docker logs presenton | grep -i "dall-e"`
2. Verify DALL-E endpoint is accessible
3. Consider using Pexels as alternative (free stock photos)
To switch to Pexels:
```bash
# Edit .env
IMAGE_PROVIDER=pexels
PEXELS_API_KEY=your_pexels_key # Get free at https://www.pexels.com/api/
```
### Performance issues
Increase container resources in docker-compose.yml:
```yaml
deploy:
resources:
limits:
cpus: '4'
memory: 4G
```
## Maintenance
### Backup presentations
```bash
# Create backup
tar -czf presenton-backup-$(date +%Y%m%d).tar.gz app_data/
# Restore from backup
tar -xzf presenton-backup-YYYYMMDD.tar.gz
```
### Clear cache and temp files
```bash
docker exec presenton sh -c "rm -rf /tmp/*"
```
### Monitor disk usage
```bash
du -sh app_data/
```
## Security
- API keys stored in .env (excluded from Git)
- SSL/HTTPS via Traefik with Let's Encrypt
- Local data processing (no cloud uploads)
- API key changes allowed via UI (can be locked with `CAN_CHANGE_KEYS=false`)
## Resources
- **CPU:** 1-2 cores (recommended)
- **RAM:** 1-2 GB
- **Disk:** ~1 GB (image) + presentations storage
## Links
- **Official Docs:** https://github.com/presenton/presenton
- **Issue Tracker:** https://github.com/presenton/presenton/issues
- **Docker Hub:** ghcr.io/presenton/presenton
## Support
For issues specific to this deployment:
- Check container logs: `docker logs presenton`
- Review Traefik logs: `docker logs traefik`
- Contact: AI-Impress Infrastructure Team
---
**Last Updated:** 2025-11-05
**Version:** latest
**Deployment:** Production

View file

@ -0,0 +1,32 @@
version: '3.8'
services:
presenton:
image: ghcr.io/presenton/presenton:latest
container_name: presenton
restart: unless-stopped
networks:
- traefik-public
env_file:
- .env
volumes:
- ./app_data:/app_data
deploy:
resources:
limits:
cpus: '2'
memory: 2G
reservations:
cpus: '1'
memory: 512M
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik-public"
- "traefik.http.routers.presenton.rule=Host(`presentation.ai-impress.com`)"
- "traefik.http.routers.presenton.entrypoints=websecure"
- "traefik.http.routers.presenton.tls.certresolver=cloudflare"
- "traefik.http.services.presenton.loadbalancer.server.port=80"
networks:
traefik-public:
external: true