Configuration
Grove is configured entirely through environment variables.
| Variable | Default | Purpose |
|---|---|---|
GROVE_DATA_DIR |
./data |
Runtime directory containing grove.db, blobs, and temporary uploads. Docker fixes this to /data. |
GROVE_DATA_PATH |
./data |
Host path mounted at /data by Docker Compose. |
GROVE_UID |
1000 |
Container user ID; should own the host data directory. |
GROVE_GID |
1000 |
Container group ID; should own the host data directory. |
GROVE_BIND_ADDRESS |
127.0.0.1 |
Host interface used by the Docker port mapping. |
GROVE_PORT |
8000 |
Host port mapped to container port 8000. |
GROVE_IMAGE |
safebox-grove:local |
Docker image name. |
GROVE_PUBLIC_URL |
http://127.0.0.1:8000 |
External origin placed in blob descriptors. No path, query, fragment, or credentials. |
GROVE_SERVER_NAME |
Public URL hostname | Optional lowercase hostname used to validate BUD-11 server tags. No scheme or port. |
GROVE_MAX_BLOB_SIZE |
104857600 |
Maximum accepted blob size in bytes. |
GROVE_AUTH_CLOCK_SKEW_SECONDS |
30 |
Permitted future skew for signed authorization timestamps. |
Persistent Docker path
Create a directory owned by the identity used in the container:
sudo install -d \
-o "$(id -u)" \
-g "$(id -g)" \
/mnt/bitcoin/blossom
Then configure:
GROVE_DATA_PATH=/mnt/bitcoin/blossom
GROVE_UID=1000
GROVE_GID=1000
Use the values from id -u and id -g; do not assume they are 1000.
Public deployment example
GROVE_DATA_PATH=/mnt/bitcoin/blossom
GROVE_UID=1000
GROVE_GID=1000
GROVE_BIND_ADDRESS=127.0.0.1
GROVE_PORT=8200
GROVE_PUBLIC_URL=https://blobs.example.com
GROVE_SERVER_NAME=blobs.example.com
GROVE_MAX_BLOB_SIZE=104857600
GROVE_AUTH_CLOCK_SKEW_SECONDS=30
GROVE_PUBLIC_URL determines returned blob URLs. GROVE_SERVER_NAME determines
which server-scoped authorization tokens are accepted. They should describe the
same public service.