botserver/docs/src/chapter-01/installation.md

374 lines
No EOL
9 KiB
Markdown

# Installation
BotServer installs itself automatically through the bootstrap process. No manual setup required - just run the binary and everything gets configured.
## Bootstrap Flow Diagram
<img src="./assets/bootstrap-process.svg" alt="Auto-Bootstrap Process" style="max-height: 400px; width: 100%; object-fit: contain;">
## System Requirements
### Minimum Requirements
- **OS**: Linux, macOS, or Windows
- **RAM**: 4GB minimum
- **Disk**: 10GB for installation + data storage
- **CPU**: 1 core (sufficient for development/testing)
### Recommended for Production
- **OS**: Linux server (Ubuntu/Debian preferred)
- **RAM**: 16GB or more
- **Disk**: 100GB SSD storage
- **CPU**: 2+ cores
- **GPU**: RTX 3060 or better (12GB VRAM minimum) for local LLM hosting
## Quick Start
BotServer handles all dependencies automatically:
```bash
# Download and run
./botserver
```
The bootstrap process automatically downloads everything to `botserver-stack/`:
- PostgreSQL database
- Drive (S3-compatible object storage)
- Valkey cache
- LLM server and models
- All required dependencies
**No manual installation required!**
## Environment Variables
The `.env` file is **automatically generated** during bootstrap from a blank environment with secure random credentials.
### Automatic Generation (Bootstrap Mode)
When you first run `./botserver`, it creates `.env` with:
```bash
# Auto-generated secure credentials
DATABASE_URL=postgres://gbuser:RANDOM_PASS@localhost:5432/botserver
DRIVE_SERVER=http://localhost:9000
DRIVE_ACCESSKEY=GENERATED_KEY
DRIVE_SECRET=GENERATED_SECRET
```
### Using Existing Services
If you already have PostgreSQL or drive storage running, you can point to them:
```bash
# Point to your existing PostgreSQL
DATABASE_URL=postgres://myuser:mypass@myhost:5432/mydb
# Point to your existing drive/S3
DRIVE_SERVER=http://my-drive:9000
DRIVE_ACCESSKEY=my-access-key
DRIVE_SECRET=my-secret-key
```
## Configuration
### Bot Configuration Parameters
Each bot has a `config.csv` file in its `.gbot/` directory. Available parameters:
#### Server Configuration
```csv
name,value
server-host,0.0.0.0
server-port,8080
sites-root,/tmp
```
#### LLM Configuration
```csv
name,value
llm-key,none
llm-url,http://localhost:8081
llm-model,../../../../data/llm/model.gguf
llm-cache,false # Semantic cache (needs integration)
llm-cache-ttl,3600 # Cache TTL in seconds (needs integration)
llm-cache-semantic,true # Enable semantic matching (needs integration)
llm-cache-threshold,0.95 # Similarity threshold (needs integration)
```
#### LLM Server Settings
```csv
name,value
llm-server,false
llm-server-path,botserver-stack/bin/llm/build/bin
llm-server-host,0.0.0.0
llm-server-port,8081
llm-server-gpu-layers,0
llm-server-n-moe,0
llm-server-ctx-size,4096
llm-server-n-predict,1024
llm-server-parallel,6
llm-server-cont-batching,true
```
#### Email Configuration
```csv
name,value
email-from,from@domain.com
email-server,mail.domain.com
email-port,587
email-user,user@domain.com
email-pass,yourpassword
```
#### Theme Configuration
```csv
name,value
theme-color1,#0d2b55
theme-color2,#fff9c2
theme-title,My Bot
theme-logo,https://example.com/logo.svg
```
#### Prompt Configuration
```csv
name,value
prompt-history,2
prompt-compact,4
```
## Bootstrap Process
When you first run BotServer, it:
1. **Detects your system** - Identifies OS and architecture
2. **Creates directories** - Sets up `botserver-stack/` structure
3. **Downloads components** - Gets all required binaries
4. **Configures services** - Sets up database, storage, and cache
5. **Initializes database** - Creates tables and initial data
6. **Deploys default bot** - Creates a working bot instance
7. **Starts services** - Launches all components
This typically takes 2-5 minutes on first run.
## Storage Setup
BotServer uses S3-compatible object storage. Each bot deployment creates a new bucket in the drive:
```bash
# Deploy a new bot = create a new bucket in drive
# Bots are stored in the object storage, not local filesystem
mybot.gbai → creates 'mybot' bucket in drive storage
```
**Note**: The `work/` folder is for internal use only and should not be used for bot deployment. Bot packages should be deployed directly to the object storage (drive).
The storage server runs on:
- API: http://localhost:9000
- Console: http://localhost:9001
### Local Development with S3 Sync Tools
You can edit your bot files locally and have them automatically sync to drive storage using S3-compatible tools:
#### Free S3 Sync Tools
- **Cyberduck** (Windows/Mac/Linux) - GUI file browser with S3 support
- **WinSCP** (Windows) - File manager with S3 protocol support
- **Mountain Duck** (Windows/Mac) - Mount S3 as local drive
- **S3 Browser** (Windows) - Freeware S3 client
- **CloudBerry Explorer** (Windows/Mac) - Free version available
- **rclone** (All platforms) - Command-line sync tool
#### Setup Example with rclone
```bash
# Configure rclone for drive storage
rclone config
# Choose: n) New remote
# Name: drive
# Storage: s3
# Provider: Other
# Access Key: (from .env DRIVE_ACCESSKEY)
# Secret Key: (from .env DRIVE_SECRET)
# Endpoint: http://localhost:9000
# Sync local folder to bucket (watches for changes)
rclone sync ./mybot.gbai drive:mybot --watch
# Now edit files locally:
# - Edit mybot.gbai/mybot.gbot/config.csv → Bot reloads automatically
# - Edit mybot.gbai/mybot.gbdialog/*.bas → Scripts compile automatically
# - Add docs to mybot.gbai/mybot.gbkb/ → Knowledge base updates automatically
```
With this setup:
- ✅ Edit `.csv` files → Bot configuration updates instantly
- ✅ Edit `.bas` files → BASIC scripts compile automatically
- ✅ Add documents → Knowledge base reindexes automatically
- ✅ No manual uploads needed
- ✅ Works like local development but uses object storage
## Database Setup
PostgreSQL is automatically configured with:
- Database: `botserver`
- User: `gbuser`
- Tables created via migrations
- Connection pooling enabled
## Authentication Setup
BotServer uses an external directory service for user management:
- Handles user authentication
- Manages OAuth2/OIDC flows
- Controls access permissions
- Integrates with existing identity providers
## LLM Setup
### Local LLM (Recommended)
The bootstrap downloads a default model to `botserver-stack/data/llm/`. Configure in `config.csv`:
```csv
name,value
llm-url,http://localhost:8081
llm-model,../../../../data/llm/model.gguf
llm-server-gpu-layers,0
```
For GPU acceleration (RTX 3060 or better):
```csv
name,value
llm-server-gpu-layers,35
```
### External LLM Provider
To use external APIs, configure in `config.csv`:
```csv
name,value
llm-url,https://api.provider.com/v1
llm-key,your-api-key
llm-model,model-name
```
## Container Deployment (LXC)
For production isolation using Linux containers:
```bash
# Create container
lxc-create -n botserver -t download -- -d ubuntu -r jammy -a amd64
# Start container
lxc-start -n botserver
# Attach to container
lxc-attach -n botserver
# Install BotServer inside container
./botserver
```
## Verifying Installation
### Check Component Status
```bash
# Check all services
botserver status
# Test database connection
psql $DATABASE_URL -c "SELECT version();"
# Test storage
curl http://localhost:9000/health/live
# Test LLM
curl http://localhost:8081/v1/models
```
### Run Test Bot
```bash
# The default bot is automatically deployed to the drive during bootstrap
# Access UI interface
open http://localhost:8080
```
To deploy additional bots, upload them to the object storage, not the local filesystem. The `work/` folder is reserved for internal operations.
## Troubleshooting
### Database Connection Issues
```bash
# Check if PostgreSQL is running
ps aux | grep postgres
# Test connection
psql -h localhost -U gbuser -d botserver
# Verify DATABASE_URL
echo $DATABASE_URL
```
### Storage Connection Issues
```bash
# Check drive process
ps aux | grep minio
# Test storage access
curl -I $DRIVE_SERVER/health/live
```
### Port Conflicts
Default ports used:
| Service | Port | Configure in |
|---------|------|--------------|
| UI Server | 8080 | config.csv: `server-port` |
| PostgreSQL | 5432 | DATABASE_URL |
| Drive API | 9000 | DRIVE_SERVER |
| Drive Console | 9001 | N/A |
| LLM Server | 8081 | config.csv: `llm-server-port` |
| Embedding Server | 8082 | config.csv: `embedding-url` |
| Valkey Cache | 6379 | Internal |
### Memory Issues
For systems with limited RAM:
1. Reduce LLM context size:
```csv
llm-server-ctx-size,2048
```
2. Limit parallel processing:
```csv
llm-server-parallel,2
```
3. Use quantized models (Q3_K_M or Q4_K_M)
4. For Mixture of Experts models, adjust CPU MoE threads:
```csv
llm-server-n-moe,4
```
### GPU Issues
If GPU is not detected:
1. Check CUDA installation (NVIDIA)
2. Verify GPU memory (12GB minimum)
3. Set `llm-server-gpu-layers` to 0 for CPU-only mode
## Next Steps
- [Quick Start Guide](./quick-start.md) - Create your first bot
- [First Conversation](./first-conversation.md) - Test your bot
- [Configuration Reference](../chapter-02/gbot.md) - All configuration options
- [BASIC Programming](../chapter-05/basics.md) - Learn the scripting language