Last updated: 2026-01-24
Type: Operations Guide
Audience: DevOps, system administrators
Webscout can be deployed in multiple ways:
- Docker — Containerized deployment (recommended)
- Docker Compose — Multi-service orchestration
- OpenAI-Compatible API Server — Local HTTP API
- Bare Metal — Direct Python installation
- Docker Setup
- Docker Compose
- OpenAI-Compatible API Server
- Environment Configuration
- Production Considerations
- Troubleshooting
# Latest version
docker pull oevortex/webscout:latest
# Specific version
docker pull oevortex/webscout:2024.12.01
# Latest slim version (smaller)
docker pull oevortex/webscout:slim# Interactive mode
docker run -it oevortex/webscout:latest
# With API key mounted
docker run -it \
-e OPENAI_API_KEY="your-api-key" \
oevortex/webscout:latest
# With port forwarding (for API server)
docker run -it \
-p 8000:8000 \
-e OPENAI_API_KEY="your-api-key" \
oevortex/webscout:latest \
webscout-serverFROM oevortex/webscout:latest
# Add custom requirements
RUN pip install additional-package
# Set default command
CMD ["webscout", "--help"]# Build
docker build -t my-webscout .
# Run
docker run -it my-webscoutCreate docker-compose.yml:
version: '3.8'
services:
webscout:
image: oevortex/webscout:latest
container_name: webscout-app
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- GROQ_API_KEY=${GROQ_API_KEY}
volumes:
- ./data:/app/data
ports:
- "8000:8000"
stdin_open: true
tty: true
webscout-server:
image: oevortex/webscout:latest
container_name: webscout-api
command: webscout-server --host 0.0.0.0 --port 8001
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- GROQ_API_KEY=${GROQ_API_KEY}
ports:
- "8001:8001"
depends_on:
- webscout# Create .env file with your API keys
cat > .env << EOF
OPENAI_API_KEY=your-api-key-here
GROQ_API_KEY=your-groq-key-here
EOF
# Start services
docker-compose up -d
# View logs
docker-compose logs -f webscout-server
# Stop services
docker-compose downservices:
webscout-server:
image: oevortex/webscout:latest
command: >
webscout-server
--host 0.0.0.0
--port 8001
--api-key gsk_webscout_prod_12345
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
ports:
- "8001:8001"Runs a FastAPI server that proxies any Webscout provider through OpenAI-compatible endpoints.
Your App → webscout-server (OpenAI API) → Any Webscout Provider
# Simple start
webscout-server
# With custom host/port
webscout-server --host 0.0.0.0 --port 8001
# With debug mode
webscout-server --debug
# With API key requirement
webscout-server --api-key your-secret-keyCreate webscout_config.json:
{
"default_provider": "GROQ",
"providers": {
"GROQ": {
"api_key": "${GROQ_API_KEY}",
"model": "llama-3.1-70b-versatile"
},
"OpenAI": {
"api_key": "${OPENAI_API_KEY}",
"model": "gpt-4"
}
}
}from openai import OpenAI
# Point to your Webscout server
client = OpenAI(
api_key="any-key-or-gsk_...",
base_url="http://localhost:8000/v1"
)
# Use exactly like OpenAI
response = client.chat.completions.create(
model="GROQ",
messages=[
{"role": "user", "content": "Hello"}
]
)
print(response.choices[0].message.content)curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR-API-KEY" \
-d '{
"model": "GROQ",
"messages": [
{"role": "user", "content": "Hello"}
]
}'curl http://localhost:8000/v1/models \
-H "Authorization: Bearer YOUR-API-KEY"curl http://localhost:8000/healthSet environment variables:
# Linux/macOS
export OPENAI_API_KEY="sk-..."
export GROQ_API_KEY="gsk_..."
export COHERE_API_KEY="..."
# Windows PowerShell
$env:OPENAI_API_KEY = "sk-..."
$env:GROQ_API_KEY = "gsk_..."
# Windows CMD
set OPENAI_API_KEY=sk-...Create .env:
# AI Provider Keys
OPENAI_API_KEY=sk-your-openai-key
GROQ_API_KEY=gsk_your-groq-key
COHERE_API_KEY=co_your-cohere-key
GEMINI_API_KEY=your-gemini-key
# Server Configuration
WEBSCOUT_HOST=0.0.0.0
WEBSCOUT_PORT=8000
WEBSCOUT_DEBUG=false
# Timeout settings
REQUEST_TIMEOUT=30
STREAM_TIMEOUT=120Load with:
# Shell
set -a
source .env
set +a
# Or in Python
from dotenv import load_dotenv
load_dotenv()Create webscout.yaml:
server:
host: 0.0.0.0
port: 8000
debug: false
workers: 4
timeout: 30
providers:
GROQ:
api_key: ${GROQ_API_KEY}
model: llama-3.1-70b-versatile
timeout: 60
OpenAI:
api_key: ${OPENAI_API_KEY}
model: gpt-4
timeout: 30
logging:
level: INFO
format: json# With self-signed certificate
openssl req -x509 -newkey rsa:4096 \
-keyout key.pem -out cert.pem -days 365 -nodes
# Use with nginx reverse proxy
nginx# Never commit secrets
echo ".env" >> .gitignore
# Use secure secret management
# - Kubernetes Secrets
# - AWS Secrets Manager
# - HashiCorp Vault
# - Docker Secrets# In nginx config
limit_req_zone $binary_remote_addr zone=webscout:10m rate=10r/s;
server {
location / {
limit_req zone=webscout burst=20 nodelay;
proxy_pass http://webscout:8000;
}
}# Docker
docker run --healthcheck=CMD curl -f http://localhost:8000/health
# Kubernetes
livenessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 10
periodSeconds: 10import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)# Prometheus metrics endpoint
curl http://localhost:8000/metricsfrom functools import lru_cache
@lru_cache(maxsize=100)
def get_provider_instance(provider_name: str):
return initialize_provider(provider_name)from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
session = requests.Session()
retry_strategy = Retry(
total=3,
backoff_factor=1,
status_forcelist=[429, 500, 502, 503, 504],
)
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("https://", adapter)# docker-compose with multiple instances
services:
webscout-1:
image: oevortex/webscout:latest
ports:
- "8001:8000"
webscout-2:
image: oevortex/webscout:latest
ports:
- "8002:8000"
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.confapiVersion: apps/v1
kind: Deployment
metadata:
name: webscout-deployment
spec:
replicas: 3
selector:
matchLabels:
app: webscout
template:
metadata:
labels:
app: webscout
spec:
containers:
- name: webscout
image: oevortex/webscout:latest
ports:
- containerPort: 8000
env:
- name: GROQ_API_KEY
valueFrom:
secretKeyRef:
name: webscout-secrets
key: groq-api-key
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"# Check if server is running
docker ps | grep webscout
# Check logs
docker logs webscout-api
# Verify port is open
netstat -tulpn | grep 8000
# Test locally
curl http://localhost:8000/health# Verify environment variables are set
echo $GROQ_API_KEY
echo $OPENAI_API_KEY
# Check in Docker
docker exec webscout-api env | grep -i api
# Set in docker-compose
environment:
- GROQ_API_KEY=${GROQ_API_KEY}# Monitor container memory
docker stats webscout-api
# Limit memory in docker-compose
services:
webscout:
mem_limit: 1g# Generate self-signed certificate
openssl req -x509 -nodes -days 365 \
-newkey rsa:2048 \
-keyout /etc/nginx/ssl/private.key \
-out /etc/nginx/ssl/certificate.crt
# Use with proper nginx config- API keys configured securely
- HTTPS/SSL enabled
- Health checks working
- Logging configured
- Monitoring in place
- Backups configured
- Rate limiting enabled
- Firewall rules set
- Documentation updated
- Test deployment first