Требования к серверу
Минимальные требования (self-hosted)
| Компонент | Минимум | Рекомендуется |
|---|---|---|
| CPU | 2 vCPU | 4 vCPU |
| RAM | 4 GB | 8 GB |
| Диск | 20 GB SSD | 50 GB SSD |
| ОС | Ubuntu 22.04 / Debian 12 | Ubuntu 24.04 LTS |
Программные зависимости
| Компонент | Версия | Назначение |
|---|---|---|
| PHP | 8.4 | Backend API |
| PostgreSQL | 16 | Основная база данных |
| Redis | 7 | Кэш, сессии, очереди |
| Meilisearch | 1.x | Полнотекстовый поиск |
| Node.js | 18+ | Сборка frontend |
| Nginx | 1.24+ | Веб-сервер |
При использовании Docker всё включено в docker-compose-prod.yml.
Queue Worker — обязательный компонент
Queue Worker (php artisan queue:work) не опционален для production: уведомления (Telegram, email, push) и индексация Meilisearch выполняются асинхронно через Redis-очередь. Без запущенного воркера:
- Telegram-уведомления при смене статуса не доставляются
- Полнотекстовый индекс не обновляется после создания/редактирования записей
В Docker-конфигурации воркер запускается автоматически как отдельный контейнер. При ручной установке добавьте в systemd или supervisor:
[program:orbita-queue]
command=php /var/www/html/artisan queue:work --tries=3 --timeout=90 --sleep=1
numprocs=2
autostart=true
autorestart=trueМинимум 2 процесса воркера на любом production-сервере.
Настройка Apache / PHP-FPM
Количество PHP-воркеров определяет параллельную пропускную способность. Рекомендуемые значения MaxRequestWorkers (Apache mpm_prefork) или pm.max_children (PHP-FPM dynamic):
| Ожидаемых одновременных пользователей | Воркеров | RAM на воркер | RAM итого |
|---|---|---|---|
| до 20 | 15–20 | ~80 MB | ~1.6 GB |
| до 50 | 25–35 | ~80 MB | ~2.8 GB |
| до 100 | 50–60 | ~80 MB | ~4.8 GB |
| до 200 | 80–100 | ~80 MB | ~8 GB |
При нагрузочном тестировании на одном сервере (4 vCPU, 8 GB RAM): 20 одновременных пользователей → p95 = 262 ms при 5 воркерах (дефолт) система упиралась уже при 10 пользователях.
Для Docker-установки значение задаётся переменной окружения или через apache2.conf / www.conf внутри образа.
PHP-расширения
pdo_pgsql
redis
gd (или imagick)
mbstring
openssl
tokenizer
xml
ctype
json
bcmath
intl
zip
pcntlСеть и домены
- Открытые порты:
80(HTTP),443(HTTPS) - SSL-сертификат: автоматически через Let's Encrypt (Traefik)
- Требуется DNS A-запись на IP сервера
Минимальный набор доменов:
| Домен | Назначение |
|---|---|
app.orbita.example | Основное приложение |
docs.orbita.example | Документация (опционально) |
SaaS-режим дополнительно:
| Домен | Назначение |
|---|---|
*.orbita.example | Wildcard для поддоменов тенантов |
auth.orbita.example | Authentik SSO |
Хранилище файлов
По умолчанию используется встроенный SeaweedFS (S3-совместимый).
Можно заменить на внешние S3-хранилища:
- AWS S3
- MinIO
- Yandex Object Storage
- VK Cloud Storage
Настройка: переменные AWS_* в prod.env.