μκΈ°λ₯ #46
minkyu parkμ΄(κ°) 21μΌ μ μ λ³κ²½
{{>toc}}
# π₯ Epic 1 β Task 1
## FastAPI λλ ν 리 ꡬ쑰 μ μ
### π μμ
κ°μ
FastAPI κΈ°λ°μ μλ‘μ΄ mgmt μλ²λ₯Ό ꡬμΆνκΈ° μν΄, μ 체 νλ‘μ νΈμ λλ ν 리 ꡬ쑰λ₯Ό 체κ³μ μΌλ‘ μ€κ³νλ€.
μ΄ κ΅¬μ‘°λ ν₯ν κΈ°λ₯ νμ₯, μ μ§λ³΄μ, μλ² λ°°ν¬, MQTT worker λΆλ¦¬ μ΄μ λ±μ κ³ λ €νμ¬ μ₯κΈ°μ μΌλ‘ μμ μ μΈ μν€ν
μ²λ₯Ό λͺ©νλ‘ νλ€.
### π μ€κ³ λͺ©μ
- FastAPI μλ²μ MQTT Workerλ₯Ό λͺ
νν λΆλ¦¬νμ¬ νλ‘μΈμ€ μΆ©λμ λ°©μ§νκ³ μ΄μ μμ μ±μ ν보νλ€.
- SQLAlchemy λͺ¨λΈ, λΌμ°ν°, μ€ν€λ§λ₯Ό λͺ¨λννμ¬ μ½λ κ°λ
μ±κ³Ό μ μ§λ³΄μμ±μ λμΈλ€.
- Reverse SSH, μλ² μ μ΄, μ₯λΉ μν κ΄λ¦¬ λ± κΈ°λ₯λ³λ‘ λΌμ°ν°λ₯Ό λΆλ¦¬νμ¬ API ꡬ쑰λ₯Ό λͺ
ννκ² νλ€.
- AlmaLinux λ°°ν¬ νκ²½(systemd, scripts)μ κ³ λ €ν λλ ν 리 ꡬμ±μΌλ‘ μ€μ μ΄μ νκ²½κ³Ό κ°λ° νκ²½μ μ°¨μ΄λ₯Ό μ΅μννλ€.
- ν
μ€νΈ μ½λ, λ¬Έμ, μ€μ νμΌμ νμ€ννμ¬ νλ‘μ νΈ νμ§μ μ μ§νλ€.
π νλ‘μ νΈ λ£¨νΈ κ΅¬μ‘°
```plaintext
mkMgmtCloudFastAPI/ mgmt-fastapi-server/
β
ββ app/ # FastAPI λ©μΈ μλ²
β ββ main.py # FastAPI μνΈλ¦¬ν¬μΈνΈ
β ββ db.py # DB μ°κ²° (SQLAlchemy + PostgreSQL)
β ββ models/ # SQLAlchemy λͺ¨λΈ
β β ββ server_master.py
β β ββ server_status.py
β β ββ server_control.py
β β ββ server_detail.py
β ββ routers/ # API λΌμ°ν°
β β ββ server.py # μλ² μν/λͺ©λ‘ API
β β ββ control.py # μ μ΄ API (shutdown/reboot/WOL)
β β ββ ssh.py # reverse SSH API
β β ββ health.py # ping/health check
β ββ core/
β β ββ config.py # νκ²½ μ€μ
β β ββ utils.py # κ³΅μ© μ νΈ
β ββ schemas/ # Pydantic μ€ν€λ§
β ββ server.py
β ββ control.py
β ββ ssh.py
β
ββ worker/ # MQTT Worker (λ
립 νλ‘μΈμ€)
β ββ mqtt_worker.py # MQTT λ©μμ§ μμ λ° μ²λ¦¬
β ββ handlers/ # λ©μμ§ νΈλ€λ¬
β β ββ status_handler.py
β β ββ control_handler.py
β ββ utils.py
β
ββ scripts/ # λ°°ν¬/μ΄μ μ€ν¬λ¦½νΈ
β ββ start_mgmt.sh
β ββ start_worker.sh
β ββ migrate.sh
β
ββ systemd/ # systemd μλΉμ€ νμΌ ν
νλ¦Ώ
β ββ mgmt.service
β ββ mqtt-worker.service
β
ββ tests/ # ν
μ€νΈ μ½λ
β ββ test_server.py
β ββ test_control.py
β ββ test_mqtt.py
β
ββ .env # νκ²½ λ³μ
ββ requirements.txt # Python ν¨ν€μ§ λͺ©λ‘
ββ README.md # νλ‘μ νΈ λ¬Έμ
```
### π μ€κ³ κ·Όκ±° λ° μλ
β FastAPI / MQTT Worker λΆλ¦¬
* MQTTλ λΉλκΈ° μ΄λ²€νΈ κΈ°λ°μ΄λ―λ‘ FastAPIμ κ°μ μΉ μλ² νλ‘μΈμ€μ λΆλ¦¬ν΄μΌ μμ μ μ΄λ€.
* λ°λΌμ worker/ λλ ν 리λ₯Ό λ³λλ‘ κ΅¬μ±νμ¬ λ
립 μ€νμ΄ κ°λ₯νλλ‘ μ€κ³νλ€.
β SQLAlchemy λͺ¨λΈ λΆλ¦¬
* κΈ°μ‘΄ Django λͺ¨λΈ ꡬ쑰λ₯Ό κ·Έλλ‘ μ μ§νλ©΄μλ FastAPI μ€νμΌμ λ§κ² λͺ¨λννλ€.
* λͺ¨λΈμ νμΌλ³λ‘ λΆλ¦¬νλ©΄ μ μ§λ³΄μμ λ§μ΄κ·Έλ μ΄μ
μ΄ μ¬μμ§λ€.
β λΌμ°ν° ꡬ쑰 λΆλ¦¬
* μλ² μν, μ μ΄, SSH, ν¬μ€μ²΄ν¬ λ± κΈ°λ₯λ³λ‘ λΌμ°ν°λ₯Ό λΆλ¦¬νμ¬ API λ¬Έμ μλ μμ± μ κ΅¬μ‘°κ° λͺ
νν΄μ§λ€.
β systemd / scripts ν¬ν¨
* AlmaLinux μ΄μ νκ²½μμ λ°λ‘ μ¬μ©ν μ μλλ‘ systemd μλΉμ€ ν
νλ¦Ώκ³Ό μ΄μ μ€ν¬λ¦½νΈλ₯Ό ν¬ν¨νλ€.
* μ΄λ λ°°ν¬ μλνμ μλ² μμ μ± ν보μ νμμ μ΄λ€.
β ν
μ€νΈ μ½λ ν¬ν¨
* FastAPIλ ν
μ€νΈ μλνκ° λ§€μ° μ¬μ°λ―λ‘, μ΄κΈ°λΆν° ν
μ€νΈ λλ ν 리λ₯Ό ν¬ν¨νμ¬ νμ§ κ΄λ¦¬ κΈ°λ°μ λ§λ ¨νλ€.
### π μ°μΆλ¬Ό
- FastAPI mgmt μλ²μ μ 체 λλ ν 리 ꡬ쑰 μ€κ³ λ¬Έμ
- Gitea μ΄κΈ° 컀λ°μ μ¬μ©ν νμ€ νλ‘μ νΈ κ΅¬μ‘°
- ν₯ν λͺ¨λ κ°λ° μμ
μ κΈ°λ°μ΄ λλ μν€ν
μ² μ μ
-