1.1 Problemin qoyuluşu
Gəlin kiçik bir çox konteynerli tətbiq yaradaq və yaradılması prosesində addım-addım başdan (problemin qoyuluşundan) sona qədər – hazır tətbiqin təqdimatına qədər gedək.
Məqsəd: İstifadəçilərə tapşırıqlar yaratmağa, redaktə etməyə, silməyə və onları müxtəlif istifadəçilərə təyin etməyə imkan verən çox konteynerli tapşırıq idarəetmə tətbiqi yaratmaq. Tətbiq üç əsas komponentdən ibarət olacaq: ReactJS-də frontend, Python (Flask)-də backend və PostgreSQL-də məlumat bazası.
Əsas vəzifələr:
- Tətbiqin hər bir komponenti üçün funksional tələbləri müəyyənləşdirmək.
- İstifadə olunacaq texnologiyaları və alətləri müəyyənləşdirmək.
- İnkişaf üçün mühit hazırlamaq.
1.2 Funksional tələblərin təyini
Task management tətbiqi üçün funksional tələblər:
- İstifadəçilərin qeydiyyatı və avtorizasiyası:
- İstifadəçi qeydiyyatdan keçə bilər.
- İstifadəçi sistemə daxil ola bilər.
- Taskların idarə olunması:
- İstifadəçi tasklar yarada bilər.
- İstifadəçi taskları redaktə edə bilər.
- İstifadəçi taskları silə bilər.
- İstifadəçi taskların siyahısını görə bilər.
- İstifadəçi taskları digər istifadəçilərə təyin edə bilər.
- Tasklara baxış və filtrasiya:
- İstifadəçi taskları statusuna görə filtrləyə bilər (yerinə yetirilmiş/yerinə yetirilməmiş).
- İstifadəçi digər istifadəçilərə təyin edilmiş tasklara baxa bilər.
1.3 İstifadə olunan texnologiyalar və alətlərin müəyyən edilməsi
Bu tətbiqin reallaşdırılması üçün aşağıdakı texnologiyalar və alətlərdən istifadə olunacaq:
- Frontend:
- ReactJS: İstifadəçi interfeyslərinin yaradılması üçün kitabxana.
- Axios: HTTP sorğularının yerinə yetirilməsi üçün kitabxana.
- Backend:
- Python: Server tərəfinin yaradılması üçün proqramlaşdırma dili.
- Flask: REST API yaratmaq üçün veb-framework.
- SQLAlchemy: Verilənlər bazası ilə qarşılıqlı əlaqə üçün ORM.
- Database:
- PostgreSQL: İstifadəçilər və tapşırıqlar haqqında məlumatın saxlanması üçün əlaqəli verilənlər bazası.
- Konteynerləşmə və orkestrasiya:
- Docker: Tətbiqlərin konteynerləşdirilməsi üçün platforma.
- Docker Compose: Çox konteynerli tətbiqlərin idarə edilməsi üçün alət.
1.4 İnkişaf mühitinin hazırlanması
Layihəni uğurla həyata keçirmək üçün inkişaf mühitini quraşdırmaq və bütün lazımi vasitələrin mövcudluğuna əmin olmaq lazımdır.
Mühitin hazırlanması üçün addımlar:
- Docker-in quraşdırılması:
- Öz əməliyyat sisteminizdə Docker-in quraşdırılması üçün rəsmi Docker veb-saytındakı təlimatlara əməl edin.
- Docker Compose-in quraşdırılması:
- Docker Compose programını quraşdırmaq üçün rəsmi Docker Compose veb-saytındakı təlimatlara əməl edin.
- Layihə strukturunun yaradılması:
- Layihə üçün bir direktor və hər bir servis üçün əsas alt-dizinləri yaradın:
- Layihənin başlatılması:
- frontend direktoryasında yeni bir ReactJS layihəsini başlat:
mkdir task_management_app
cd task_management_app
mkdir frontend backend database
cd frontend
npx create-react-app .
cd ..
• backend direktoryasında Python/Flask tətbiqi üçün struktur yaradın:
cd backend
mkdir app
touch app/__init__.py
touch app/models.py
touch app/routes.py
touch run.py
touch requirements.txt
cd ..
• database direktoryasında PostgreSQL üçün Dockerfile yaradın (ehtiyac varsa):
cd database
touch Dockerfile
cd ..
1.5 Fayl məzmununa nümunə:
backend/app/__init__.py
faylı:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://taskuser:taskpassword@database:5432/taskdb'
db = SQLAlchemy(app)
from app import routes
backend/app/models.py
faylı:
from app import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
tasks = db.relationship('Task', backref='owner', lazy=True)
class Task(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(120), nullable=False)
description = db.Column(db.Text, nullable=True)
owner_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
backend/app/routes.py
faylı:
from app import app
@app.route('/')
def index():
return "Salam, Vəzifələr idarəetmə tətbiqi!"
backend/run.py
faylı:
from app import app
if __name__ == '__main__':
app.run(host='0.0.0.0')
backend/requirements.txt
faylı:
Flask
Flask-SQLAlchemy
psycopg2-binary
GO TO FULL VERSION