# Nanaxe Server + Consyscab Integration # Объединённая конфигурация для совместного развёртывания services: # ========================================== # 1. Единая база данных PostgreSQL # ========================================== consyscab_db: image: postgres:16-alpine container_name: consyscab_db environment: - POSTGRES_USER=user - POSTGRES_PASSWORD=${DB_PASSWORD:-password} - POSTGRES_DB=symfony_db volumes: - pg_data:/var/lib/postgresql/data - ./docker/postgres/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh:ro # Nanaxe: инициализация базы Gitea - ./nanaxe/postgres-init:/docker-entrypoint-initdb.d/nanaxe:ro networks: - consyscab-network healthcheck: test: ["CMD-SHELL", "pg_isready -U user"] interval: 10s timeout: 5s retries: 5 # ========================================== # 2. PHP 8.4 (Symfony + Moodle) # ========================================== consyscab_php: build: context: ./docker/php container_name: consyscab_php volumes: - ./backend:/var/www/symfony - ./moodle:/var/www/moodle - ./moodledata:/var/www/moodledata - ./docker/php/custom.ini:/usr/local/etc/php/conf.d/custom.ini:ro - ~/.gitconfig:/var/www/.gitconfig:ro depends_on: consyscab_db: condition: service_healthy consyscab_memcached: condition: service_started networks: - consyscab-network # ========================================== # 3. Nginx (Consyscab + Nanaxe) # ========================================== consyscab_nginx: image: nginx:alpine container_name: consyscab_nginx ports: - "80:80" - "443:443" volumes: - ./backend:/var/www/symfony - ./moodle:/var/www/moodle - ./docker/nginx/conf.d:/etc/nginx/conf.d # Nanaxe: дополнительная конфигурация - ./nanaxe/nginx:/etc/nginx/conf.d/nanaxe:ro - ./nanaxe/html:/usr/share/nginx/html/nanaxe:ro depends_on: - consyscab_php - nanaxe_gitea - nanaxe_api networks: - consyscab-network # ========================================== # 4. Adminer # ========================================== consyscab_adminer: image: adminer container_name: consyscab_adminer depends_on: - consyscab_db networks: - consyscab-network # ========================================== # 5. Memcached # ========================================== consyscab_memcached: image: memcached:alpine container_name: consyscab_memcached networks: - consyscab-network # ========================================== # 6. Node.js для Quasar # ========================================== consyscab_front: image: node:22-alpine container_name: consyscab_front user: "1000:1000" ports: - "9000:9000" - "9005:9005" working_dir: /app volumes: - ./frontend:/app - ~/.gitconfig:/var/www/.gitconfig:ro environment: - NODE_ENV=development tty: true stdin_open: true networks: - consyscab-network # ========================================== # 7. Mercure Hub # ========================================== consyscab_mercure: image: dunglas/mercure container_name: consyscab_mercure environment: MERCURE_PUBLISHER_JWT_KEY: ${MERCURE_JWT_SECRET:-secret} MERCURE_SUBSCRIBER_JWT_KEY: ${MERCURE_JWT_SECRET:-secret} ALLOW_ANONYMOUS: 1 networks: - consyscab-network # ========================================== # 8. Nanaxe Gitea (Git сервер) # ========================================== nanaxe_gitea: image: gitea/gitea:latest container_name: nanaxe_gitea environment: - USER_UID=1000 - USER_GID=1000 - GITEA__database__DB_TYPE=postgres - GITEA__database__HOST=consyscab_db:5432 - GITEA__database__NAME=gitea - GITEA__database__USER=user - GITEA__database__PASSWD=${DB_PASSWORD:-password} - GITEA__server__DOMAIN=${GITEA_DOMAIN:-git.localhost} - GITEA__server__ROOT_URL=http://${GITEA_DOMAIN:-git.localhost} - GITEA__server__SSH_DOMAIN=${GITEA_DOMAIN:-git.localhost} - GITEA__server__SSH_PORT=2221 - GITEA__server__SSH_LISTEN_PORT=22 - GITEA__security__INSTALL_LOCK=true - GITEA__security__SECRET_KEY=${GITEA_SECRET_KEY} - GITEA__service__DISABLE_REGISTRATION=false - GITEA__service__REQUIRE_SIGNIN_VIEW=false volumes: - gitea_data:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro depends_on: consyscab_db: condition: service_healthy networks: - consyscab-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/api/healthz"] interval: 30s timeout: 10s retries: 3 start_period: 40s # ========================================== # 9. Nanaxe API Server # ========================================== nanaxe_api: build: context: ./nanaxe/api dockerfile: Dockerfile container_name: nanaxe_api environment: - NODE_ENV=production - PORT=8080 - GITEA_URL=http://nanaxe_gitea:3000 - GITEA_TOKEN=${GITEA_TOKEN} - JWT_SECRET=${NANAXE_JWT_SECRET} - MINDMAP_STORAGE_PATH=/app/mindmaps volumes: - mindmap_data:/app/mindmaps - ./nanaxe/logs:/app/logs depends_on: - nanaxe_gitea - consyscab_db networks: - consyscab-network healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8080/health"] interval: 30s timeout: 10s retries: 3 # ========================================== # 10. Nanaxe WebDAV (опционально) # ========================================== nanaxe_webdav: image: bytemark/webdav container_name: nanaxe_webdav environment: - AUTH_TYPE=Basic - USERNAME=${WEBDAV_USER:-admin} - PASSWORD=${WEBDAV_PASSWORD} volumes: - mindmap_data:/var/lib/dav networks: - consyscab-network networks: consyscab-network: driver: bridge volumes: pg_data: gitea_data: mindmap_data: