A modern Docker management dashboard with Git repository integration, Docker Compose project management, and Cloudflare Tunnel support.
- Frontend: React (client-side only, no SSR) with TypeScript, Bun, TailwindCSS, DaisyUI, and TanStack Query
- Backend: Flask REST API with UV as package manager, SQLAlchemy (Turso/LibSQL), and Alembic for migrations
-
Navigate to the backend directory:
cd backend -
Install dependencies using UV:
uv sync
-
Copy the environment file and configure:
cp .env.example .env # Edit .env with your Turso database credentials -
Run database migrations:
python migrate.py upgrade
-
Run the Flask server:
uv run python -m app
The backend will be available at http://localhost:8012
-
Navigate to the frontend directory:
cd frontend -
Install dependencies using Bun:
bun install
-
Start the development server:
bun run dev
The frontend will be available at http://localhost:3000
- 🐳 Docker Container Management: View, start, stop, restart, and remove containers
- 📦 Docker Compose Projects: Manage multi-container applications with compose up/down/restart
- 📂 Git Repository Management: Clone, pull, push, stash, and manage Git repositories with SSH support
- 🔄 Git Operations: View file changes, diffs, commit logs, and repository status
- 🌐 Cloudflare Tunnel Integration: Manage cloudflared tunnels and configurations
- 🔐 Authentication: Simple admin list JWT-based authentication system
- 📊 Real-time Status: Live container and project status monitoring
- 📝 README Viewer: View repository README files directly in the dashboard
- 🎨 Modern UI: Responsive interface built with DaisyUI and TailwindCSS
- ⚡ Fast Development: Vite for frontend, Flask for backend
POST /api/auth/login- Login and receive JWT tokenPOST /api/auth/verify- Verify JWT token
GET /api/containers- List all containers with statusPOST /api/containers/<container_id>/start- Start a containerPOST /api/containers/<container_id>/stop- Stop a containerPOST /api/containers/<container_id>/restart- Restart a containerDELETE /api/containers/<container_id>- Remove a containerGET /api/containers/<container_id>/logs- Get container logs
GET /api/projects- List all Docker Compose projectsPOST /api/projects/up- Start a compose projectPOST /api/projects/down- Stop and remove a compose projectPOST /api/projects/restart- Restart a compose project
GET /api/repositories- List all repositoriesGET /api/repositories/<id>- Get repository detailsPOST /api/repositories- Create/register new repositoryPUT /api/repositories/<id>- Update repositoryDELETE /api/repositories/<id>- Delete repositoryGET /api/repositories/<id>/readme- Get repository README contentGET /api/repositories/<id>/status- Get Git statusGET /api/repositories/<id>/log- Get commit logGET /api/repositories/<id>/diff- Get file changesPOST /api/repositories/<id>/clone- Clone repositoryPOST /api/repositories/<id>/pull- Pull latest changesPOST /api/repositories/<id>/push- Push changes to remotePOST /api/repositories/<id>/compose- Check for docker-compose files
GET /api/tunnels/cloudflared/status- Check cloudflared installation statusGET /api/tunnels/cloudflared/config- Get tunnel configurationPOST /api/tunnels/cloudflared/config- Update tunnel configurationGET /api/tunnels/cloudflared/list- List all tunnelsPOST /api/tunnels/cloudflared/start- Start a tunnelPOST /api/tunnels/cloudflared/stop- Stop a tunnel
This project uses Alembic for database schema management. See backend/migrations/README.md for detailed documentation.
# Apply all pending migrations
python migrate.py upgrade
# Create new migration after model changes
python migrate.py autogenerate -m "Description of changes"
# Check current migration version
python migrate.py current
# View migration history
python migrate.py history- Frontend: React 18, TypeScript, Vite, TailwindCSS 4, DaisyUI, TanStack Query
- Backend: Flask 3, SQLAlchemy with LibSQL (Turso), Alembic, Docker Python SDK, PyYAML
- Authentication: JWT (PyJWT)
- Version Control: Git operations via subprocess
- Container Management: Docker Python SDK
Backend (.env in backend directory):
DATABASE_URL=libsql://your-turso-url
DATABASE_AUTH_TOKEN=your-turso-token
SECRET_KEY=your-jwt-secret-key
DEFAULT_ADMIN_USERNAME=admin
DEFAULT_ADMIN_PASSWORD=your-secure-passwordMIT