Deploy with Podman
Full guide for deploying TimeNow using Podman Compose.
Architecture
┌─────────────────────────────────────────────────────────┐
│ podman-compose network: timenow_default │
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ frontend │ │ backend │ │
│ │ (Node.js) │───▶│ (Scala/Play)│ │
│ │ port 3000 │ │ port 8090 │ │
│ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────┘
Starting the Stack
# Full stack (frontend + backend)
podman-compose up --build
# Backend only
podman-compose up --build backend
# Detached (background)
podman-compose up -d --build
Stopping
Profiles
The podman-compose.yml supports two profiles:
| Profile | Services | Use case |
|---|---|---|
full (default) | frontend + backend | Development, full feature set |
iot | backend only | Embedded / resource-constrained |
Viewing Logs
# All services
podman-compose logs -f
# Backend only
podman-compose logs -f backend
# Last 100 lines
podman-compose logs --tail=100 backend
Rebuilding After Code Changes
# Rebuild and restart a single service
podman-compose up --build backend
# Full rebuild from scratch (clears layer cache)
podman-compose build --no-cache
podman-compose up
Health Checks
Both services expose health endpoints:
Troubleshooting
Port already in use
If port 8090 is taken, override in podman-compose.yml or set BACKEND_PORT environment variable.
Slow first build
The Scala backend downloads ~200 MB of sbt dependencies on first build. These are cached in the container layer — subsequent builds are fast.
Rootless Podman on Linux
Rootless Podman may require slirp4netns or pasta for networking. Install with: sudo apt install slirp4netns (Ubuntu/Debian).