Skip to content

Docker

Назначение

Docker используется на сервере staging для изолированного запуска всех разрабатываемых сервисов, для их отладки, тестирования и демонстрации:

  • keycloak — сервис аутентификации и авторизации (Keycloak)
  • keycloak_db — сервис c базой данных для Keycloak (PostgreSQL)
  • api_aceramica — сервис бэкенда (FastAPI)
  • db_aceramica — сервис c базой данных для бэкенда (PostgreSQL)
  • aceramica_adminer_db — интерфейс для администрирования БД (Adminer)
  • frontend-admin — сервис админ-панели на (Nuxt 3)

Сервис Nginx запущен напрямую в системе, не в контейнерах. Такой подход упрощает настройку HTTPS, постоянную работу cron-задач и уменьшает время отклика сайта

Состав и описание контейнеров

1. keycloak

  • Образ: keycloak:26.2.4
  • Порты: 8080:8080
  • Данные сохраняются в volume ./docker/volumes/keycloak_data
  • Переменные окружения в файле ./services/keycloak/.env
  • Связь с базой данных Keycloak производится через сеть keycloak_network

2. keycloak_db

  • Образ: postgres:latest
  • Порты: 5432:5432
  • Данные сохраняются в volume ./docker/volumes/keycloak_db_data
  • Переменные окружения в файле ./services/database/.env.keycloak_db
  • Связь с Keycloak производится через сеть keycloak_network

3. frontend-admin

  • Контекст: ./ - берёт файлы приложения из директории ./services/frontend/admin/
  • Порты: 3000:3000

Файлы и расположение

1. Файл docker-compose.yml для запуска всех сервисов

Находится в директории:

bash
/var/www/docker-compose.yml

Пример структуры:

yaml
services:
  keycloak_db:
    extends:
      file: ./docker-compose.db.yml
      service: keycloak_db

  keycloak:
    extends:
      file: ./docker-compose.keycloak.yml
      service: keycloak

  frontend-admin:
    extends:
      file: ./services/frontend/admin/docker-compose.yml
      service: frontend-admin

  api_aceramica:
    extends:
      file: ./services/backend/docker-compose.yml
      service: api_aceramica

  db_aceramica:
    extends:
      file: ./services/backend/docker-compose.yml
      service: db_aceramica

  aceramica_adminer_db:
    extends:
      file: ./services/backend/docker-compose.yml
      service: aceramica_adminer_db

networks:
  keycloak_network:
    external: true

2. Файл docker-compose.keycloak.yml для запуска сервиса Keycloak

Находится в директории:

bash
/var/www/docker-compose.keycloak.yml

Пример структуры:

yaml
services:
  keycloak:
    image: quay.io/keycloak/keycloak:26.2.4
    container_name: keycloak
    command:
      - start-dev
    env_file: ./services/keycloak/.env
    volumes:
      - ./docker/volumes/keycloak_data:/var/lib/keycloak
    ports:
      - '8080:8080'
    networks:
      - keycloak_network

networks:
  keycloak_network:
    external: true

3. Файл docker-compose.db.yml для запуска сервиса c базами данных

Находится в директории:

bash
/var/www/docker-compose.db.yml

Пример структуры:

yaml
services:
  keycloak_db:
    image: postgres:latest
    restart: always
    env_file: ./services/database/.env.keycloak_db
    volumes:
      - ./docker/volumes/keycloak_db_data:/var/lib/postgresql/data
    networks:
      - keycloak_network
    ports:
      - '5432:5432'

networks:
  keycloak_network:
    external: true

4. Файл docker-compose.yml для запуска сервиса frontend-admin

Находится в директории:

bash
/var/www/services/frontend/admin/docker-compose.yml

Пример структуры:

yaml
services:
  frontend-admin:
    build:
      context: ./
    ports:
      - '3000:3000'

5. Файл docker-compose.yml для запуска сервисов бэкенда - api_aceramica, db_aceramica и aceramica_adminer_db

Находится в директории:

bash
/var/www/services/backend/docker-compose.yml

Пример структуры:

yaml
services:
  api_aceramica:
    build: ''
    command:
      - /bin/sh
      - -c
      - |
        echo "wait for 5 seconds"
        sleep 5
        uvicorn src.run:application --host 0.0.0.0 --port 2309 --reload --timeout-keep-alive 1000
    volumes:
      - .:/src/app
    env_file:
      - src/.env
    logging:
      options:
        max-size: 10m
    deploy:
      resources:
        reservations:
          memory: 20M
    depends_on:
      - db_aceramica
    networks:
      - backend_network
    ports:
      - 2309:2309

  db_aceramica:
    restart: always
    image: postgres:15.3
    container_name: db_aceramica
    env_file:
      - src/.env
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    ports:
      - 8585:8080
    logging:
      driver: none
    networks:
      - backend_network

  aceramica_adminer_db:
    container_name: aceramica_adminer_db
    image: adminer
    restart: always
    depends_on:
      - db_aceramica
    networks:
      - backend_network
    ports:
      - 8110:8080

volumes:
  postgres_data:

networks:
  backend_network:
    external: true

Команды управления

Посмотреть статус всех сервисов

bash
docker ps

Запуск сервисов

Запуск всех сервисов

bash
cd /var/www/
docker compose up -d

Запуск конкретного сервиса

bash
docker compose -f docker-compose.keycloak.yml up -d

Просмотр логов

Просмотр логов конкретного сервиса

bash
docker logs <container_id>

Просмотр логов конкретного сервиса в режиме реального времени

bash
docker logs -f <container_id>

Перезапуск контейнеров

Перезапуск всех сервисов

bash
docker compose restart

Перезапуск конкретного сервиса

bash
docker compose -f docker-compose.keycloak.yml restart

Остановка и удаление всех контейнеров (без удаления данных)

Остановка всех сервисов

bash
docker compose down

Остановка конкретного сервиса

bash
docker compose -f docker-compose.keycloak.yml down

💡 Данные хранятся в volumes ./docker/volumes/ и не будут потеряны при остановке или пересборке контейнеров

Примечание

Чаще используются именно команды для запуска и перезапуска конкретного сервиса, а не команды для взаимодействия со всеми сервисами, для гибкости в управлении контейнерами

Т.е например если нужно перезапустить сервис keycloak, то используется команда:

bash
docker compose -f docker-compose.keycloak.yml restart

а не:

bash
docker compose restart

Внутренний ресурс компании