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=requireinDATABASE_URL) if the DB is on a different host - Schedule daily
pg_dumpbackups 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.