Uvicorn workers behind Caddy on an ARM VM — async APIs, WebSockets and background tasks that never sleep. Built for Ampere A1 (arm64), listens on port 8000, and starts with uvicorn app.main:app --host 0.0.0.0 --port 8000.
FROM python:3.12-slim
WORKDIR /app
ENV PYTHONUNBUFFERED=1
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt "uvicorn[standard]"
COPY . .
EXPOSE 8000
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "2"]uvloop and httptools both ship aarch64 wheels, so the standard extras install cleanly on Ampere. Long-lived WebSocket connections are the big win over serverless: nothing terminates the process between requests.
Cheaploy builds this image on your own Oracle Always Free VM, opens the ports, issues HTTPS and rolls back if health checks fail.