A Docker Compose setup for running SHKeeper with Firo (FIRO) including Spark address support.
This repo provides a missing firod node that is missing from the SHKeeper documentation — there is no published firo-shkeeper Docker image and the Helm chart assumes you run a bundled firod version.
This setup allows you to connect SHKeeper to an existing firod node and includes a working CoinMarketCap rate source, since FIRO is missing from the exchanges supported by SHKeeper's built-in rate sources.
- FIRO and FIRO-SPARK (Lelantus Spark) payment support
- Connects to an existing
firodnode via RPC - CryptoCompare rate source (no API key required)
- CoinMarketCap as an alternative (free tier API key or higher required)
- Persistent SHKeeper database
- Compatible with SHKeeper
2.5.13+
- Docker and Docker Compose
- A fully synced
firodnode accessible via RPC - A
SHKEEPER_BACKEND_KEYfor webhook authentication - A CoinMarketCap API key (if preferred as a rate source)
git clone https://github.com/nexusocean/firo-shkeeper.git
cd firo-shkeepercp .env.example .env
nano .envFill in your values — see .env.example for all required variables.
docker compose build
docker compose up -d
docker compose logs -fOn first start, firod will rescan the blockchain to initialize the shkeeper wallet. This takes a about few hours - 1 day depending on chain height. Monitor progress with:
docker compose logs -f firodSHKeeper is available at http://localhost:5000 by default. Change add the default credentials after being prompted for the password at first login. You will then have the options for encrypting your wallet as well as adding 2fa (both recommended).
In the SHKeeper dashboard, go to Rates and set the rate source for both FIRO and FIRO-SPARK. Two rate sources are included:
cryptocompare— no API key requiredcoinmarketcap— requires a CoinMarketCap API key, free within limits
FIRO is not supported by built-in rate sources.
If you want to expose SHKeeper via HTTPS, configure nginx to proxy 127.0.0.1:5000. Example nginx config:
server {
listen 443 ssl;
server_name your.domain.com;
ssl_certificate /etc/letsencrypt/live/your.domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your.domain.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
}| Variable | Description |
|---|---|
RPC_USER |
firod RPC username |
RPC_PASSWORD |
firod RPC password |
SHKEEPER_BACKEND_KEY |
Secret key for walletnotify callbacks |
CMC_API_KEY |
CoinMarketCap API key (optional, but required if using coinmarketcap) |
SHKeeper exposes a REST API for creating payment requests.
- Example:
curl -X POST https://your.domain.com/api/v1/FIRO/payment_request \
-H "X-Shkeeper-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"external_id": "order-123",
"fiat": "USD",
"amount": 10.00,
"callback_url": "https://your-backend.com/webhook/firo"
}'- Response:
{
"amount":"11.0841631",
"display_name":"Firo",
"exchange_rate":"0.9021880959",
"id":1,
"recalculate_after":0,
"status":"success",
"wallet":"aM2y6nhTc8RWZEU23soypwM4wGKSGoeP2m"
}Use FIRO-SPARK instead of FIRO for Spark addresses.
- The
vsyshost/shkeeper:latestDocker image is outdated (March 2023) and does not include FIRO support. Pin to2.5.13or later. - FIRO is not supported by SHKeeper's built-in rate sources. Two working rate sources are included:
cryptocompare.py(no API key needed) andcoinmarketcap.py(API key required). - The
Dockerfilewrapsfiroorg/firod:latestto addcurland thewalletnotifyscript required by SHKeeper. - If you already have a
firodnode running, point the compose file at it and skip the bundled node, but the required RPC port for SHKeeper is 8332.