Skip to content

Latest commit

 

History

History
201 lines (126 loc) · 6.41 KB

README.md

File metadata and controls

201 lines (126 loc) · 6.41 KB

OH!SHOWN Backend

OH!SHOWN 野生動物出沒痕跡通報系統 的後端。提供給 前端 的 API 以及一個管理後台。

本專案為 Disfactory 違章工廠舉報系統 分支,感謝相關社群與人士分享與指教。

分支目前還處於基於 Disfactory 違章工廠舉報系統 程式碼重構施工階段中。 文件、程式碼與單元測試皆尚未更新完畢;歡迎大家直接送重構用程式碼、補丁與 Pull Request 。

Architecture

architecture

跳坑準備


當你想跳坑可是又不知道要用什麼姿勢的時候,可以參考下面的連結

開發環境

API Framework

Database

專案目前的進度與需求

設定開發環境


以下的環境設定都是以 Mac 與 Linux 為主, Windows 的話需要使用 WSL2 + Docker Desktop 才有辦法依照下面的步驟設定。

安裝 WSL2

WSL2 + Docker Desktop

建立 .env

在這個專案 .env 檔是非常重要的檔案,因為 docker-compose 會使用環境變數設定 container 內的環境變數。 並且 django server 在啟動的時候,也會使用 python-dotenv 來讀取 .env 檔。

因此在設定開發環境之前,需要建立一個 .env 檔,內容如下

DISFACTORY_BACKEND_DEFAULT_DB_NAME=disfactory_data
DISFACTORY_BACKEND_DEFAULT_DB_USER=postgres
DISFACTORY_BACKEND_DEFAULT_DB_PASSWORD=postgres
DISFACTORY_BACKEND_DEFAULT_DB_HOST=db
DISFACTORY_BACKEND_DEFAULT_DB_PORT=5432

DISFACTORY_BACKEND_DEFAULT_DB_DEV_PORT=5433

DISFACTORY_ALLOWED_HOST=localhost,127.0.0.1
DISFACTORY_BACKEND_CORS_ORIGIN_WHITELIST=
DISFACTORY_BACKEND_MAX_FACTORY_PER_GET=50

DISFACTORY_BACKEND_LOG_LEVEL=INFO
DISFACTORY_BACKEND_LOG_FILE=/tmp/disfactory.log

DISFACTORY_BACKEND_DEBUG=true
DISFACTORY_BACKEND_PORT=8888

# will be deprecated
DISFACTORY_IMGUR_CLIENT_ID=your_imgur_id
DISFACTORY_BACKEND_MEDIA_ROOT="./images/"
DISFACTORY_BACKEND_DOMAIN="https://api.disfactory.tw/"

也可以直接複製 .env.sample.env

最後我們要使用 .env 來設定目前的環境變數

( 如果使用 pipenv 或 docker 的話可以跳過這一個步驟,因為 pipenv 會自動讀取 .env 的內容來設定環境變數,而 docker container 啟動時會呼叫 pipenv )

source .env

# 測試一下,確認環境變數是否正確
> echo $DISFACTORY_BACKEND_DEFAULT_DB_NAME
disfactory_data

開發環境懶人包 - Docker + docker-compose

如果覺的安裝 Python, pipenv 與 PostgreSQL 等東西很麻煩話,那麼可以選擇完全使用 Docker + docker-compose 作為開發環境。只需要安裝 Dockerdocker-compose 就可以快速運行整個後端服務。

安裝方式請參考

有安裝 make 的話可以直接使用

make run-dev

或使用 docker-compose 指令來啟動

docker-compose -f docker-compose.dev.yml up -d

更詳細的使用方式請看

Setup with docker-compose

在本機上安裝與設定開發環境

設定 Python 環境

請確認系統是否有安裝 Python 3.7, 如果是 Linux, Mac 或 Windows WSL 環境的話可以使用 pyenv 來安裝特定版本的 Python。

安裝 poetry

osx / linux / bashonwindows install instructions

curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -

windows powershell install instructions

(Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py -UseBasicParsing).Content | python -

詳細可以參考 poetry poetry

設定 PostgreSQL + PostGIS

PostgreSQL 與 PostGIS 有兩種設定方式,可以使用 Docker + docker-compose 啟動 PostGIS 的 Container。 或者是在本機系統上安裝 PostGIS + PostgreSQL Server

使用 Docker + docker-compose

docker-compose -f docker-compose.dev.yml run --service-ports -d db

有安裝 make 的話也可以使用 make run-db 來啟動

這個指令只會啟動 docker-compose.dev.yml 裡面的 db service,並且將 container 的 5432 port 對應到 .env 內的 DISFACTORY_BACKEND_DEFAULT_DB_DEV_PORT 指定的 port ( .env.example 裡面是 5433 )

在 container 啟動之後,還需要設定 .env 裡面的 DISFACTORY_BACKEND_DEFAULT_DB_HOST127.0.0.1。 這樣當你在本機上啟動 django server 的時候,他才能正確的連到 db。

P.S

最好先使用 make run-dev 或者 docker-compose -f docker-compose.dev.yml up -d 啟動一次所有服務,讓 django 初始化 db 資料,db 才能正常運作。 若 pipenv 有新的套件,為了更新 docker image(不然會用 cache),則需要 docker-compose -f docker-compose.dev.yml up -d --build --force-recreate

不然就必須在 db 啟動之後,使用 python manage.py migrate 來初始化 db

在本機端上安裝 PostgreSQL + PostGIS

手動設定 PostgreSQL 與 PostGIS

啟動 django server

如果想要在本機端啟動 django server 來進行測試的話,可以用下面的指令啟動 django 的測試 server。

python manage.py runserver

測試

如果有安裝 make 的話,可以使用

make test

來使用 docker 執行所有的 unittest

API

https://g0v.hackmd.io/FZFghtuoQ0aaGIl9xXzuKw#API