- Add environment variable configuration for backend and frontend - Backend: DB_POOL_SIZE, JWT_EXPIRE_HOURS, timeout configs, directory paths - Frontend: VITE_API_BASE_URL, VITE_UPLOAD_TIMEOUT, Whisper configs - Create deployment script (scripts/deploy-backend.sh) - Create 1Panel deployment guide (docs/1panel-deployment.md) - Update DEPLOYMENT.md with env var documentation - Create README.md with project overview - Remove obsolete PRD.md, SDD.md, TDD.md (replaced by OpenSpec) - Keep CORS allow_origins=["*"] for Electron EXE distribution 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
5.1 KiB
5.1 KiB
Meeting Assistant Deployment Guide
Prerequisites
- Python 3.10+
- Node.js 18+
- MySQL 8.0+
- Access to Dify LLM service
Quick Start
Use the startup script to run all services locally:
# Check environment
./start.sh check
# Start all services
./start.sh start
# Stop all services
./start.sh stop
# View status
./start.sh status
Backend Deployment
1. Setup Environment
cd backend
# Create virtual environment
python -m venv venv
source venv/bin/activate # Linux/Mac
# or: venv\Scripts\activate # Windows
# Install dependencies
pip install -r requirements.txt
2. Configure Environment Variables
# Copy example and edit
cp .env.example .env
Required Environment Variables:
| Variable | Description |
|---|---|
BACKEND_HOST |
Server bind address (default: 0.0.0.0) |
BACKEND_PORT |
Server port (default: 8000) |
DB_HOST, DB_PORT, DB_USER, DB_PASS, DB_NAME |
MySQL connection |
AUTH_API_URL |
Company authentication API |
DIFY_API_URL, DIFY_API_KEY, DIFY_STT_API_KEY |
Dify API settings |
ADMIN_EMAIL |
Admin user email |
JWT_SECRET |
JWT signing secret (generate secure random string) |
Optional Environment Variables:
| Variable | Description | Default |
|---|---|---|
DB_POOL_SIZE |
Database connection pool size | 5 |
JWT_EXPIRE_HOURS |
JWT token expiration | 24 |
UPLOAD_TIMEOUT |
File upload timeout (ms) | 600000 |
DIFY_STT_TIMEOUT |
STT processing timeout (ms) | 300000 |
LLM_TIMEOUT |
LLM request timeout (ms) | 120000 |
MAX_FILE_SIZE |
Max upload size (bytes) | 524288000 |
See backend/.env.example for complete documentation.
3. Run Server
# Development
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
# Production
uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4
4. Verify Deployment
curl http://localhost:8000/api/health
# Should return: {"status":"healthy","service":"meeting-assistant"}
5. Production Deployment (1Panel)
For detailed server deployment instructions including Nginx, systemd, and SSL configuration, see:
Or use the deployment script:
sudo ./scripts/deploy-backend.sh install --port 8000
Electron Client Deployment
1. Setup
cd client
# Install dependencies
npm install
2. Configure Environment
# Copy example and edit
cp .env.example .env
Environment Variables:
| Variable | Description | Default |
|---|---|---|
VITE_API_BASE_URL |
Backend API URL | http://localhost:8000/api |
VITE_UPLOAD_TIMEOUT |
Upload timeout (ms) | 600000 |
WHISPER_MODEL |
Whisper model size | medium |
WHISPER_DEVICE |
Execution device | cpu |
WHISPER_COMPUTE |
Compute precision | int8 |
3. Development
npm start
4. Build for Distribution
# Update VITE_API_BASE_URL to production server first
# Then build portable executable
npm run build
The executable will be in client/dist/.
Transcription Sidecar
1. Setup
cd sidecar
# Create virtual environment
python -m venv venv
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
pip install pyinstaller
2. Download Whisper Model
The model will be downloaded automatically on first run. For faster startup, pre-download:
from faster_whisper import WhisperModel
model = WhisperModel("medium", device="cpu", compute_type="int8")
3. Build Executable
python build.py
The executable will be in sidecar/dist/transcriber.
4. Package with Electron
Copy sidecar/dist/ to client/sidecar/ before building Electron app.
Database Setup
The backend will automatically create tables on first startup. To manually verify:
USE your_database;
SHOW TABLES LIKE 'meeting_%';
Expected tables:
meeting_usersmeeting_recordsmeeting_conclusionsmeeting_action_items
Testing
Backend Tests
cd backend
pytest tests/ -v
Performance Verification
On target hardware (i5/8GB):
- Start the Electron app
- Record 1 minute of audio
- Verify transcription completes within acceptable time
- Test AI summarization with the transcript
Troubleshooting
Database Connection Issues
- Verify MySQL is accessible from server
- Check firewall rules for database port
- Verify credentials in .env
Dify API Issues
- Verify API key is valid
- Check Dify service status
- Review timeout settings for long transcripts (adjust
DIFY_STT_TIMEOUT,LLM_TIMEOUT)
Transcription Issues
- Verify microphone permissions
- Check sidecar executable runs standalone
- Review audio format (16kHz, 16-bit, mono)
- Try different
WHISPER_MODELsizes (tiny, base, small, medium)
Security Notes
- Never commit
.envfiles to version control - Keep JWT_SECRET secure and unique per deployment
- Ensure HTTPS in production (see 1panel-deployment.md)
- Regular security updates for dependencies