Перейти к содержанию

📦 Docker-инфраструктура проекта

Общая схема Backend

Проект разворачивается в виде набора сервисов через docker-compose.
Основные компоненты:

  • Nginx — веб-сервер.
  • PHP (Laravel) — backend на PHP 8.2 с Laravel, Supervisor и Vipnet.
  • MySQL 8.0 — база данных.
  • CloudBeaver — веб-интерфейс для работы с БД.
  • MkDocs — документация на базе MkDocs Material.
  • Code Server — онлайн-редактор VS Code.

PRODUCTION

Порты которые использует PRODUCTION сборка и описание конфигураций. Проект разворачивается в виде набора сервисов через docker-compose.
Основные компоненты:

🔹 Nginx - (backend_prod_nginx)

  • Порт: 8822
  • Хранилища:
  • ./:/var/www — код проекта
  • ./docker/gitlab/nginx/prod/etc/nginx/conf.d — монтирование папки проекта с внутренней конфигурацией nginx внутрь контейнера
  • ./docker/gitlab/nginx/html/usr/share/nginx/html — монтирование папки проекта с внутренней конфигурацией nginx внутрь контейнера
  • Особенности: зависит от контейнера php, то есть, пока не запущен контейнер php этот контейнер не запустится

🔹 PHP (Laravel) - (backend_prod_project)

  • Образ: php:8.2-fpm
  • Хранилища:
  • ./ → /var/www — монтируется весь проект внутрь контейнера
  • ./docker/vipnet/config/root/.vipnet — монтирование конфигурации vipnet внутрь контейнера
  • Особенности:
  • Настроен supervisord.
  • Настроен vipnetclient (установка ключей при старте).
  • privileged: true + NET_ADMIN, SYS_ADMIN (для vipnet).

🔹 CloudBeaver - (backend_prod_cloudbeaver)

  • Назначение: админка БД (альтернатива phpMyAdmin).
  • Порт: 8978
  • Хранилище: /var/cloudbeaver/workspace/opt/cloudbeaver/workspace — монтирование папки с конфигами на хосте внутрь контейнера

🔹 MkDocs - (backend_prod_mkdocs)

  • Назначение: сервер документации.
  • Порт: 5522
  • Хранилища: /var/docs → /docs — монтирование папки с файлами документации внутрь контейнера

🔹 Editor (Code Server) - (backend_prod_editor)

  • Назначение: веб-IDE (VS Code в браузере).
  • Порт: 5521
  • Хранилища:
  • /var/docs/home/coder/project — монтирование папки с файлами документации внутрь контейнера

🔹 Frontend - (frontend_prod_nginx)

  • Порт
  • 3000

Схема

flowchart LR
    %% Пользовательские потоки
    subgraph USER["Пользователь"]
        User["Пользователь HTTP/HTTPS"]
        VipUser["Пользователь через VipNet"]
    end

    %% Внешний Nginx (host)
    subgraph HOST["Хостовая машина"]
        ExtNginx["Внешний Nginx (host)"]
    end

    %% Docker Compose
    subgraph DOCKER["Docker Compose"]
        IntNginx["Внутренний Nginx (docker)"]
        PHP["php-fpm (Laravel)"]
        S3["S3 (Object Storage)"]
        RemoteDB["Удалённая БД (DBaaS)"]
        Frontend["Frontend (node)"]
        CloudBeaver["cloudbeaver (dbeaver/cloudbeaver)"]
    end

    %% VipNet
    subgraph VIPNET["VipNet туннель"]
        Vipnet["VipNet клиент"]
    end

    %% Основной поток HTTP/HTTPS
    User -->|"443 HTTPS"| ExtNginx
    ExtNginx -->|"443 -> фронтенд"| Frontend
    Frontend -->|"API 443 HTTPS через внешний Nginx"| ExtNginx
    ExtNginx -->|"443 -> внутренний Nginx"| IntNginx
    IntNginx -->|"FastCGI 9000"| PHP
    PHP -->|"3306 TCP"| RemoteDB
    PHP -->|"443 HTTPS"| S3

    %% CloudBeaver поток
    ExtNginx -->|"443 -> 8978"| CloudBeaver
    CloudBeaver -->|"3306 TCP"| RemoteDB

    %% VipNet поток
    VipUser -->|"VipNet туннель"| Vipnet
    Vipnet --> PHP

TEST ( основной )

Порты которые использует TEST сборка и описание конфигураций. Проект разворачивается в виде набора сервисов через docker-compose.
Основные компоненты:

🔹 Nginx - (backend_test_main_nginx)

  • Порт: 8821
  • Хранилища:
  • ./:/var/www — код проекта
  • ./docker/gitlab/nginx/prod/etc/nginx/conf.d — монтирование папки проекта с внутренней конфигурацией nginx внутрь контейнера
  • ./docker/gitlab/nginx/html/usr/share/nginx/html — монтирование папки проекта с внутренней конфигурацией nginx внутрь контейнера
  • Особенности: зависит от контейнера php, то есть, пока не запущен контейнер php этот контейнер не запустится

🔹 PHP (Laravel) - (backend_test_main_project)

  • Образ: php:8.2-fpm
  • Хранилища:
  • ./ → /var/www — монтируется весь проект внутрь контейнера
  • Особенности:
  • Настроен supervisord.

🔹 Frontend - (frontend_test_main_nginx)

  • Порт
  • 3001

Схема

flowchart LR
    %% Пользовательский доступ
    User["Пользователь"] -->|"443 (HTTPS)"| ExtNginx["Внешний Nginx на хосте"]

    %% Домены
    ExtNginx -->|"443 -> 8821"| IntNginx["Nginx Backend"]
    ExtNginx -->|"443 -> 3001"| Frontend["Frontend (node:18.18.2)"]

    %% Backend PHP
    IntNginx -->|"FastCGI 9000"| PHP["php-fpm (Laravel)"]
    PHP -->|"3306 TCP"| RemoteDB["Удалённая БД (DBaaS)"]
    PHP -->|"443 HTTPS"| S3["Объектное хранилище S3"]

DEV ( тестовые сервера разработчиков )

Порты которые использует DEV сборка и описание конфигураций. Проект разворачивается в виде набора сервисов через docker-compose.
Основные компоненты:

🔹 Nginx - (backend_test_1\2\3\4\5_nginx)

  • Порты: 8094, 8089, 8081, 8085, 8097
  • Хранилища:
  • ./:/var/www — код проекта
  • ./docker/gitlab/nginx/prod/etc/nginx/conf.d — монтирование папки проекта с внутренней конфигурацией nginx внутрь контейнера
  • ./docker/gitlab/nginx/html/usr/share/nginx/html — монтирование папки проекта с внутренней конфигурацией nginx внутрь контейнера
  • Особенности: зависит от контейнера php, то есть, пока не запущен контейнер php этот контейнер не запустится

🔹 MySQL - (backend_test_1\2\3\4\5_mysql)

  • Образ: mysql:8.0
  • Порты: 3309, 3308, 3406, 3307, 3310
  • Хранилища:
  • /var/lib/mysql_3306/var/lib/mysql — данные БД монтируются с хоста в контейнер
  • ./docker/mysql/prod/mysql.cnf/etc/mysql/conf.d/custom.cnf — монтирование папки с внутренней конфигурацией mysql внутрь контейнера
  • Healthcheck: mysqladmin ping

🔹 PHP (Laravel) - (backend_test_1\2\3\4\5_project)

  • Образ: php:8.2-fpm
  • Хранилища:
  • ./ → /var/www — монтируется весь проект внутрь контейнера
  • Особенности:
  • Настроен supervisord.

🔹 Frontend - (frontend_prod_nginx)

  • Порты - 8095, 8090, 8082, 8086, 8099

Схема

flowchart LR
    %% Пользователь
    User["Пользователь"] --> Nginx["nginx (docker:80)"]

    %% Docker окружение
    subgraph DOCKER["Docker Compose"]
        Nginx -->|"FastCGI 9000"| PHP["php-fpm (Laravel)"]
        PHP -->|"3306 TCP"| Mysql["MySQL (docker:3306)"]
    end

    %% Сети
    subgraph Networks["Docker сети"]
        LaravelNet["laravel-network (bridge)"]
        CommonNet["common-network (external)"]
    end

    %% Подключение сервисов к сетям
    Nginx --- LaravelNet
    Nginx --- CommonNet
    PHP --- LaravelNet
    PHP --- CommonNet
    Mysql --- LaravelNet
    Mysql --- CommonNet