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.1.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.1-py3-none-any.whl (14.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: dynadock-1.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 7adfe3f08e6a2c06dc73737e8dec65836f121238ca11f6c6ca2b0e745a81cb39
MD5 e46c9a4cda93947870f290739df8f434
BLAKE2b-256 f51c011c37113831fbbf1a92ee79f53ae970a53e2fc492f0f52c8214c460c413

See more details on using hashes here.

File details

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

File metadata

  • Download URL: dynadock-1.1.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 68593964b4b5af8665a144203d0f2f0a05b56a7771b1e9186bf3f46cba6d7fd4
MD5 a021339982ed3aec87ab9fe3c98d8f06
BLAKE2b-256 cfbcbc320bf35c0e192e4c623c505de8ee2a80261c18448f86ee7e5b235187fe

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