Een AI-agent is zelden een enkel proces. Er is de agent-lus zelf, een vectoropslag voor geheugen, een cache, meestal een database voor status, en misschien een klein dashboard. Elk daarvan met de hand draaien — ze starten, herstarten na een reboot, onthouden welke poort welke is — wordt snel vervelend. Docker Compose beschrijft het hele geval in één bestand en draait het met één commando. Dit is de copy-paste-stack om een agent netjes op een VPS te zetten.
Wil je alleen de deploy-zonder-Docker-versie, dan behandelt de gids een AI-agent 24/7 draaien in plaats daarvan systemd. Deze pagina is de container-native versie.
De stack
Een typische zelf-gehoste agent wil vier dingen naast zich: het agent-proces, Qdrant (vectorgeheugen), Redis (cache / queues) en Postgres (status). Hier is een docker-compose.yml die dat allemaal draait, met interne diensten weg van het openbare internet:
# /opt/agent/docker-compose.yml
services:
agent:
build: . # your agent image (or image: your/agent:latest)
restart: unless-stopped
env_file: [.env] # OPENAI/ANTHROPIC keys etc. — never in this file
environment:
QDRANT_URL: http://qdrant:6333
REDIS_URL: redis://redis:6379
DATABASE_URL: postgres://agent:${DB_PASSWORD}@postgres:5432/agent
depends_on: [qdrant, redis, postgres]
# no ports: — this agent only makes outbound calls. Publish one only if it serves webhooks.
qdrant:
image: qdrant/qdrant:latest
restart: unless-stopped
volumes: ["qdrant:/qdrant/storage"] # internal only — not published
redis:
image: redis:7-alpine
restart: unless-stopped
command: ["redis-server", "--save", "60", "1"]
volumes: ["redis:/data"]
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: agent
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: agent
volumes: ["pg:/var/lib/postgresql/data"]
volumes: { qdrant: {}, redis: {}, pg: {} }
Secrets leven in .env, niet in het compose-bestand:
# /opt/agent/.env (chmod 600, never committed)
ANTHROPIC_API_KEY=sk-ant-...
DB_PASSWORD=a-long-random-string
Breng hem omhoog:
apt update && apt install -y docker.io docker-compose-v2
systemctl enable --now docker
cd /opt/agent && docker compose up -d
docker compose logs -f agent
Elke interne dienst (Qdrant, Redis, Postgres) is alleen op het compose-netwerk bereikbaar via de dienstnaam — geen ervan is gepubliceerd op het internet. De agent praat met ze over dat privénetwerk, en niets op die poorten kijkt naar de wereld.
De details die ertoe doen
restart: unless-stoppedop elke dienst — dat overleeft een reboot of crash. Schakel Docker in bij het opstarten en de hele stack komt vanzelf terug.- Sleutels in
.env, niet in YAML. Verwijs ernaar als env-variabelen; houd.envopchmod 600en uit git. Een gelekt compose-bestand met een geldige sleutel is de klassieke fout. - Publiceer niets wat niet hoeft. Een agent die alleen model-API's en zijn eigen diensten aanroept heeft helemaal geen inkomende poort nodig — dus een NAT-plan werkt. Voeg alleen een dedicated IP toe als hij webhooks of een dashboard bedient.
- Dimensioneer op geheugen, niet op cores. API-gebaseerde agents zijn licht. Als Qdrants index groot wordt of je een lokaal model toevoegt, dan schaal je op — zie high-memory-VPS voor agents.
Het deel dat echt van ons is: de agent kan zijn eigen machine bouwen
Omdat EQVPS een MCP-server biedt, kan een agent die deze stack draait zelf een andere schone VPS provisioneren — hem bestellen, root krijgen, afbreken — betaald vanuit een prepaid crypto-saldo. Een compose-stack die een verse sandbox nodig heeft kan er een opstarten zonder mens in de lus.
Waarom EQVPS voor een gedockeriseerde agent
- Schone images, root in ~60 seconden. Ubuntu/Debian;
docker compose upen de stack draait. - Geen KYC, betalen in crypto. E-mail om te registreren, USDC/USDT om te betalen — niets bindt de machine aan je identiteit.
- NVMe + ongemeten 1 Gbit/s, EU (Duitsland/Finland). Images trekken en logs versturen levert geen verrassingsrekening op.
VPS voor AI-agents (het overzicht) → · VPS voor Docker → · Een vector-DB voor agentgeheugen hosten →
Reacties
Nog geen reacties. Wees de eerste.