Menu
User

DropVPS Team

Writer: Cooper Reagan

How to install Django on Ubuntu 25.10?

How to install Django on Ubuntu 25.10?

Publication Date

10/23/2025

Category

Articles

Reading Time

4 Min

Table of Contents

Deploying Django on Ubuntu 25.10 is fast when you use a Python virtual environment and pip. The steps below install the latest Django, create a clean project, run the development server, and optionally wire Gunicorn with Nginx for production-grade serving on a VPS or cloud instance.

Refresh Ubuntu 25.10 packages

Pull the newest security and feature updates to keep dependencies consistent.

sudo apt update
sudo apt -y upgrade

Install Python, pip, and venv

Install Python 3, the virtual environment module, and build tools required by many Python wheels.

sudo apt install -y python3 python3-venv python3-pip python3-dev build-essential

Create a project directory and virtual environment

Keep project files isolated and reproducible with a venv scoped to your app.

mkdir -p ~/apps/mydjango
cd ~/apps/mydjango
python3 -m venv .venv
source .venv/bin/activate
python -V
Python 3.x.x

Upgrade pip and install Django

Upgrade the packaging toolchain, then install the latest stable Django. Gunicorn is added for a production-ready WSGI server.

python -m pip install --upgrade pip setuptools wheel
pip install "Django>=5.1,<6" gunicorn

Verify Django is available

Confirm the installation and record the exact version for your notes or CI.

python -m django --version
pip show Django | awk '/Version|Location/'
5.1.x
Version: 5.1.x
Location: /home/ubuntu/apps/mydjango/.venv/lib/python3.x/site-packages

Create a new Django project

Generate a minimal project with manage.py at the repository root for simpler commands.

django-admin startproject config . 
ls -al
.
├── manage.py
└── config
    ├── __init__.py
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

Migrate the database and run the development server

Create the default SQLite schema and start the server bound to all interfaces for testing.

python manage.py migrate
python manage.py runserver 0.0.0.0:8000
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

Open the firewall for port 8000

Allow HTTP traffic to the development server if UFW is enabled.

sudo ufw allow 8000/tcp comment "Django dev"
sudo ufw status

Create a Django superuser (optional)

Access the admin panel at /admin with credentials you set now.

python manage.py createsuperuser

Production option: Gunicorn + Nginx

Serve Django via Gunicorn behind Nginx. Replace ubuntu and paths to match your user and project location. Ensure ALLOWED_HOSTS in config/settings.py includes your domain or server IP.

sudo apt install -y nginx

# Collect static files if you use STATIC_URL/STATIC_ROOT
python manage.py collectstatic --noinput

# Systemd service for Gunicorn (socket-based via UNIX file)
sudo tee /etc/systemd/system/gunicorn-mydjango.service > /dev/null <<'EOF'
[Unit]
Description=gunicorn daemon for mydjango
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/apps/mydjango
Environment="PATH=/home/ubuntu/apps/mydjango/.venv/bin"
ExecStart=/home/ubuntu/apps/mydjango/.venv/bin/gunicorn --workers 2 --bind unix:/run/gunicorn-mydjango.sock config.wsgi:application
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now gunicorn-mydjango
sudo systemctl status gunicorn-mydjango --no-pager
sudo tee /etc/nginx/sites-available/mydjango.conf > /dev/null <<'EOF'
server {
    listen 80;
    server_name _;

    access_log /var/log/nginx/mydjango.access.log;
    error_log  /var/log/nginx/mydjango.error.log;

    location = /favicon.ico { access_log off; log_not_found off; }

    location /static/ {
        alias /home/ubuntu/apps/mydjango/static/;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn-mydjango.sock;
    }
}
EOF

sudo ln -s /etc/nginx/sites-available/mydjango.conf /etc/nginx/sites-enabled/ || true
sudo nginx -t
sudo systemctl reload nginx

If you see 502 errors, check permissions on the socket, verify Gunicorn is running, and review Nginx and Gunicorn logs. That’s it: Django runs on Ubuntu 25.10 with a clean venv, and production can be enabled via Gunicorn and Nginx. For more reading, guidance, purchasing various servers, and support, you can use dropvps. For more guides, visit dropvps.com

Linux VPS
U
Loading...

Related Posts