Skip to content
ohsudo, Home

Tags

#python

Gunicorn
Networking

Nginx and Gunicorn for Django: production config, static files and HTTPS

Deploy Django with Gunicorn behind Nginx: a complete HTTPS config, a socket with systemd, static and media files, the settings you need behind a proxy, and common errors.

Intermediate · 3 min read

FastAPI
Networking

Nginx reverse proxy for FastAPI and Uvicorn, with HTTPS and WebSockets

Run FastAPI behind Nginx: a complete HTTPS config, Uvicorn in a systemd service, proxy headers for the real client IP, a subpath, WebSockets, and common errors.

Intermediate · 3 min read

jwt expired
Security

JWT "jwt expired" and "invalid signature": how to find out what is wrong with a token

Fix JWT "jwt expired" and "invalid signature": read the exp claim, check clock differences, the secret, HS256 vs RS256 and rotated keys, without turning verification off.

Intermediate · 5 min read

error: externally-managed-environment
Linux

pip "error: externally-managed-environment": install Python packages the right way

Fix pip "externally-managed-environment" on Ubuntu 24.04 and Debian 12: use apt, a virtual environment or pipx, and know when --break-system-packages is acceptable.

Beginner · 3 min read