Files
rising-web/DATABASE_SETUP.md
2026-05-26 11:53:33 +00:00

4.8 KiB
Executable File

RisingCompute — PostgreSQL Setup

This is the database side of the RisingCompute site. The Django backend connects to a single PostgreSQL database called risingcompute. Follow these steps on the server (or your dev laptop) before running python manage.py migrate.


1. Install PostgreSQL

Ubuntu / Debian server

sudo apt update
sudo apt install -y postgresql postgresql-contrib
sudo systemctl enable --now postgresql

macOS (development)

brew install postgresql@16
brew services start postgresql@16

Verify

psql --version
# expect: psql (PostgreSQL) 14.x or newer

Use PostgreSQL 14+ — Django 5 supports 13+, but 16 is the recommended LTS as of this build.


2. Create the database and user

Switch to the postgres superuser and open a psql shell:

sudo -u postgres psql

Then, inside psql, paste these four statements (edit the password to something strong):

CREATE USER risingcompute WITH PASSWORD 'change-this-to-a-strong-password';
CREATE DATABASE risingcompute OWNER risingcompute ENCODING 'UTF8';
GRANT ALL PRIVILEGES ON DATABASE risingcompute TO risingcompute;
ALTER USER risingcompute CREATEDB;  -- needed for running tests
\q

The CREATEDB privilege is only needed if you want to run Django's test suite (which creates a throwaway test_risingcompute DB).


3. Allow local TCP connections (server only)

By default, PostgreSQL on Linux only accepts Unix-socket connections from local users. Django connects over TCP, so enable md5 (password) auth on 127.0.0.1.

Edit /etc/postgresql/16/main/pg_hba.conf (adjust the version number) and make sure these two lines exist near the top:

# TYPE  DATABASE        USER            ADDRESS         METHOD
local   all             all                             peer
host    risingcompute   risingcompute   127.0.0.1/32    md5
host    risingcompute   risingcompute   ::1/128         md5

Reload:

sudo systemctl reload postgresql

On macOS via Homebrew, this is already set up — no edit needed.


4. Test the connection

psql -h 127.0.0.1 -U risingcompute -d risingcompute -W
# enter the password you set above
# you should land at: risingcompute=>
\q

If you can connect, the database side is done.


5. Wire it into Django

In backend/.env (copy from backend/.env.example), set:

DATABASE_URL=postgres://risingcompute:your-password-here@127.0.0.1:5432/risingcompute
DJANGO_SECRET_KEY=generate-a-50-char-random-string
DJANGO_DEBUG=False
DJANGO_ALLOWED_HOSTS=risingcompute.in,www.risingcompute.in,localhost,127.0.0.1
CORS_ALLOWED_ORIGINS=https://risingcompute.in,https://www.risingcompute.in,http://localhost:5173

Generate a Django secret key:

python -c "from secrets import token_urlsafe; print(token_urlsafe(50))"

6. Run migrations and create the admin user

From backend/:

python -m venv .venv
source .venv/bin/activate          # Windows: .venv\Scripts\activate
pip install -r requirements.txt

python manage.py migrate
python manage.py createsuperuser
python manage.py runserver 0.0.0.0:8000

Visit http://127.0.0.1:8000/admin/ and sign in. You should see Contact submissions, Newsletter signups, Job applications, Blog posts, and Products (seeded by the data migration).


7. Production checklist

When you deploy to a real server:

  • Set DJANGO_DEBUG=False
  • Generate a fresh DJANGO_SECRET_KEY (do not reuse the dev key)
  • Use a separate Postgres user per environment (staging / prod)
  • Put Django behind Gunicorn + Nginx (or any WSGI host)
  • Enable TLS on the database connection (?sslmode=require in DATABASE_URL) if the DB is on a different host
  • Schedule daily pg_dump backups to object storage
  • Restrict the Postgres port (5432) at the firewall — only the app server should reach it
  • Rotate the database password and the Django secret key on a schedule

8. Backup & restore (one-liners)

Backup:

pg_dump -h 127.0.0.1 -U risingcompute -Fc risingcompute > risingcompute-$(date +%Y%m%d).dump

Restore (into an empty database):

pg_restore -h 127.0.0.1 -U risingcompute -d risingcompute --clean --if-exists risingcompute-YYYYMMDD.dump

9. Common errors

Error Fix
FATAL: password authentication failed Re-check the password in DATABASE_URL; make sure pg_hba.conf uses md5 for the host line.
could not connect to server: Connection refused PostgreSQL isn't running. sudo systemctl status postgresql.
permission denied for schema public (PG 15+) Run as superuser: GRANT ALL ON SCHEMA public TO risingcompute;
relation "..." does not exist You haven't run python manage.py migrate yet.

That's the whole database side. The Django app picks up DATABASE_URL automatically — no other config needed.