Hosting Progressista¶
You can keep Progressista on your laptop or deploy it to a free or low-cost PaaS. Below are options and quickstart notes.
Quick checklist¶
- Containerize with the built-in
uvicornserver (already bundled). - Configure a bearer token via
PROGRESSISTA_API_TOKEN. - Expose ports for both HTTP (
/progress,/tasks,/health) and WebSocket (/ws). - Serve the dashboard (
/static/index.html) behind TLS if the service is public. - Set
PROGRESSISTA_STORAGE_PATHif you want task state to survive restarts.
Persisting state¶
Progressista can snapshot active tasks to disk so they reappear after a crash or
reboot. Point PROGRESSISTA_STORAGE_PATH at a writable location (for example
/var/lib/progressista/state.json or a mounted volume when running in Docker).
When the server restarts it will reload the snapshot, surface unfinished tasks
in the Recovered column, and move them back to Active automatically as
soon as new progress updates arrive. Completed tasks remain available until the
retention policy removes them or you clear them from the dashboard.
Free-tier friendly platforms¶
| Platform | Notes | Steps |
|---|---|---|
| Render (Free Web Service) | Always-on free tier with sleep after inactivity. | 1) Create a new Web Service from your repo. 2) Build Command: pip install . 3) Start Command: progressista serve --host 0.0.0.0 --port 10000. 4) Add environment variables (token, retention, etc.). |
| Railway | Simple deployment with CLI; free credits monthly. | 1) railway up with a Python service. 2) Set PORT env to provided value. 3) Run progressista serve --host 0.0.0.0 --port $PORT. |
| Fly.io | 3 shared-cpu-1x VMs free; global regions. | 1) fly launch --no-deploy. 2) Edit fly.toml to expose internal_port = 8000. 3) Deploy with fly deploy. 4) Add PROGRESSISTA_API_TOKEN via fly secrets set. |
| Deta Space / Deploy | Free micro services, sleeps after inactivity. | Wrap Progressista in a FastAPI project and push via deta deploy. Ensure main:app = progressista.server:create_app. |
| Google Cloud Run (Free tier) | Scales to zero, free 2M requests. | 1) Build container gcloud builds submit. 2) Deploy gcloud run deploy progressista --image ... --allow-unauthenticated. 3) Set env vars with gcloud run services update. |
Any host that supports ASGI/WSGI apps works. You can also run Progressista on a VPS (e.g. Lightsail, Hetzner) with systemd.
Sample Dockerfile¶
FROM python:3.12-slim
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PIP_NO_CACHE_DIR=1
WORKDIR /app
COPY pyproject.toml README.md requirements.txt ./
COPY progressista progressista
RUN pip install --no-cache-dir .
EXPOSE 8000
ENV PROGRESSISTA_HOST=0.0.0.0 \
PROGRESSISTA_PORT=8000
CMD ["progressista", "serve", "--host", "0.0.0.0", "--port", "8000"]
The repository includes this Dockerfile at the project root so you can build
directly with docker build -t progressista .. Mount a volume to supply a
PROGRESSISTA_STORAGE_PATH if you need persistent dashboards.
Deploy the image to your chosen platform and expose port 8000.
Security tips¶
- Set
PROGRESSISTA_API_TOKEN(orPROGRESSISTA_API_TOKENS) so only authorised clients can publish progress or load the dashboard. - Use
PROGRESSISTA_STALE_SECONDSto highlight idle jobs andPROGRESSISTA_MAX_TASK_AGEto purge abandoned entries automatically. - Terminate TLS at the platform or use a CDN/Reverse proxy. All listed hosts provide HTTPS endpoints by default.
- If you run behind nginx/Traefik, forward
Authorizationheaders and the WebSocket upgrade (Connection: Upgrade,Upgrade: websocket).
Using third-party relay services¶
There are no public “progress relay” services compatible with Progressista yet. However, because the protocol is simple JSON-over-HTTP, you can host Progressista on any generic provider and point your clients at that URL. If you need stronger durability or multi-tenant hosting, consider using a managed FastAPI hosting service or extend the code to publish to Redis/pub-sub.