Static IP guide
Connecting to Postgres with a static IP from a Python app on Render
Because Render services are ordinary long-running processes, the Fixie-Wrench sidecar pattern fits Python cleanly: the tunnel and your app share a container, and psycopg2 or Django connect to 127.0.0.1:5432 with no knowledge of the proxy. The allowlisted database sees only Fixie's fixed pair of IPs.
Recommended setup
Use Fixie Socks proxy for Postgres connections to a database that only accepts traffic from approved IP addresses. Store the proxy value in FIXIE_SOCKS_HOST, then configure Python to route outbound traffic through Fixie before connecting to Postgres.
Set up Fixie on Render
Create a Fixie Socks proxy in the Fixie dashboard. Copy the proxy value into Render Environment Variables as FIXIE_SOCKS_HOST, and copy the outbound IPs into the destination allowlist.
Implementation
The example below shows the core application-side change. Keep credentials in environment variables and avoid committing proxy, database, or API secrets.
Forward a local port to Postgres through Fixie Socks
Good to know
- Set the start command to launch both processes:
./bin/fixie-wrench 5432:postgres.example.com:5432 & gunicorn app:server. - Add the Fixie-Wrench install one-liner to your build command so the binary is present at runtime.
Allowlist and test the static IPs
- Open the Fixie dashboard and copy the outbound IP addresses for this proxy.
- Add both IPs to the Postgres firewall or security group.
- Deploy the updated Python app on Render.
- Run a small connection test before sending production traffic.
Related guides
- Making API requests with a static IP from a Python app on Render
- Connecting to Postgres with a static IP from a Python app on Heroku
- Connecting to Postgres with a static IP from a Node app on Render
Related docs
- Python implementation examples
- Render setup documentation
- Postgres connection guide
- Fixie-Wrench for TCP forwarding
Is this guide useful?