DEV Community

Sospeter Mong'are
Sospeter Mong'are

Posted on

How to Set Up PostgreSQL for Your Django App on a VPS Server

If you're hosting your first Django API on a server (like Contabo) and you’ve previously used PostgreSQL locally, you’ll need to configure it on your server too. This guide will walk you through installing and configuring PostgreSQL on your VPS and connecting it to your Django app using your .env file.


Prerequisites

  • A running VPS (e.g., from Contabo) with Ubuntu or Debian.
  • Domain/subdomain already set up.
  • Django project already deployed to the server.
  • .env file with your database credentials ready.
  • SSH access to the server.

Step 1: Install PostgreSQL on Your VPS

SSH into your server:

ssh your-user@your-server-ip
Enter fullscreen mode Exit fullscreen mode

Then install PostgreSQL and its dependencies:

sudo apt update
sudo apt install postgresql postgresql-contrib libpq-dev
Enter fullscreen mode Exit fullscreen mode

Step 2: Create PostgreSQL Database and User

Switch to the postgres user:

sudo -u postgres psql
Enter fullscreen mode Exit fullscreen mode

Run the following SQL commands to create a database and user (update placeholders to match your actual values from .env):

CREATE DATABASE mydb_name;
CREATE USER mydb_user WITH PASSWORD 'strongpassword';
ALTER ROLE mydb_user SET client_encoding TO 'utf8';
ALTER ROLE mydb_user SET default_transaction_isolation TO 'read committed';
ALTER ROLE mydb_user SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE mydb_name TO mydb_user;
\q
Enter fullscreen mode Exit fullscreen mode

Step 3: Configure PostgreSQL for Remote Access (Optional)

Only do this if you need to connect to the DB remotely (e.g., from your local machine or external tools).

Update pg_hba.conf:

sudo nano /etc/postgresql/*/main/pg_hba.conf
Enter fullscreen mode Exit fullscreen mode

Add or update the line:

host    all             all             0.0.0.0/0            md5
Enter fullscreen mode Exit fullscreen mode

Update postgresql.conf:

sudo nano /etc/postgresql/*/main/postgresql.conf
Enter fullscreen mode Exit fullscreen mode

Uncomment and edit:

listen_addresses = '*'
Enter fullscreen mode Exit fullscreen mode

Restart PostgreSQL:

sudo systemctl restart postgresql
Enter fullscreen mode Exit fullscreen mode

Step 4: Configure Django to Use PostgreSQL

Update your .env file in the Django project root:

DB_NAME=mydb_name
DB_USER=mydb_user
DB_PASSWORD=strongpassword
DB_HOST=localhost
DB_PORT=5432
Enter fullscreen mode Exit fullscreen mode

Update your settings.py to use os.environ (if not done already):

import os

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.getenv('DB_NAME'),
        'USER': os.getenv('DB_USER'),
        'PASSWORD': os.getenv('DB_PASSWORD'),
        'HOST': os.getenv('DB_HOST'),
        'PORT': os.getenv('DB_PORT', '5432'),
    }
}
Enter fullscreen mode Exit fullscreen mode

Step 5: Install PostgreSQL Client for Django

If you haven’t already installed it:

pip install psycopg2-binary
Enter fullscreen mode Exit fullscreen mode

Step 6: Run Django Migrations

Once the connection is set, apply migrations:

python manage.py makemigrations
python manage.py migrate
Enter fullscreen mode Exit fullscreen mode

You can run the development server to confirm it works:

python manage.py runserver 0.0.0.0:8000
Enter fullscreen mode Exit fullscreen mode

Then visit http://your-server-ip:8000 to confirm everything runs as expected.


Bonus: Secure PostgreSQL (Recommended)

If you're not using external tools to access the DB:

  • Keep DB_HOST=localhost
  • Avoid opening port 5432 to the world (skip remote config steps)

What’s Next?

Once PostgreSQL is working with Django:

  • Set up Gunicorn and Nginx for production deployment if not earlier done.
  • Use HTTPS with Let’s Encrypt.
  • Set up supervisor to keep your Django app running.

Top comments (0)