195 lines
5.2 KiB
Markdown
195 lines
5.2 KiB
Markdown
# 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=<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
|