adding details
This commit is contained in:
166
DATABASE_SETUP.md
Normal file
166
DATABASE_SETUP.md
Normal file
@@ -0,0 +1,166 @@
|
||||
# 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
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install -y postgresql postgresql-contrib
|
||||
sudo systemctl enable --now postgresql
|
||||
```
|
||||
|
||||
### macOS (development)
|
||||
```bash
|
||||
brew install postgresql@16
|
||||
brew services start postgresql@16
|
||||
```
|
||||
|
||||
### Verify
|
||||
```bash
|
||||
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:
|
||||
|
||||
```bash
|
||||
sudo -u postgres psql
|
||||
```
|
||||
|
||||
Then, inside `psql`, paste these four statements (edit the password to something strong):
|
||||
|
||||
```sql
|
||||
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:
|
||||
|
||||
```bash
|
||||
sudo systemctl reload postgresql
|
||||
```
|
||||
|
||||
On macOS via Homebrew, this is already set up — no edit needed.
|
||||
|
||||
---
|
||||
|
||||
## 4. Test the connection
|
||||
|
||||
```bash
|
||||
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:
|
||||
|
||||
```bash
|
||||
python -c "from secrets import token_urlsafe; print(token_urlsafe(50))"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. Run migrations and create the admin user
|
||||
|
||||
From `backend/`:
|
||||
|
||||
```bash
|
||||
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:**
|
||||
```bash
|
||||
pg_dump -h 127.0.0.1 -U risingcompute -Fc risingcompute > risingcompute-$(date +%Y%m%d).dump
|
||||
```
|
||||
|
||||
**Restore (into an empty database):**
|
||||
```bash
|
||||
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.
|
||||
Reference in New Issue
Block a user