Self-hosted (Docker)
Коммерческая on-premise поставка
Клиенты разворачиваются из готового дистрибутива (архив с предсобранными образами + install.sh, интернет-доступ к реестрам не нужен) — инструкцию и ссылку на скачивание выдаёт поставщик. Флоу ниже описывает сборку из исходников и требует доступа к репозиторию.
Требования
- Docker 24+
- Docker Compose 2.20+
- Минимум 4 GB RAM, 2 vCPU
- 20 GB дискового пространства
Подробнее — в разделе Требования к серверу.
Быстрый старт
1. Клонировать репозиторий
git clone https://github.com/your-org/orbita.git
cd orbita2. Создать файл окружения
cp onpremise.env.example onpremise.envОтредактируйте onpremise.env — обязательные переменные:
APP_KEY=base64:ваш_ключ_32_символа
APP_MODE=onpremise
APP_DOMAIN=app.orbita.example
DB_PASSWORD=надёжный_парольГенерация APP_KEY:
docker run --rm php:8.4-cli php -r "echo 'base64:' . base64_encode(random_bytes(32)) . PHP_EOL;"Email для Let's Encrypt указывается отдельно, в traefik/onpremise/traefik.yml (certificatesResolvers.letsencrypt.acme.email) — Traefik не читает переменные окружения из onpremise.env.
3. Запустить
docker compose --env-file onpremise.env -f docker-compose-onpremise.yml build
docker compose --env-file onpremise.env -f docker-compose-onpremise.yml up -d4. Первоначальная настройка
# Применить миграции
docker exec orbita_onpremise_backend php artisan migrate --force
# Засеять роли и переводы (НЕ migrate --seed — это создаст тестового admin@test.com)
docker exec orbita_onpremise_backend php artisan db:seed --class=RoleSeeder --force
docker exec orbita_onpremise_backend php artisan db:seed --class=FrontendTranslationSeeder --force
# Создать единственный тенант установки (идемпотентно)
docker exec -it orbita_onpremise_backend php artisan tenant:init --name="Моя организация" --force
# Создать платформенного суперадмина (управление тенантами/аудитом, опционально)
docker exec -it orbita_onpremise_backend php artisan superadmin:create \
--name="Platform Admin" --email="superadmin@example.com" --password="..."
# Индексировать данные для поиска
docker exec orbita_onpremise_backend php artisan search:rebuildПервого администратора тенанта отдельной командой создать нельзя — зарегистрируйтесь через /signup, затем выдайте роль:
docker exec -it orbita_onpremise_backend php artisan tinker
>>> \App\Models\User::where('email', 'you@company.com')->first()->assignRole('admin');Подробное описание — в корневом README.
5. Открыть в браузере
Перейдите по адресу https://<APP_DOMAIN>.
Сервисы Docker Compose
| Сервис | Описание | Порт |
|---|---|---|
backend | Laravel API (Apache) | внутренний |
frontend | Vue SPA (Nginx) | внутренний (за Traefik) |
database | PostgreSQL 16 | внутренний |
redis | Redis 7 | внутренний |
meilisearch | Полнотекстовый поиск | внутренний |
queue | Laravel queue worker | — |
scheduler | Laravel scheduler | — |
reverb | WebSocket-сервер | внутренний |
seaweedfs | S3-совместимое хранилище файлов | внутренний |
traefik | Reverse proxy + TLS (Let's Encrypt, HTTP-01) | 80, 443 |
Обновление
git pull
docker compose --env-file onpremise.env -f docker-compose-onpremise.yml build
docker compose --env-file onpremise.env -f docker-compose-onpremise.yml up -d
docker exec orbita_onpremise_backend php artisan migrate --force
docker exec orbita_onpremise_backend php artisan optimize:clear
docker exec orbita_onpremise_backend php artisan optimize
docker exec orbita_onpremise_backend php artisan queue:restartРезервное копирование
База данных
docker exec orbita_onpremise_db pg_dump -U orbita orbita > backup_$(date +%Y%m%d).sqlФайлы
docker cp orbita_onpremise_s3:/data ./backup_files_$(date +%Y%m%d)Бэкап конкретного тенанта (через artisan)
docker exec orbita_onpremise_backend php artisan tenant:backup --tenant=<ID>Просмотр логов
# Логи приложения
docker logs orbita_onpremise_backend -f
# Логи очередей
docker logs orbita_onpremise_queue -f
# Логи базы данных
docker logs orbita_onpremise_db -fРежимы работы
| Переменная | Значение | Описание |
|---|---|---|
APP_MODE | onpremise | Один тенант, одна компания |
APP_MODE | saas | Мультитенантный режим (отдельная инфраструктура, не описана здесь) |