En AI-agent er sjældent en enkelt proces. Der er selve agentloopet, et vektorlager til hukommelse, en cache, som regel en database til tilstand, og måske et lille dashboard. At køre hver af dem i hånden — starte dem, genstarte dem efter et reboot, huske hvilken port er hvilken — bliver hurtigt trættende. Docker Compose beskriver det hele i én fil og kører det med én kommando. Dette er copy-paste-stakken til at sætte en agent på en VPS på den ryddelige måde.
Vil du kun have deploy-uden-Docker-versionen, dækker guiden kør en AI-agent 24/7 systemd i stedet. Denne side er den container-native version.
Stakken
En typisk selv-hostet agent vil have fire ting ved sin side: agentprocessen, Qdrant (vektorhukommelse), Redis (cache / køer) og Postgres (tilstand). Her er en docker-compose.yml, der kører det hele, med interne tjenester holdt væk fra det offentlige 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: {} }
Hemmeligheder bor i .env, ikke i compose-filen:
# /opt/agent/.env (chmod 600, never committed)
ANTHROPIC_API_KEY=sk-ant-...
DB_PASSWORD=a-long-random-string
Kør den op:
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
Hver intern tjeneste (Qdrant, Redis, Postgres) er kun nåbar på compose-netværket via tjenestenavnet — ingen af dem er udgivet til internettet. Agenten taler med dem over det private netværk, og intet på de porte vender mod verden.
Detaljerne, der betyder noget
restart: unless-stoppedpå hver tjeneste — det er det, der overlever et reboot eller nedbrud. Aktivér Docker ved boot, og hele stakken kommer tilbage af sig selv.- Nøgler i
.env, ikke i YAML. Referér dem som env-variabler; hold.envpåchmod 600og uden for git. En lækket compose-fil med en gyldig nøgle er den klassiske fejl. - Udgiv intet, du ikke skal. En agent, der kun kalder model-API'er og sine egne tjenester, behøver slet ingen indgående port — så et NAT-plan virker. Tilføj kun en dedikeret IP, hvis den betjener webhooks eller et dashboard.
- Dimensionér efter hukommelse, ikke kerner. API-baserede agenter er lette. Når Qdrants indeks vokser, eller du tilføjer en lokal model, er det da, du går op — se højhukommelses-VPS til agenter.
Delen, der faktisk er vores: agenten kan bygge sin egen maskine
Fordi EQVPS udstiller en MCP-server, kan en agent, der kører denne stak, selv tilvejebringe endnu en ren VPS — bestille den, få root, rive den ned — betalt fra en forudbetalt krypto-saldo. En compose-stak, der har brug for en frisk sandkasse, kan køre en op uden et menneske i loopet.
Hvorfor EQVPS til en Dockeriseret agent
- Rene images, root på ~60 sekunder. Ubuntu/Debian;
docker compose upog stakken kører. - Ingen KYC, betaling i krypto. E-mail for at registrere, USDC/USDT for at betale — intet knytter maskinen til din identitet.
- NVMe + umålt 1 Gbit/s, EU (Tyskland/Finland). At trække images og sende logs giver ingen overraskelsesregning.
VPS til AI-agenter (oversigten) → · VPS til Docker → · Host en vektor-DB til agenthukommelse →
Kommentarer
Ingen kommentarer endnu. Vær den første.