Skip to main content

Dynamic Docker Compose orchestrator with automatic port allocation and TLS

Project description

DynaDock

Inteligentny orchestrator Docker Compose z automatyczną alokacją portów, TLS i lokalnymi subdomenami

PyPI version Python Version Tests License PyPI Downloads

Dlaczego DynaDock?

DynaDock rozwiązuje najczęstsze problemy przy pracy z Docker Compose:

  • Konflikty portów - automatycznie znajduje wolne porty
  • Certyfikaty SSL - automatyczne HTTPS przez Caddy
  • Lokalne domeny - każdy serwis dostępny pod własną subdomeną
  • Zero konfiguracji - działa od razu po instalacji
  • Health checks - automatyczne monitorowanie serwisów

Spis treści

Instalacja

Z PyPI (zalecane)

pip install dynadock

Z uv (najszybsze)

uv tool install dynadock

Ze źródeł

git clone https://github.com/dynapsys/dynadock.git
cd dynadock
make install

Szybki start

1. Podstawowe użycie

# W katalogu z docker-compose.yaml
dynadock up

# Twoje serwisy będą dostępne pod:
# http://api.dynadock.lan:8000
# http://web.dynadock.lan:8001
# http://redis.dynadock.lan:8002

2. Z HTTPS (zalecane)

dynadock up --enable-tls

# Serwisy dostępne pod:
# https://api.dynadock.lan
# https://web.dynadock.lan
# https://redis.dynadock.lan

3. Własna domena

dynadock up --domain myapp.local --enable-tls

# Serwisy dostępne pod:
# https://api.myapp.local
# https://web.myapp.local

Przykłady użycia

Aplikacja Node.js z MongoDB

# docker-compose.yaml
version: '3.8'
services:
  app:
    build: .
    environment:
      - NODE_ENV=development
  
  mongodb:
    image: mongo:6
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=secret
dynadock up --enable-tls

# Dostępne pod:
# https://app.dynadock.lan - aplikacja Node.js
# https://mongodb.dynadock.lan - MongoDB (z auth)

Python FastAPI z PostgreSQL

# docker-compose.yaml
version: '3.8'
services:
  api:
    build: .
    command: uvicorn main:app --reload
    environment:
      - DATABASE_URL=postgresql://user:pass@postgres/db
  
  postgres:
    image: postgres:15
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=pass
      - POSTGRES_DB=db
dynadock up --enable-tls --domain backend.dev

# Dostępne pod:
# https://api.backend.dev - FastAPI
# https://postgres.backend.dev - PostgreSQL

Mikroserwisy z Redis i RabbitMQ

# docker-compose.yaml
version: '3.8'
services:
  gateway:
    build: ./gateway
    depends_on:
      - auth-service
      - user-service
  
  auth-service:
    build: ./services/auth
    environment:
      - REDIS_URL=redis://redis:6379
  
  user-service:
    build: ./services/user
    environment:
      - RABBITMQ_URL=amqp://rabbitmq:5672
  
  redis:
    image: redis:7-alpine
  
  rabbitmq:
    image: rabbitmq:3-management
dynadock up --enable-tls --scale user-service=3

# Dostępne pod:
# https://gateway.dynadock.lan - API Gateway
# https://auth-service.dynadock.lan - Auth Service
# https://user-service.dynadock.lan - User Service (load balanced)
# https://redis.dynadock.lan - Redis
# https://rabbitmq.dynadock.lan - RabbitMQ Management

Funkcjonalności

🔧 Automatyczna konfiguracja

  • Alokacja portów: Znajduje wolne porty (8000-9999)
  • Generowanie .env: Tworzy .env.dynadock z wszystkimi zmiennymi
  • Certyfikaty SSL: Automatyczne HTTPS przez Caddy
  • Health checks: Monitorowanie stanu serwisów
  • CORS: Automatyczna konfiguracja dla API

🌐 Reverse Proxy (Caddy)

  • Load balancing: Dla skalowanych serwisów
  • WebSocket support: Automatyczne przekierowanie WS
  • Kompresja: Gzip/Brotli dla odpowiedzi
  • Cache: Inteligentne cache'owanie statycznych zasobów
  • Security headers: Automatyczne nagłówki bezpieczeństwa

🔍 Monitoring

  • Health checks: Sprawdzanie dostępności serwisów
  • Metryki: Prometheus-compatible metrics
  • Logi: Scentralizowane logowanie
  • Alerts: Powiadomienia o problemach

Komendy CLI

Podstawowe komendy

# Uruchomienie serwisów
dynadock up [OPTIONS]

# Zatrzymanie serwisów
dynadock down

# Status serwisów
dynadock ps

# Logi
dynadock logs [SERVICE]

# Wykonanie komendy w kontenerze
dynadock exec SERVICE COMMAND

# Health check
dynadock health

Opcje dynadock up

Opcja Opis Domyślnie
--domain Domena bazowa dynadock.lan
--enable-tls Włącz HTTPS false
--port-range Zakres portów 8000-9999
--scale SERVICE=N Skalowanie serwisu 1
--cors-origins Dozwolone origins *
--no-caddy Wyłącz Caddy proxy false
--env-file Dodatkowy plik .env -

Przykłady zaawansowane

# Produkcja z Let's Encrypt
dynadock up --domain app.com --enable-tls --email admin@app.com

# Development z custom ports
dynadock up --port-range 3000-4000 --enable-tls

# Skalowanie z load balancing
dynadock up --scale api=5 --scale worker=3

# Z custom CORS
dynadock up --cors-origins https://app.com,https://admin.app.com

Konfiguracja

Plik .dynadock.yaml

# .dynadock.yaml
domain: myapp.local
enable_tls: true
port_range: 8000-9999
services:
  api:
    scale: 3
    health_check: /health
    cors_origins:
      - https://app.myapp.local
  redis:
    expose_port: false
caddy:
  email: admin@example.com
  staging: false  # dla Let's Encrypt

Zmienne środowiskowe

DynaDock automatycznie generuje .env.dynadock:

# .env.dynadock (generowany automatycznie)
DYNADOCK_DOMAIN=myapp.local
DYNADOCK_PROTOCOL=https
DYNADOCK_API_PORT=8000
DYNADOCK_API_URL=https://api.myapp.local
DYNADOCK_WEB_PORT=8001
DYNADOCK_WEB_URL=https://web.myapp.local
DYNADOCK_REDIS_PORT=8002
DYNADOCK_REDIS_URL=redis://redis.myapp.local:8002

Przykładowe projekty

Repozytorium zawiera kompletne przykłady w katalogu examples/:

1. Simple Web App

cd examples/simple-web
dynadock up --enable-tls
# Otwórz: https://web.dynadock.lan

2. REST API z bazą danych

cd examples/rest-api
dynadock up --enable-tls
# API: https://api.dynadock.lan
# Docs: https://api.dynadock.lan/docs

3. Mikroserwisy

cd examples/microservices
dynadock up --enable-tls --scale worker=3
# Gateway: https://gateway.dynadock.lan
# Services: https://[service].dynadock.lan

4. Full-stack aplikacja

cd examples/fullstack
dynadock up --enable-tls
# Frontend: https://app.dynadock.lan
# Backend: https://api.dynadock.lan
# Admin: https://admin.dynadock.lan

Rozwiązywanie problemów

Port już zajęty

# Sprawdź zajęte porty
dynadock debug ports

# Użyj innego zakresu
dynadock up --port-range 9000-9999

Problemy z DNS

# Dodaj do /etc/hosts
echo "127.0.0.1 api.dynadock.lan web.dynadock.lan" | sudo tee -a /etc/hosts

# Lub użyj systemd-resolved (under development, check `dynadock --help` for availability)
dynadock setup-dns

Certyfikaty SSL

# Zaufaj certyfikatom Caddy (under development, check `dynadock --help` for availability)
dynadock trust-certs

# Lub wyłącz TLS w development
dynadock up --no-tls

Problemy z siecią Docker

# Reset sieci Docker (under development, check `dynadock --help` for availability)
dynadock network reset

# Lub użyj host network
dynadock up --network host

Rozwój

Wymagania

  • Python 3.8+
  • Docker 20.10+
  • Make (opcjonalne)
  • uv (zalecane)

Setup środowiska

# Klonuj repo
git clone https://github.com/dynapsys/dynadock.git
cd dynadock

# Instalacja dev dependencies
make dev

# Lub z uv
uv pip install -e ".[dev]"

Uruchamianie testów

# Wszystkie testy
make test

# Tylko unit tests
make test-unit

# Tylko integration tests
make test-integration

# Z coverage
make coverage

# W trybie watch
make test-watch

Budowanie dokumentacji

# Buduj dokumentację
make docs

# Serwuj lokalnie
make docs-serve
# Otwórz: http://localhost:8000

Linting i formatowanie

# Sprawdź kod
make lint

# Formatuj kod
make format

# Pre-commit checks
make pre-commit

Wkład

Zapraszamy do współtworzenia DynaDock! Zobacz nasz przewodnik dla kontrybutorów, aby dowiedzieć się więcej.

Jak pomóc?

  1. 🍴 Fork repozytorium
  2. 🌿 Stwórz branch (git checkout -b feature/amazing)
  3. ✨ Commituj zmiany (git commit -m 'Add amazing feature')
  4. 📤 Push do brancha (git push origin feature/amazing)
  5. 🎉 Otwórz Pull Request

Zgłaszanie błędów

Użyj GitHub Issues do zgłaszania błędów.

Autor

DynaDock jest rozwijany i utrzymywany przez zespół Dynapsys.

Licencja

MIT - zobacz LICENSE

Podziękowania

  • Caddy - za świetny reverse proxy
  • Docker - za konteneryzację
  • Click - za CLI framework
  • Rich - za piękne terminale

Stworzone z ❤️ przez Dynapsys

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dynadock-1.1.2.tar.gz (12.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dynadock-1.1.2-py3-none-any.whl (14.3 kB view details)

Uploaded Python 3

File details

Details for the file dynadock-1.1.2.tar.gz.

File metadata

  • Download URL: dynadock-1.1.2.tar.gz
  • Upload date:
  • Size: 12.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.4

File hashes

Hashes for dynadock-1.1.2.tar.gz
Algorithm Hash digest
SHA256 b65250b57d13b4d62e4ac077069cc78521784133b4c8328a80773b25960bb81f
MD5 79c982b99011617d60416a710f33b185
BLAKE2b-256 68aba82b820bdc2125fc66c2fb3b425de90d8036acb7cb6ef07d791f09a8ac7b

See more details on using hashes here.

File details

Details for the file dynadock-1.1.2-py3-none-any.whl.

File metadata

  • Download URL: dynadock-1.1.2-py3-none-any.whl
  • Upload date:
  • Size: 14.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.4

File hashes

Hashes for dynadock-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 156bd6863c0b8922a4c0e3aab128d02eb770983a405dbafaa9cffeae0ce22826
MD5 577f0d2565f0ac2a1ec9428e45d652b8
BLAKE2b-256 c0338b8a9ea4fb71f2568d9d5daf2061e248d856c615ce47cc5ef9141f4b4faa

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page