PyDock to narzędzie do automatycznego wdrażania aplikacji Docker Compose na VPS bez modyfikacji środowiska lokalnego. Wszystko działa w izolowanych kontenerach z automatycznym SSL i reverse proxy.
- 🚀 Jednokomendowy deployment -
pydock deploy
- 🔒 Automatyczne SSL - Let's Encrypt przez Caddy
- 🌐 Reverse proxy - Automatyczna konfiguracja domen
- 🐳 Izolacja kontenerów - Bez modyfikacji lokalnego środowiska
- 📊 Monitoring - Status, logi, metryki
- 🛡️ Bezpieczeństwo - SSH, generated passwords
- 🔄 Zero-downtime - Rolling updates
# Start API server
poetry run pydock api start --port 8080
# Deployment endpoint (jak w dynapsys)
curl -X POST http://localhost:8080/deploy \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key" \
-d '{
"domain": "mojadomena.pl",
"vps_ip": "192.168.1.100",
"cf_token": "cloudflare-token",
"source": "https://github.com/user/repo.git",
"auto_dns": true
}'
# WebSocket for real-time logs
wscat -c ws://localhost:8080/ws
# Other endpoints
GET /health # Health check
GET /deployments # List deployments
POST /cloudflare/dns # Setup DNS
GET /logs/stream # Stream logs
poetry run pydock shell
# W shell:
(pydock) status # Project status
(pydock) deploy # Deploy with confirmation
(pydock) cloudflare setup # Auto DNS setup
(pydock) git validate # Validate repo
(pydock) server start # Start API server
(pydock) env show # Show environment
(pydock) help # Full help
# Programmatic usage
from pydock.cloudflare import CloudflareManager
cf = CloudflareManager("your-token")
# Setup all DNS records automatically
await cf.setup_dns_records("mojadomena.pl", "192.168.1.100")
# Creates:
# mojadomena.pl -> 192.168.1.100
# app.mojadomena.pl -> 192.168.1.100
# site.mojadomena.pl -> 192.168.1.100
# api.mojadomena.pl -> 192.168.1.100
# Clone and deploy in one go
pydock git clone https://github.com/user/repo.git
cd repo
pydock init mojadomena.pl 192.168.1.100
pydock deploy
# Validate repository
pydock git validate
# ✅ Repository is ready for deployment!
# 💡 Recommendations:
# • Add .env.template for environment configuration
# • Add Dockerfile for containerization
# Initialize from template
pydock env init
# Show current values
pydock env show
# In shell - set values
(pydock) env set CLOUDFLARE_API_TOKEN your-token
(pydock) env load .env.production
# 1. Setup Poetry project
poetry new my-app && cd my-app
poetry add pydock
# 2. Initialize environment
poetry run pydock env init
# Edit .env with your values
# 3. Interactive development
poetry run pydock shell
(pydock) git clone https://github.com/user/repo.git src
(pydock) init mojadomena.pl 192.168.1.100
(pydock) cloudflare setup # Auto DNS
(pydock) generate app # Sample apps
(pydock) deploy # Deploy!
# 4. API server for automation
poetry run pydock api start &
# 5. Deploy via API (like dynapsys)
curl -X POST localhost:8000/deploy -d '{
"domain": "newdomain.pl",
"cf_token": "token",
"source": "https://github.com/user/newrepo.git"
}'
Feature | dynapsys | PyDock |
---|---|---|
Deployment API | ✅ | ✅ FastAPI + WebSocket |
Git clone | ✅ | ✅ + validation |
Cloudflare DNS | ✅ | ✅ + zones management |
Poetry support | ❌ | ✅ |
Interactive shell | ❌ | ✅ Rich-based |
Environment config | ❌ | ✅ Pydantic Settings |
Docker isolation | ❌ | ✅ |
SSL automation | ❌ | ✅ Caddy |
Real-time logs | ❌ | ✅ WebSocket |
# Production .env
PYDOCK_ENVIRONMENT=production
PYDOCK_API_SECRET_KEY=secure-generated-key
CLOUDFLARE_API_TOKEN=production-token
SSL_STAGING=false
# API authentication
curl -H "Authorization: Bearer $API_SECRET_KEY" \
http://api.yourdomain.com/deploy
- Poetry support ✅ -
pyproject.toml
z pełną konfiguracją dependency - Lokalne .env ✅ - Pydantic Settings z auto-loadingiem
- Interactive shell ✅ - Rich-based shell z kolorami i tabelami
- FastAPI REST API ✅ - Kompatybilne z dynapsys + więcej funkcji
- Cloudflare integration ✅ - Automatyczne DNS jak w dynapsys
# Start deployment server (jak dynapsys)
from pydock.api import run_server
run_server(port=8000)
# Deploy via API (kompatybilne z dynapsys)
curl -X POST http://localhost:8000/deploy \
-d '{
"domain": "your-domain.com",
"cf_token": "cloudflare-token",
"source": "https://github.com/user/repo.git"
}'
- 🐚 Interactive shell z Rich UI
- 🔧 Environment management z Pydantic
- 📦 Poetry integration
- 🐳 Docker isolation - nie zmienia lokalnego środowiska
- 🔒 Automatic SSL z Caddy
- 📊 Real-time monitoring przez WebSocket
- 📂 Git validation i project detection
- 🌊 Streaming logs
Masz teraz kompletne narzędzie, które:
- Nie modyfikuje lokalnego środowiska (wszystko przez SSH + Docker)
- Używa Poetry do zarządzania dependencies
- Ma .env configuration z Pydantic Settings
- Oferuje interactive shell z Rich UI
- Zapewnia REST API kompatybilne z dynapsys
- Integruje z Cloudflare automatycznie
- Zarządza Git operations z validation
To jest znacznie bardziej zaawansowane rozwiązanie niż dynapsys, zachowując przy tym prostotę użytkowania! 🎉
Lokalne środowisko (niezmienione)
↓ SSH Deploy
VPS z Docker Compose:
├── Caddy (Reverse Proxy + SSL)
├── Web App (Flask/FastAPI)
├── Static Site (Nginx)
└── Database (PostgreSQL)
# Zainstaluj PyDock
pip install pydock
# Lub z kodu źródłowego
git clone https://github.com/pydock/pydock.git
cd pydock
pip install -e .
# Utwórz nowy projekt PyDock
pydock init mojadomena.pl 192.168.1.100 --ssh-key ~/.ssh/id_rsa
# Struktura katalogów zostanie utworzona automatycznie:
# ├── pydock.json # Konfiguracja
# ├── docker-compose.prod.yml # Docker Compose dla produkcji
# ├── Caddyfile.prod # Konfiguracja reverse proxy
# ├── web-app/ # Twoja aplikacja
# ├── static-site/ # Strona statyczna
# └── .pydock/ # Pliki wewnętrzne
W panelu dostawcy domeny dodaj rekordy A:
Typ: A, Nazwa: @, Wartość: IP_VPS
Typ: A, Nazwa: app, Wartość: IP_VPS
Typ: A, Nazwa: site, Wartość: IP_VPS
Typ: A, Nazwa: api, Wartość: IP_VPS
# Wygeneruj aplikację Flask
pydock generate app
# Lub FastAPI
pydock generate api
# Lub stronę statyczną
pydock generate static
# Wykonaj deployment
pydock deploy
# 🎉 Gotowe! Twoje aplikacje są dostępne:
# https://mojadomena.pl - główna strona
# https://app.mojadomena.pl - aplikacja
# https://site.mojadomena.pl - strona statyczna
# https://api.mojadomena.pl - API endpoint
pydock status
# Wszystkie logi
pydock logs
# Logi konkretnej usługi
pydock logs caddy
pydock logs web-app
# Śledzenie na żywo
pydock logs -f
pydock stop
# Zmień kod lokalnie, potem:
pydock deploy # Automatycznie zaktualizuje VPS
{
"domain": "mojadomena.pl",
"vps_ip": "192.168.1.100",
"ssh_key_path": "~/.ssh/id_rsa",
"services": {
"web-app": {
"subdomain": "app",
"port": 5000,
"build_path": "./web-app"
},
"static-site": {
"subdomain": "site",
"port": 80,
"image": "nginx:alpine"
},
"database": {
"internal": true,
"port": 5432,
"image": "postgres:15-alpine"
}
},
"caddy": {
"auto_ssl": true,
"email": "admin@mojadomena.pl"
}
}
PyDock automatycznie generuje .env
na VPS:
DOMAIN=mojadomena.pl
DB_PASSWORD=automatycznie_wygenerowane_hasło
FLASK_ENV=production
- SSH Keys - Uwierzytelnianie kluczami SSH
- Isolacja - Każda usługa w osobnym kontenerze
- Firewall - Tylko porty 80/443 otwarte publicznie
- SSL - Automatyczne certyfikaty Let's Encrypt
- Passwords - Cryptographically secure generated passwords
# web-app/app.py (automatycznie wygenerowane)
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "🐳 Deployed by PyDock!"
@app.route('/api/status')
def status():
return {"status": "running", "deployed_by": "PyDock"}
# web-app/main.py
from fastapi import FastAPI
app = FastAPI(title="PyDock API")
@app.get("/")
async def root():
return {"message": "🐳 Deployed by PyDock!"}
<!-- static-site/index.html (automatycznie wygenerowane) -->
<!DOCTYPE html>
<html>
<head><title>PyDock Site</title></head>
<body>
<h1>🐳 Deployed by PyDock!</h1>
<p>SSL ✅ | Docker ✅ | Auto Deploy ✅</p>
</body>
</html>
- Edytuj
pydock.json
:
{
"services": {
"new-service": {
"subdomain": "new",
"port": 3000,
"build_path": "./new-service"
}
}
}
-
Utwórz katalog
new-service/
z Dockerfile -
Deploy:
pydock deploy
Edytuj Caddyfile.prod
aby dodać:
- Basic auth
- Rate limiting
- Custom headers
- Redirects
app.mojadomena.pl {
reverse_proxy web-app:5000
# Basic auth
basicauth {
admin $2a$14$hashed_password
}
# Rate limiting
rate_limit {
zone app {
key {remote_host}
events 100
window 1m
}
}
}
# Sprawdź logi Caddy
pydock logs caddy
# Sprawdź DNS
dig app.mojadomena.pl
# Sprawdź status kontenerów
pydock status
# Sprawdź logi aplikacji
pydock logs web-app
# Test połączenia
ssh root@IP_VPS
# Sprawdź klucz SSH
ssh-add -l
pydock/
├── pydock/
│ ├── __init__.py
│ ├── core.py # Główna logika
│ ├── config.py # Zarządzanie konfiguracją
│ ├── deployment.py # Logika deploymentu
│ ├── utils.py # Narzędzia pomocnicze
│ ├── cli.py # Interfejs CLI
│ └── generators.py # Generatory aplikacji
├── setup.py
├── requirements.txt
└── README.md
git clone https://github.com/pydock/pydock.git
cd pydock
pip install -e .
pydock --help
- ✨ Pierwsza wersja PyDock
- 🐳 Support dla Flask/FastAPI
- 🔒 Automatyczne SSL z Caddy
- 📊 CLI management interface
- 🚀 One-command deployment
- Fork projektu
- Utwórz branch feature (
git checkout -b feature/AmazingFeature
) - Commit zmiany (
git commit -m 'Add AmazingFeature'
) - Push branch (
git push origin feature/AmazingFeature
) - Otwórz Pull Request
MIT License - zobacz LICENSE file.
- Caddy - Amazing reverse proxy
- Docker - Container platform
- Paramiko - SSH library
- Click - CLI framework
PyDock - Deploy applications without the hassle! 🚀
Rozszerzyłem PyDock o wszystkie funkcje, o które pytałeś:
- 🎯 Poetry support -
pyproject.toml
z pełną konfiguracją - 🔧 .env configuration - Pydantic Settings z automatycznym ładowaniem
- 🐚 Interactive Shell - Rich-based shell z kolorami i tabelami
- 🚀 FastAPI REST API - Kompletne API z WebSocket, deployment endpoints
- ☁️ Cloudflare integration - Automatyczne DNS, zone management
- 📂 Git operations - Clone, validate, project detection
# 1. Instalacja z Poetry
poetry install
# 2. Aktywacja środowiska
poetry shell
# 3. Inicjalizacja .env
pydock env init
# 4. Edytuj .env z Twoimi wartościami
nano .env
# 5. Inicjalizacja projektu
pydock init mojadomena.pl 192.168.1.100
# 6. Interaktywny shell
pydock shell
# 7. Start API server
pydock api start
# 8. Deploy
pydock deploy
# Core
PYDOCK_DOMAIN=mojadomena.pl
PYDOCK_VPS_IP=192.168.1.100
CLOUDFLARE_API_TOKEN=your-token
# API Server
PYDOCK_API_PORT=8000
PYDOCK_API_SECRET_KEY=auto-generated
# Features
CLOUDFLARE_AUTO_DNS=true
FEATURE_WEBSOCKET_LOGS=true