flowchart TB
subgraph "GoodLabour Platform (Pre-Prod)"
A[Apache2] --> B[Django]
B --> C[PostgreSQL 15]
B --> D[KeyDB]
B --> E[Static Files]
A -->|HTTPS| F[Клиент: React]
end
subgraph "Модули Python"
B --> G[billing]
B --> H[orders]
B --> I[users]
G --> J[services.py]
G --> K[models.py]
end
/var/www/goodlabour/
├── .env
├── requirements.txt
├── manage.py
├── README.txt
├── goodlabour/
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── billing/
│ ├── services.py
│ ├── models.py
│ └── admin.py
├── orders/
│ ├── views.py
│ └── models.py
└── static/
#!/bin/bash
# Создаем папку и окружение
mkdir -p /var/www/goodlabour
cd /var/www/goodlabour
python3.11 -m venv venv
source venv/bin/activate
# Устанавливаем зависимости
cat > requirements.txt << EOF
Django==5.0
psycopg2-binary
redis
django-redis
django-admin-actions
EOF
pip install -r requirements.txt
# Создаем проект и модули
django-admin startproject goodlabour .
python manage.py startapp billing
python manage.py startapp orders
# Настраиваем базовые файлы
cat > billing/models.py << EOF
from django.db import models
class CommissionRule(models.Model):
name = models.CharField("Название правила", max_length=100)
customer_percent = models.DecimalField("Комиссия с заказчика (%)", max_digits=5, decimal_places=2, default=5.0)
contractor_percent = models.DecimalField("Комиссия с исполнителя (%)", max_digits=5, decimal_places=2, default=5.0)
is_active = models.BooleanField("Активно", default=True)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.name} (заказчик: {self.customer_percent}%, исполнитель: {self.contractor_percent}%)"
EOF
cat > billing/services.py << EOF
from decimal import Decimal
from .models import CommissionRule
def calculate_commission(amount: Decimal) -> dict:
rule = CommissionRule.objects.filter(is_active=True).first()
if not rule:
raise ValueError("Нет активных правил комиссий")
customer_fee = amount * (rule.customer_percent / Decimal(100))
contractor_fee = amount * (rule.contractor_percent / Decimal(100))
return {
"customer_total": amount + customer_fee,
"contractor_net": amount - contractor_fee,
"platform_income": customer_fee + contractor_fee,
"rule_id": rule.id
}
EOF
# Создаем README
cat > README.txt << EOF
GoodLabour Platform (Pre-Prod)
=============================
1. Настройка:
- Отредактируйте .env (DB, SECRET_KEY)
- python manage.py migrate
- python manage.py createsuperuser
2. Команды:
- Запуск: python manage.py runserver 0.0.0.0:8000
- Тесты: python manage.py test billing.tests
3. Админка:
- /admin (логин из п.1)
- Модель: CommissionRule - управление комиссиями
4. API:
- POST /api/orders/create - создание заказа
- GET /api/billing/commission - текущие правила
EOF
# Права
chmod -R 775 /var/www/goodlabour
echo "Проект развернут в /var/www/goodlabour"
Развертывание:
bash deploy.sh
Настройка БД:
echo "DATABASE_URL=postgres://user:pass@localhost:5432/goodlabour" > .env
Запуск:
source venv/bin/activate
python manage.py migrate
python manage.py runserver 0.0.0.0:8000
Тестирование:
curl -X POST http://localhost:8000/api/orders/create -H "Content-Type: application/json" -d '{"amount": 1000}'
http://server:8000/admin
http://server:8000/api/schema/swagger-ui/
Важно: Для продакшна замените runserver
на Apache2 + mod_wsgi!