# 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 ``` - for windows, install 7-zip first: https://www.7-zip.org/ - then you can extract the ffmpeg-git-essentials.7z windows file her: https://www.gyan.dev/ffmpeg/builds/ - 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= DBPASSWORD= 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 the `manage.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