Selah/backend
2023-08-17 14:25:32 +09:00
..
main_project modified default django admin page 2023-08-17 14:00:45 +09:00
users_app migrations 2023-08-17 14:06:31 +09:00
manage.py initial migration commit into shiloh org 2023-08-17 12:57:46 +09:00
README.md aaaand another readme update 2023-08-17 14:25:32 +09:00

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 )

*** 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 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