
Deploy LubeLogger | (Just Updated) Self-Hosted Vehicle Maintenance & Fuel Tracker, Login Locked From Boot
LubeLogger self-hosted vehicle maintenance and fuel tracker, REST API
lubelogger
Just deployed
/App/data
Deploy and Host LubeLogger on Railway
Built for an LLM agent to deploy and use. The deploy form has no fields to fill: the admin password is generated, sign-in is switched on before the first request, and the REST API takes the same credentials. LubeLogger is a self-hosted vehicle maintenance and fuel mileage tracker: service records, repairs, fuel fills, taxes, reminders and reports for every vehicle you own.
About Hosting LubeLogger
This template runs one service, lubelogger (.NET with a built-in SQLite database), with the database, uploaded documents and the cookie keys on one volume mounted at /App/data. There is no separate database service to run.
Sign-in is on from the first request. Upstream starts with authentication off, so a stock deploy hands your garage records, odometer history and uploaded documents to anyone who finds the URL. This template's image turns authentication on, derives the root user's hashed credentials from ADMIN_PASSWORD at boot and refuses to start if the password is empty. The username is admin; add an ADMIN_USERNAME variable to change it.
What persists. Vehicles, records, reminders and uploaded files live on the volume at /App/data. The ASP.NET cookie-encryption keys live there too, so browser sign-ins also survive a redeploy instead of being logged out each time.
Using the web interface. Open the public URL and sign in as admin with the ADMIN_PASSWORD value from the service variables.
Agent contract
- Public URL:
https://RAILWAY_PUBLIC_DOMAIN(the generated domain of thelubeloggerservice) - Private URL:
http://lubelogger.railway.internal:8080 - Credentials: the variable
ADMIN_PASSWORDon thelubeloggerservice; the username isadmin(add anADMIN_USERNAMEvariable to change it) - Auth: HTTP Basic with
adminand theADMIN_PASSWORDvalue on every/apirequest; without valid credentials every/apiendpoint answers401 - Health:
GET /healthreturns 200 without credentials
# needs: SITE_URL (public https URL of the lubelogger service) and ADMIN_PASSWORD (its variable); also curl, sed
AUTH="admin:$ADMIN_PASSWORD"
curl -s -o /dev/null -w "health: %{http_code}\n" "$SITE_URL/health"
{ curl -s -u "$AUTH" "$SITE_URL/api/whoami"; echo; } | sed -n 's/.*"username":"\([^"]*\)".*"isRoot":"\([^"]*\)".*/user: \1 root: \2/p'
curl -s -o /dev/null -w "read without key: %{http_code}\n" "$SITE_URL/api/vehicles"
curl -s -o /dev/null -w "write without key: %{http_code}\n" -X POST --data-urlencode year=2020 --data-urlencode make=Honda --data-urlencode model=Civic --data-urlencode licensePlate=NOKEY "$SITE_URL/api/vehicles/add"
curl -s -o /dev/null -w "write wrong key: %{http_code}\n" -X POST -u admin:wrong --data-urlencode year=2020 --data-urlencode make=Honda --data-urlencode model=Civic --data-urlencode licensePlate=WRONG "$SITE_URL/api/vehicles/add"
ID=$(curl -s -X POST -u "$AUTH" --data-urlencode year=2020 --data-urlencode make=Honda --data-urlencode model=Civic --data-urlencode licensePlate=AGENT1 "$SITE_URL/api/vehicles/add" | sed -n 's/.*"vehicleId":\([0-9]*\).*/\1/p')
echo "vehicle created: $ID"
{ curl -s -u "$AUTH" "$SITE_URL/api/vehicles"; echo; } | sed -n 's/.*"make":"\([^"]*\)","model":"\([^"]*\)".*/listed: \1 \2/p'
curl -s -o /dev/null -w "vehicle delete: %{http_code}\n" -X DELETE -u "$AUTH" "$SITE_URL/api/vehicles/delete?id=$ID"
A fresh deploy prints health: 200, user: admin root: True, read without key: 401, write without key: 401, write wrong key: 401, a created vehicle id, listed: Honda Civic and vehicle delete: 200.
Why Deploy LubeLogger on Railway?
Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.
By deploying LubeLogger on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.
- Agent-ready - no deployer fields, a contract block and one script that proves the credentials, a write and the refusal without them.
- Locked from boot - authentication is on and the password is generated, instead of upstream's open default.
- Data survives redeploys - the database, documents and cookie keys sit on a volume.
- Pinned - the image is pinned by digest.
- Your vehicle data stays yours - no cloud account, no subscription.
Common Use Cases
- Vehicle maintenance log - oil changes, repairs, upgrades and the receipts for each car, truck or motorcycle.
- Fuel mileage tracking - fill-ups with MPG or L/100km reports and cost per distance.
- Service reminders - reminders by date or odometer for inspections, insurance and tire rotation.
- Agent-driven garage records - an agent adds vehicles and records and reads reports through the REST API.
Dependencies for LubeLogger Hosting
- Nothing else: SQLite runs inside the service on its volume. A custom domain is optional.
Deployment Dependencies
Template Content
lubelogger
ghcr.io/bon5co/lubelogger-railway:1.7.4