Logo

dev-resources.site

for different kinds of informations.

Exposing Your Django Project to the Internet Using Ngrok

Published at
1/3/2025
Categories
python
django
webdev
backend
Author
davythedev
Categories
4 categories in total
python
open
django
open
webdev
open
backend
open
Author
10 person written this
davythedev
open
Exposing Your Django Project to the Internet Using Ngrok

Have you ever encountered this error while developing in Django?

You're accessing the development server over HTTPS, but it only supports HTTP.
Enter fullscreen mode Exit fullscreen mode

If you're used to accessing your development server via http://localhost:8000, this error can be frustrating - especially after updating firewall rules that enforce HTTPS connections. Instead of reverting security settings, there's a better solution: Ngrok.

What is Ngrok?

Ngrok is a powerful tool that exposes local applications to the internet without complex network configurations like port forwarding or DNS setup. Read more about ngrok in their official documentation.

Prerequisites

Before we begin, ensure you have:

  • A Django project setup
  • Python 3.x installed
  • A virtual environment configured
  • An ngrok account (free tier works fine)

Step-by-Step Setup

1. Install the pyngrok Package

Before we install anything, activate your virtual environment then install the Python wrapper for ngrok:

pip install pyngrok
pip freeze > requirements.txt
Enter fullscreen mode Exit fullscreen mode

2. Configure Django Settings

Add ngrok's domain to your allowed hosts list in your project's settings.py:

# settings.py
ALLOWED_HOSTS = ['localhost', '127.0.0.1', '.ngrok-free.app']
Enter fullscreen mode Exit fullscreen mode

This allows Django to accept requests from ngrok's dynamic URLs (*.ngrok-free.app). Django will not generate any errors even though we can't predict the random string part of the URL.

3. Start Your Django Server

In your project's root directory:

python manage.py runserver
Enter fullscreen mode Exit fullscreen mode

Note: Windows users can use py manage.py runserver

4. Authenticate and Start Ngrok

  • Sign up at ngrok.com
  • Copy your authentication token from your dashboard
  • In a new terminal window, authenticate ngrok:
ngrok config add-authtoken YOUR_TOKEN_HERE
Enter fullscreen mode Exit fullscreen mode

Start the tunnel:

ngrok http 8000
Enter fullscreen mode Exit fullscreen mode

Ensure that the ngrok and Django server ports are the same. The default port usually is 8000.

You should see output similar to:


Account                       Your Name (Plan: Free)
Version                       3.19.0
Region                       United States (us)
Latency                      Your Latency
Web Interface                An Unsecure HTTP address
Forwarding                   https://[random-id].ngrok-free.app -> http://localhost:8000
Enter fullscreen mode Exit fullscreen mode

5. Testing Your Setup

Access your Django application using only the HTTPS URL provided by ngrok on your console window. It will look similar to the following:

https://[random-id].ngrok-free.app
Enter fullscreen mode Exit fullscreen mode

Other Use Cases for ngrok

Ngrok isn't just for solving HTTPS issues. It's valuable for:

  • Quick Internet Exposure: Share your local development work instantly
  • Webhook Testing: Test integrations that require public URLs
  • Client Previews: Let clients preview work without deployment
  • Cross-Device Testing: Test your app on multiple devices easily

Troubleshooting Tips

  • Check if your ngrok authentication token is properly configured
  • Verify that your Django server is running before starting ngrok
  • Monitor the ngrok interface for request logs and errors

Related Resources

Want to learn more about web development? Check out my other articles:

Thanks for your time and happy coding! Share your projects in the comments section.

django Article's
30 articles in total
Favicon
A Guide to Planning Your API: Code-First VS Design-First Approach
Favicon
Using React as Static Files in a Django Application: Step-by-Step Guide
Favicon
Struggling with Custom Styles in Django_ckeditor_5: My Solution
Favicon
The Core of FastAPI: A Deep Dive into Starlette 🌟🌟🌟
Favicon
Static sites FTW
Favicon
Master Django Admin: A Beginner’s Guide to Managing Your Projects
Favicon
Creating Open Graph Images in Django for Improved Social Media Sharing
Favicon
Not able to connect to PostgreSQL server on Fedora
Favicon
How to upgrade the Python version in a virtual environment
Favicon
Creating a To-do app with HTMX and Django, part 9: active search
Favicon
Learn Django REST Framework Authentication: A Complete Step-by-Step Python Guide
Favicon
Using CSRF Protection with Django and AJAX Requests
Favicon
Introduction to Django Authentication: Understanding the Core Components and Benefits
Favicon
Get Done ✅ : A step-by-step guide in building a Django To Do List
Favicon
Stremlining Development with Daytona
Favicon
npx life@2024 preview: How Missing Flights, Finding Love, and Building Svelte Apps Changed Everything
Favicon
Struggling with Django's HTTPS development server issues? I have written a simple guide to expose your Django project securely using ngrok.
Favicon
Containerizing a Django Web Application: Serving Static Pages with Docker
Favicon
Exposing Your Django Project to the Internet Using Ngrok
Favicon
Django: Find Nearby Users with Coordinates and Radius
Favicon
Integrate Sentry into your Django project
Favicon
Django Authentication Made Easy: A Complete Guide to Registration, Login, and User Management
Favicon
Schedule a call with Twilio and Django
Favicon
What is the Architecture of Django?
Favicon
What is the difference between the extends and include tag in django?
Favicon
Implémentation de vérification de numéro de téléphone dans un projet drf
Favicon
Integrate React into Django Seamlessly with the reactify-django CLI
Favicon
Handling Unmanaged Models in Pytest-Django
Favicon
Mastering Try-Except Blocks in Django: Simplified Python Error Handling
Favicon
Serverless or Server for Django Apps?

Featured ones: