Hoe installeer je een Python bot op een AWS EC2 instance?
Je Python trading bot draait perfect op je laptop, maar nu wil je hem 24/7 laten draaien zonder dat je MacBook oververhit. Je hebt een AWS EC2 instance nodig.
Een virtuele computer in de cloud die nooit slaapt. In deze handleiding bouwen we een stabiele omgeving voor je bot, vanaf nul tot aan de eerste live tick. Pak een kop koffie, we gaan aan tafel zitten en installeren samen.
Wat je nodig hebt voordat je begint
Voordat we op de knoppen drukken, zorgen we dat alle materiaal klaar staat. Niets is vervelender dan halverwege een foutmelding krijgen omdat je één ding bent vergeten.
- Een AWS account met een creditcard. Een nieuwe account geeft je vaak 12 maanden gratis EC2 gebruik (t2.micro of t3.micro, 1 GB RAM).
- Een Python bot die je lokaal al draait. Denk aan een bot die via de CCXT-bibliotheek handelt op Binance of Bybit, of een bot die met de Interactive Brokers TWS API werkt.
- Een broker API-sleutel en secret. Bijvoorbeeld van Binance (API Key, Secret Key) of IBKR (gebruikersnaam, wachtwoord, accountnummer).
- Een veilige plek voor je secrets. Gebruik geen losse bestanden in je repo. Denk aan AWS Secrets Manager of een lokale .env die je niet commit.
- Ongeveer 60 tot 90 minuten tijd voor de eerste keer.
Reken op ongeveer €0,01 tot €0,03 per uur voor een t3.micro instance in regio Frankfurt (eu-central-1). Zet de instance na testen even uit om kosten te beheersen.
Stap 1: Maak en configureer je EC2 instance
Log in op je AWS Console en open de EC2 dashboard. Kies “Launch Instance”. We gaan voor Ubuntu 22.04 LTS, een stabiele basis voor Python bots.
- Naam: geef een duidelijke naam, bijvoorbeeld “trading-bot-prod”.
- AMI: zoek “Ubuntu Server 22.04 LTS (HVM)”.
- Instance type: kies t3.micro (gratis tier) of t3.small (1 vCPU, 2 GB RAM) voor een bot met meerdere strategieën.
- Key pair: maak een nieuwe key pair aan (RSA, .pem). Download het bestand direct en bewaar het veilig (bijvoorbeeld in ~/.ssh/). Geef chmod 600.
- Network: kies een security group die alleen SSH opent (poort 22). Voeg later je IP toe voor extra veiligheid.
- Storage: kies 8 tot 20 GB gp3. Een backtesting bot heeft niet veel ruimte nodig, maar logs groeien.
- Launch: klik op “Launch instance”.
Veelgemaakte fouten: een te groot instance type kiezen (kostbaar), je key pair niet opslaan (lastig herstellen), of poort 22 openzetten voor 0.0.0.0/0. Beperk altijd tot je eigen IP. Tijd: ongeveer 5 tot 10 minuten.
Stap 2: Verbind via SSH en update de omgeving
Zodra de instance draait, kopieer het openbare IP-adres uit het EC2 dashboard.
Open je terminal en verbind: ssh -i ~/.ssh/je-key.pem ubuntu@<JOUW_IP>
Als je de fout “Permission denied (publickey)” krijgt, check of je het juiste key-bestand gebruikt en of je de chmod 600 hebt uitgevoerd. Veelgemaakte fouten: vergeten de firewall aan te zetten, of geen tijdzone instellen (verstoort log timestamps). Tijd: 5 tot 10 minuten.
- Update de pakketten:
sudo apt update && sudo apt upgrade -y - Installeer basis tools:
sudo apt install -y git curl ufw fail2ban - Firewall aan:
sudo ufw allow OpenSSHensudo ufw enable - Controleer tijdzone:
sudo timedatectl set-timezone Europe/Amsterdam
Stap 3: Python, virtual environment en dependencies
Wij installeren Python 3.10 of 3.11, een virtual environment en de packages die je bot nodig heeft. Veelgemaakte fouten: TA-Lib compileerfouten omdat build-tools ontbreken (installeer gcc en make).
- Installeer Python en pip:
sudo apt install -y python3.10 python3-pip python3.10-venv - Maak een projectmap:
mkdir ~/trading-bot && cd ~/trading-bot - Maak een virtual environment:
python3.10 -m venv venv - Activeer het environment:
source venv/bin/activate - Upgrade pip:
pip install --upgrade pip - Installeer een voorbeeldstack voor trading bots:
- CCXT voor exchange API’s:
pip install ccxt - Pandas en numpy voor data:
pip install pandas numpy - TA-Lib voor technische analyse:
pip install TA-Lib(let op: vereist systeemlib, zie hieronder) - Logboeken:
pip install structlog - Backtesting:
pip install backtestingof vectorbt - Webhooks/async:
pip install aiohttp
- CCXT voor exchange API’s:
- Installeer TA-Lib systeemlib (indien nodig):
wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gztar -xzf ta-lib-0.4.0-src.tar.gz && cd ta-lib./configure --prefix=/usr && make && sudo make install- Terug naar je map en opnieuw
pip install TA-Lib
Vergeet niet je environment te activeren voor elke nieuwe sessie. Tijd: 10 tot 15 minuten.
Stap 4: Je bot klonen, configureren en secrets beheren
Haal je botcode op en zet je configuratie netjes neer. Beveilig je serververbinding met SSH keys en gebruik geen harde API-sleutels in je code.
- Kloon je repository:
git clone https://github.com/jouw-username/je-trading-bot.git - Installeer je requirements:
pip install -r requirements.txt - Maak een .env bestand voor je secrets:
- EXCHANGE_API_KEY=jouw_key
- EXCHANGE_SECRET=je_secret
- BROKER_USER=je_ibkr_user
- BROKER_PASSWORD=je_ibkr_wachtwoord
- RISK_MAX_POSITION_SIZE=0.05
- RISK_MAX_DAILY_LOSS=100
- Gebruik python-dotenv om te laden:
pip install python-dotenven laad in je bot met:from dotenv import load_dotenv load_dotenv() - Voor extra veiligheid: zet secrets in AWS Secrets Manager en haal ze op via boto3. Maak een IAM-rol voor je EC2 instance met read-rechten op het secret.
Veelgemaakte fouten: .env commiten naar git, of per ongeluk je API-sleutels in logs printen. Gebruik logfilters en print nooit secrets. Tijd: 10 tot 15 minuten.
Stap 5: Uitvoeren als service en monitoren
Je bot moet blijven draaien, ook als je terminal dichtgaat. Je kunt hiervoor een tmux sessie opzetten of een systemd service maken.
- Maak een bestand:
sudo nano /etc/systemd/system/trading-bot.service - Plak deze basisconfig (pas paden en user aan):
[Unit] Description=Trading Bot Service After=network.target [Service] Type=simple User=ubuntu WorkingDirectory=/home/ubuntu/trading-bot Environment=PATH=/home/ubuntu/trading-bot/venv/bin ExecStart=/home/ubuntu/trading-bot/venv/bin/python /home/ubuntu/trading-bot/bot.py Restart=always RestartSec=60 [Install] WantedBy=multi-user.target - Activeer de service:
sudo systemctl daemon-reload && sudo systemctl enable trading-bot - Start de bot:
sudo systemctl start trading-bot - Bekijk logs:
sudo journalctl -u trading-bot -foftail -f bot.logals je bot naar een logbestand schrijft.
Veelgemaakte fouten: verkeerde paden in ExecStart, of de service niet herladen. Check altijd de status: sudo systemctl status trading-bot. Tijd: 5 tot 10 minuten.
Stap 6: Risicomanagement, backtesting en veiligheid
Een bot draaien is één, veilig en met controle draaien is twee.
- Risk limieten: zet een max position size (bijvoorbeeld 5% van je equity), een daily stop-loss (bijvoorbeeld €100), en een max open trades (bijvoorbeeld 3).
- Backtesting: draai je strategie lokaal met historische data voor je bot live gaat. Gebruik een script dat dezelfde entry/exit logica gebruikt als je live bot.
- Broker API: voor IBKR check of je TWS of Gateway draait, of gebruik de IBKR Cloud API. Voor Binance/Bybit: zet “Enable Reading” en “Enable Spot & Margin Trading” aan, maar vermijd “Enable Withdrawals”.
- Logging: log elke order met timestamp, symbool, kant (buy/sell), size, prijs, en order_id. Gebruik structlog of JSON-logs voor makkelijke analyse.
- Monitoring: zet CloudWatch alarmen voor CPU, geheugen en disk. Stuur een e-mail of Slack-bericht als iets misgaat.
Zet harde limieten en monitor elke actie. Veelgemaakte fouten: te agressieve risicolimieten die je bot blokkeren, of vergeten logs te rotaten (schijf vol). Tijd: 15 tot 20 minuten.
Verificatie-checklist
Voordat je de bot volledig live zet, loop deze lijst af. Zo voorkom je verrassingen.
- Instance draait en is bereikbaar via SSH met je key.
- Firewall staat aan en alleen je IP mag naar poort 22.
- Python environment is geactiveerd en dependencies zijn geïnstalleerd.
- API-sleutels staan in .env of Secrets Manager en staan niet in de code.
- Bot start handmatig en logt netjes naar een bestand of CloudWatch.
- Systemd service draait en herstart automatisch bij een crash.
- Backtests zijn gedraaid en resultaten zien er stabiel uit.
- Risk limieten zijn geconfigureerd (max size, daily loss, max trades).
- CloudWatch alarmen staan aan voor CPU, geheugen, en disk.
- Een plan voor updates: hoe update je de bot zonder downtime (bijvoorbeeld via een tweede instance en een load balancer, of een korte onderhoudspauze).
Als je alle items kunt afvinken, draait je bot veilig en betrouwbaar op AWS. Door te kiezen voor Docker voor maximale stabiliteit, geniet je van de rust die een robuuste omgeving geeft, en hou je tijd over voor wat telt: je strategie verbeteren.
