Get a structured logging server running on your machine in minutes. Docker required.
Docker & Docker Compose
Install from docker.com
Git
To clone the stack repository
git clone https://github.com/brainz-lab/stack.git
cd stack
cp .env.example .env
The defaults work for local development. No changes needed.
Run the setup script to generate all required keys:
./scripts/setup.sh
This starts Recall along with its dependencies (PostgreSQL, Redis):
docker-compose up -d recall timescaledb redis traefik
Tip:
To run the full stack (all services), use ./scripts/start.sh
For subdomain routing, add to /etc/hosts:
127.0.0.1 recall.localhost
Once Recall is running, send a test log from your Rails app.
gem 'brainzlab'
# config/initializers/brainzlab.rb
BrainzLab.configure do |config|
config.recall_url = "http://recall.localhost"
config.recall_api_key = "your_ingest_key_from_env"
end
# Anywhere in your Rails app
BrainzLab::Recall.info("User signed up", user_id: 123, plan: "pro")
BrainzLab::Recall.warn("Rate limit approaching", current: 95, max: 100)
BrainzLab::Recall.error("Payment failed", order_id: 456, reason: "card_declined")
Find your ingest key:
Check the RECALL_INGEST_KEY in your .env file after running setup.
docker-compose logs -f recall
Stream Recall's application logs in real-time.
docker-compose down
Stop and remove all running containers.
docker-compose restart recall
Restart just the Recall service.
curl http://localhost:3001/up
Verify Recall is healthy and responding.
./scripts/reset.sh
Stop services, remove volumes, start fresh.
Something else is using the port. Find and stop it:
lsof -i :3001
kill -9 <PID>
Make sure TimescaleDB is healthy:
docker-compose ps timescaledb
docker-compose logs timescaledb
Check if the container has errors:
docker-compose logs recall
Now that Recall is running, explore more.
Questions? Issues? Let us know.