# Paste on the server where you want apex serve to run.
# Replace the APCA_* placeholders with your Alpaca API keys.
export APCA_API_KEY_ID=PK_REPLACE_ME
export APCA_API_SECRET_KEY=REPLACE_ME
# Optional: live trading uses https://api.alpaca.markets
# export APCA_API_BASE_URL=https://paper-api.alpaca.markets
docker run --rm \
-e APCA_API_KEY_ID -e APCA_API_SECRET_KEY -e APCA_API_BASE_URL \
-p 8080:8080 \
ghcr.io/thefusionfoundry/apex:latest serve \
--register wss://relay.apex.fusion.dev/v1/engine \
--register-token eyJ...# After cloud-init / ssh root@<ip>:
apt-get update && apt-get install -y docker.io
systemctl enable --now docker
mkdir -p /opt/apex && cd /opt/apex
# Persist the engine's SQLite chain across container restarts.
docker run -d --name apex --restart=always \
-e APCA_API_KEY_ID -e APCA_API_SECRET_KEY \
-v /opt/apex/data:/data \
-p 8080:8080 \
ghcr.io/thefusionfoundry/apex:latest serve \
--register wss://relay.apex.fusion.dev/v1/engine \
--register-token <YOUR_JWT> \
--storage /data
docker logs -f apex# /opt/apex/docker-compose.yml
services:
apex:
image: ghcr.io/thefusionfoundry/apex:latest
restart: always
command: >
serve
--register wss://relay.apex.fusion.dev/v1/engine
--register-token ${APEX_REGISTRATION_TOKEN}
--storage /data
environment:
APCA_API_KEY_ID: ${APCA_API_KEY_ID}
APCA_API_SECRET_KEY: ${APCA_API_SECRET_KEY}
volumes:
- ./data:/data
ports:
- "8080:8080"# /etc/systemd/system/apex.service
[Unit]
Description=Apex trading engine
After=docker.service
Requires=docker.service
[Service]
Restart=always
EnvironmentFile=/etc/apex/env
ExecStart=/usr/bin/docker run --rm --name apex \
-e APCA_API_KEY_ID -e APCA_API_SECRET_KEY \
-v /var/lib/apex:/data \
-p 8080:8080 \
ghcr.io/thefusionfoundry/apex:latest serve \
--register wss://relay.apex.fusion.dev/v1/engine \
--register-token ${APEX_REGISTRATION_TOKEN} \
--storage /data
ExecStop=/usr/bin/docker stop apex
[Install]
WantedBy=multi-user.target<!-- ~/Library/LaunchAgents/dev.fusion.apex.plist -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key><string>dev.fusion.apex</string>
<key>RunAtLoad</key><true/>
<key>KeepAlive</key><true/>
<key>EnvironmentVariables</key>
<dict>
<key>APCA_API_KEY_ID</key><string>PK_REPLACE_ME</string>
<key>APCA_API_SECRET_KEY</key><string>REPLACE_ME</string>
<key>APEX_REGISTRATION_TOKEN</key><string>eyJ...</string>
</dict>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/docker</string>
<string>run</string><string>--rm</string><string>--name</string><string>apex</string>
<string>-e</string><string>APCA_API_KEY_ID</string>
<string>-e</string><string>APCA_API_SECRET_KEY</string>
<string>-v</string><string>/Users/Shared/apex:/data</string>
<string>-p</string><string>8080:8080</string>
<string>ghcr.io/thefusionfoundry/apex:latest</string>
<string>serve</string>
<string>--register</string><string>wss://relay.apex.fusion.dev/v1/engine</string>
<string>--register-token</string><string>$(APEX_REGISTRATION_TOKEN)</string>
<string>--storage</string><string>/data</string>
</array>
</dict>
</plist>docker logs apex 2>&1 | tail -20