{"id":30024151,"url":"https://github.com/stefapi/vesselharbor","last_synced_at":"2025-08-17T13:15:52.111Z","repository":{"id":302716165,"uuid":"1012380681","full_name":"stefapi/vesselharbor","owner":"stefapi","description":"An open source Paas platform to easily deploy your own server based on templates or complex applications","archived":false,"fork":false,"pushed_at":"2025-07-06T18:24:27.000Z","size":1168,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-06T06:28:01.816Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stefapi.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-02T08:45:17.000Z","updated_at":"2025-07-06T18:24:30.000Z","dependencies_parsed_at":"2025-07-03T21:45:06.783Z","dependency_job_id":null,"html_url":"https://github.com/stefapi/vesselharbor","commit_stats":null,"previous_names":["stefapi/vesselharbor"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/stefapi/vesselharbor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stefapi%2Fvesselharbor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stefapi%2Fvesselharbor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stefapi%2Fvesselharbor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stefapi%2Fvesselharbor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stefapi","download_url":"https://codeload.github.com/stefapi/vesselharbor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stefapi%2Fvesselharbor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270852354,"owners_count":24656875,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-17T02:00:09.016Z","response_time":129,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-08-06T06:17:32.334Z","updated_at":"2025-08-17T13:15:52.103Z","avatar_url":"https://github.com/stefapi.png","language":"Python","readme":"# VesselHarbor\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/FastAPI-005571?style=for-the-badge\u0026logo=fastapi\" alt=\"FastAPI\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Vue.js-35495E?style=for-the-badge\u0026logo=vuedotjs\u0026logoColor=4FC08D\" alt=\"Vue.js\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Docker-2CA5E0?style=for-the-badge\u0026logo=docker\u0026logoColor=white\" alt=\"Docker\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/PostgreSQL-316192?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white\" alt=\"PostgreSQL\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge\u0026logo=typescript\u0026logoColor=white\" alt=\"TypeScript\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Python-3776AB?style=for-the-badge\u0026logo=python\u0026logoColor=white\" alt=\"Python\"\u003e\n\u003c/div\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cem\u003eSelf‑hosted application harbor \u0026 orchestrator — one‑click install, rock‑solid security, zero‑headache maintenance\u003c/em\u003e\n\u003c/p\u003e\n\n---\n\nVesselHarbor is a self-hosted platform for managing and orchestrating containerized applications and virtual machines, similar to platforms like Heroku or Vercel. It provides a comprehensive solution for infrastructure management.\n\n## 🖥️ Infrastructure Management\n\n* **Container \u0026 VM orchestration** — Docker, Docker Compose, Swarm and KVM‑based virtual machines side‑by‑side\n* **Cluster aware** — manage multiple nodes from a single dashboard; automatic service discovery\n* **Network fabric** — encrypted overlay networks and service mesh out‑of‑the‑box\n* **Gateway \u0026 ingress** — Layer‑4/7 reverse proxy with automatic TLS, wildcard \u0026 Wildcard+SAN certificates\n* **Resource insight** — live CPU, RAM, disk \u0026 network monitoring for every workload\n\n## 🔌 Connectivity \u0026 Extensibility\n\n* **SSO everywhere** — OAuth2 / OpenID Connect, LDAP and SAML providers supported\n* **Fine‑grained RBAC** — role \u0026 project based access for teams and external collaborators\n* **REST \u0026 WebSocket API** — automate everything; first‑class Terraform provider coming soon\n* **Add‑on engine** — databases (PostgreSQL, MySQL, MongoDB, Redis), object storage (MinIO, S3), message queues (NATS, RabbitMQ) and more can be installed as add‑ons and shared between apps\n\n## 📦 Application Experience\n\n* **Curated App Store** —  pre‑packaged images adapted for VesselHarbor with health‑checks, backups and sane defaults\n* **One‑click updates** — rolling updates with automatic rollback on failure\n* **Continuous backups** — incremental, encrypted and delta‑compressed backups to any S3 compatible storage\n* **Self‑healing** — automatic restarts, replica rescheduling and service dependency checks\n* **Metrics \u0026 alerts** — Prometheus‑compatible metrics endpoint and pluggable alert receivers (Email, Discord, Slack, Matrix)\n\n## 🚢 What's in a Name?\n\n\u003e *Vessel*: a container, **Harbor**: a safe port. VesselHarbor offers a safe haven for your containers and virtual machines, guarding them against storms of complexity.\n\n\n\n## ✨ Features\n\n- **Modern Stack**: FastAPI backend + Vue 3 frontend with TypeScript\n- **Docker Ready**: Containerized development and production environments\n- **Authentication**: JWT-based authentication system\n- **Database**: SQLAlchemy ORM with PostgreSQL\n- **API Documentation**: Auto-generated with Swagger UI and ReDoc\n- **State Management**: Pinia for predictable state management\n- **Styling**: UnoCSS for utility-first CSS\n- **Testing**: Comprehensive testing setup with pytest, Vitest, and Playwright\n- **Hot Reload**: Development environment with hot reload for both frontend and backend\n- **PWA Support**: Progressive Web App ready with vite-plugin-pwa\n\n\n## 🚀 Quick Start\n\n### Prerequisites\n\n- Docker ≥ 20.10 and docker-compose v2\n- Node.js ≥ 18 and pnpm ≥ 8 (for frontend development)\n- Python ≥ 3.13 and poetry ≥ 1.8 (for backend development)\n\n### Using Docker (Recommended)\n\n```bash\n# Clone the repository\ngit clone https://github.com/yourusername/VesselHarbor.git\ncd VesselHarbor\n\n# Copy environment files\ncp .env.example .env\ncp backend/.env.example backend/.env\n\n# Start the application\ndocker compose up --build -d\n```\n\nVisit:\n- Frontend: http://localhost/\n- API Documentation: http://localhost/docs\n\n## 📖 Documentation\n\nFull documentation lives in the `.junie` directory of the repository:\n\n* [API Reference](.junie/api-endpoints.md)\n* [System Architecture](.junie/architecture.md)\n* [Security Model](.junie/security.md)\n* [User Guide](.junie/user-guide.md)\n\n## 💻 Development\n\n### Backend (FastAPI)\n\n```bash\ncd app\npoetry install\ncp .env.example .env\n\n# Start development server with auto-reload\npoetry run uvicorn app.main:app --reload --host 0.0.0.0 --port 8010\n\n# Run tests\npoetry run pytest\n```\n\nVisit:\n- Frontend: http://localhost/\n- API Documentation: http://localhost/docs\n\n### Frontend (Vue 3)\n\n```bash\ncd frontend\npnpm install\npnpm dev  # Starts Vite dev server at http://localhost:5173\n\n# Run unit tests\npnpm test:unit\n\n# Run end-to-end tests\npnpm test:e2e\n```\n\n### Full-Stack Development\n\nFor simultaneous frontend and backend development:\n\n1. Start PostgreSQL via Docker or a local service\n2. Start the backend with hot reload\n3. Start the frontend dev server\n4. Access the application at http://localhost:5173\n\nBefore the first `up`, copy the environment example files:\n\n```bash\ncp .env.example .env          # Application secrets\ncp backend/.env.example backend/.env\n```\n\nAdjust as needed:\n\n```\nPOSTGRES_PASSWORD=********\nDATABASE_URL=postgresql+asyncpg://postgres:********@db:5432/monapp\nAPI_HOST=0.0.0.0\nAPI_PORT=8010\nMODE=production\n```\n\n## 🔧 Configuration\n\n- **Database**: Change `DATABASE_URL` in `backend/.env`\n- **CORS**: Adjust `BACKEND_CORS_ORIGINS` in `backend/.env`\n- **Frontend Port**: Modify `frontend/vite.config.ts`\n- **PWA**: Edit the `pwa` section in `frontend/vite.config.ts`\n\n## 🚢 Deployment\n\n### Production Deployment\n\n1. Build Docker images: `docker compose build --no-cache`\n2. Push to your Docker registry\n3. On your server, pull and start the containers:\n\n```bash\ndocker compose pull\ndocker compose up -d\n```\n\nFor production environments, add a reverse proxy (Traefik, Nginx, Caddy) to handle TLS/HTTP-2.\n\n## 🤝 Contributing\n\nFound a bug, have an idea or want to add a new app to the catalogue? Check the [Contributing Guidelines](.junie/contributing.md) and join the discussion in the GitHub issues.\n\n## 📄 License\n\nVesselHarbor is released under the **MIT License**. See [LICENSE](LICENSE) for details.\n\n## 🙏 Acknowledgements\n\nVesselHarbor stands on the shoulders of giants — thank you to the communities behind FastAPI, Vue, Docker and all the amazing self‑hosting projects that inspired this work.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstefapi%2Fvesselharbor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstefapi%2Fvesselharbor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstefapi%2Fvesselharbor/lists"}