{"id":26387042,"url":"https://github.com/biohacker0/hostify","last_synced_at":"2026-04-04T21:33:22.867Z","repository":{"id":282831697,"uuid":"949790453","full_name":"biohacker0/Hostify","owner":"biohacker0","description":"A lightweight, containerized deployment system for frontend projects. Clone a GitHub repo, build it with Bun, and deploy it to an S3-compatible storage, all automated via RabbitMQ and Redis. No vendor lock-in, no unnecessary complexity—just simple, self-hosted deployments","archived":false,"fork":false,"pushed_at":"2025-03-17T06:30:35.000Z","size":63,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-17T07:35:10.655Z","etag":null,"topics":["bun","react","self-hosted"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/biohacker0.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-17T06:27:30.000Z","updated_at":"2025-03-17T06:32:17.000Z","dependencies_parsed_at":"2025-03-17T07:46:07.509Z","dependency_job_id":null,"html_url":"https://github.com/biohacker0/Hostify","commit_stats":null,"previous_names":["biohacker0/hostify"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biohacker0%2FHostify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biohacker0%2FHostify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biohacker0%2FHostify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biohacker0%2FHostify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/biohacker0","download_url":"https://codeload.github.com/biohacker0/Hostify/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243997126,"owners_count":20380981,"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","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":["bun","react","self-hosted"],"created_at":"2025-03-17T08:21:05.828Z","updated_at":"2025-12-30T21:04:57.336Z","avatar_url":"https://github.com/biohacker0.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hostify /Self-Hosted Vercel - GitHub Repository Deployment System\n\nThis project automates deploying React apps (or similar frontend projects) directly from GitHub repositories. It clones the repo, builds it using Bun, and deploys the output to an S3-compatible storage service, making it publicly accessible via a unique URL.\n\n## Architecture\n\nThe system consists of several containerized services working together:\n\n```\n                    ┌─────────────┐\n                    │   Frontend  │\n                    │    (Vite)   │\n                    └──────┬──────┘\n                           │\n                           ▼\n                    ┌─────────────┐         ┌─────────────┐        ┌─────────────┐\n                    │  Service 1  │         │  RabbitMQ   │        │  Service 2  │\n User Input         │             │ Queue   │             │ Queue  │             │  Deploy\n (GitHub URL) ──────►  API Server ├─────────► Message     ├────────► Build       ├─────► S3 Storage\n                    │             │         │  Broker     │        │  Service    │\n                    └──────┬──────┘         └─────────────┘        └──────┬──────┘\n                           │                                              │\n                           │                 ┌─────────────┐              │\n                           └─────────────────►    Redis    ◄──────────────┘\n                                             │  (Storage)  │\n                                             └─────────────┘\n```\n\nEverything runs in containers, with a simple service-based design:\n\n### Components:\n\n1. **Frontend (React + Vite)**: User submits a GitHub repo URL for deployment.\n2. **API Server (Service 1)**:\n   - Accepts GitHub URLs, generates a tracking ID\n   - Stores deployment status in Redis\n   - Queues jobs via RabbitMQ\n   - Exposes endpoints to check status\n3. **Build Service (Service 2)**:\n   - Clones repo, installs dependencies using Bun\n   - Runs `bun run build`\n   - Uploads built files to S3\n   - Updates status in Redis\n4. **RabbitMQ**: Message broker handling three queues (`bridge_queue`, `cloned_queue`, `build_queue`)\n5. **Redis**: Tracks deployment status, providing fast lookups\n\n## Prerequisites\n\n- Docker \u0026 Docker Compose\n- S3-compatible storage (AWS S3, DigitalOcean Spaces, etc.)\n- S3 credentials (access key, secret key, endpoint, bucket name)\n\n## Setup\n\n### 1. Clone the repository\n\n```bash\ngit clone https://github.com/biohacker0/Hostify.git\ncd Hostify\n```\n\n### 2. Configure environment variables\n\nUpdate `docker-compose.yml` with your S3 credentials:\n\n```yaml\nservice2:\n  environment:\n    - S3_ENDPOINT=your-endpoint.digitaloceanspaces.com\n    - S3_BUCKET_NAME=your-bucket-name\n    - AWS_ACCESS_KEY_ID=your-access-key\n    - AWS_SECRET_ACCESS_KEY=your-secret-key\n```\n\n### 3. Start the services\n\n```bash\ndocker compose up -d\n```\n\n### 4. Open the frontend\n\n```\nhttp://localhost:5173\n```\n\n## Usage\n\n1. Enter a GitHub repo URL.\n2. Get a tracking ID and deployment URL.\n3. Monitor deployment status.\n4. Access the deployed app via the generated URL.\n\n## Deployment Flow\n\n1. **Repo Submission** → API server assigns a UUID, queues it.\n2. **Cloning** → Build service clones the repo, updates status, pushes job to `cloned_queue`.\n3. **Building** → Runs `bun install` \u0026 `bun run build`, updates status, pushes job to `build_queue`.\n4. **Deploying** → Uploads output to S3, finalizes status, returns the deployed URL.\n\n## Monitoring \u0026 Debugging\n\n- **RabbitMQ UI** → [http://localhost:15672](http://localhost:15672) (guest/guest)\n- **Redis Insight** → [http://localhost:5540](http://localhost:5540)\n- **Logs** → `docker compose logs service1` / `docker compose logs service2`\n\n## Repository Requirements\n\n- Must be a JS/TS frontend project (React, Vue, etc.)\n- Needs a `package.json` with:\n  - Dependencies installable via `bun install`\n  - A build script running via `bun run build`\n- Build output should be in `dist/` or `build/`\n\n## Troubleshooting\n\n- **Deployment failed?** Check `docker compose logs service2`.\n- **Frontend can't connect?** Run `docker compose ps` to check service health.\n- **Build errors?** Ensure the repo has the correct structure \u0026 scripts.\n\n## Status Tracking (Redis)\n\nEach deployment has one of these statuses:\n\n- `processing` → Initial state\n- `repo cloned successfully` → Cloning completed\n- `repo built successfully` → Build completed\n- `repo deployed successfully` → Deployment completed\n- `deployment failed` → Something went wrong\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbiohacker0%2Fhostify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbiohacker0%2Fhostify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbiohacker0%2Fhostify/lists"}