.. | ||
main_project | ||
users_app | ||
manage.py | ||
README.md |
Selah Django backend API
*** LOCAL DJANGO ENVIRONMENT SETUP (installing libraries/dependencies) ***
** If using windows, installing git bash will be helpful as you can execute (most) of the same commands below for linux https://git-scm.com/download/win
- install ffmpeg for audio file processing on your system (ubuntu):
sudo apt-get install net-tools
sudo apt install ffmpeg
- install postgres
sudo apt install libpq-dev
sudo apt install postgresql
sudo apt install postgresql-contrib
- make sure python is installed (should come with ubuntu):
python --version
Django setup (Using Python -v 3.10.6 and Django -v 4.2 as of April, 29, 2023):
-
create dir on local machine where this project will be stored
mkdir selah
-
install python venv:
sudo apt install python3.10-venv
-
Create python virtual environment on local machine:
python3 -m venv env
-
clone this repo via https or ssh in the directory you created above; your python env folder should be next to the repo, not within it
-
Activate python virtual environment on local machine. You'll see '(env)' on the left-most side the terminal signature when activated
-
Ubuntu:
. env/bin/activate
-
windows:
source env/Scripts/activate
-
Once your env is activated, install Django and other dependencies (see requirements.txt or just copy/paste this in the terminal):
pip install django
pip install django-rest-framework
pip install djangorestframework-simplejwt
pip install pyjwt
pip install social-auth-app-django
pip install django-cors-headers
pip install djoser
pip install pillow
pip install django-imagekit
pip install pydub
pip install django-environ
pip install stripe
pip3 install --upgrade stripe
pip install psycopg2
pip install gunicorn
(For production server, install the binary:
pip install psycopg2-binary
)
- install pgadmin4 desktop GUI tool for DB management (https://www.pgadmin.org/download/):
*** Note: You need to create and configure an empty DB in either psql shell or pgadmin tool and give it the name selah_dev_db
before running python manage.py makemigrations
and/or python manage.py migrate
- in the
main_project
directory, create a new.env
file with the following environmnt variables. Get actual values from me:
DEV_MODE=
DOMAIN=
DEV_DOMAIN=
FRONTEND_DOMAIN=
FRONTEND_DEV_DOMAIN=
EMAIL_HOST=
EMAIL_PORT=
EMAIL_HOST_USER=
EMAIL_HOST_PASSWORD=
SECRET_KEY=
DBENGINE=django.db.backends.postgresql
DBNAME=selah_dev_db
DBUSER=<YOUR LOCAL POSTGRES USER>
DBPASSWORD=<YOUR LOCAL POSTGRES PASSWORD>
DBHOST=127.0.0.1
STRIPE_DOMAIN=
STRIPEPK=
STRIPESK=
STRIPE_WEBHOOK_SECRET=
SECURE_SSL_REDIRECT=False
SESSION_COOKIE_SECURE=False
CSRF_COOKIE_SECURE=False
ADMIN_URL=
-
make sure env is activated and set backend env DEV_MODE var:
DEV_MODE=True
-
make sure the
SECRET_KEY
environemnt variable is set (get it from me) -
cd to
/backned
directory where themanage.py
file is and start Django dev server in terminal:DJANGO_SETTINGS_MODULE=main_project.dev_settings python manage.py runserver
-
you should be able to access backend at
127.0.0.1:8000/api/selah
-
to create a superuser for youself so you can sign into Django's built-in admin portal to manage database models, activate env and run:
python manage.py createsuperuser
-
follow the prompts to create your superuser and try to access the admin portal at
127.0.0.1:8000/api/admin
-
finally migrate models to your empty db that should have already been created:
python manage.py makemigrations
and then
python manage.py migrate
- To run vs code debugger: In top level directory, add this launch.json file:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Django",
"type": "python",
"request": "launch",
"program": "/your/path/to/manage.py",
"args": [
"runserver"
],
"django": true,
"env": {
"DJANGO_SETTINGS_MODULE": "main_project.dev_settings"
},
"justMyCode": true
}
]
}
If you were preveiously in production mode, stop all nginx and gunicorn servers and open your browser's dev tools and clear all cache and cookie data:
sudo systemctl stop nginx sudo systemctl stop gunicorn sudo systemctl stop gunicorn.socket
*** PRODUCTION SIMULATION SERVER (https self-signed SSL certs) ***
TO START SIMULATED PROD SERVER access site over https with self-signed ssl certs (see servers_ssl_db_setup folder and complete those steps first if you haven't set up the servers locally in your machine yet): set backend env DEV_MODE var: DEV_MODE=False
restart nginx and gunicorn sudo systemctl restart nginx sudo systemctl restart gunicorn.socket sudo systemctl restart gunicorn
access the backend API/admin page at:
whatever you named your hosts name in nginx/gnicorn ssl setup
After everything is working, you can begin developing and making changes to code. After you have made a code change, restart servers to see updates:
reset nginx and gunicorn
sudo systemctl restart nginx sudo systemctl restart gunicorn