Skip to content
/ marcel Public

Marcel - This project automates the process of cloning a GitHub repository to deploying the project. It builds the code to generate the necessary HTML, CSS, and JavaScript files, which are then stored in MinIO

Notifications You must be signed in to change notification settings

ijanhv/marcel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 Marcel

Deploy Frontend applications with ease!


📋 Overview

This project automates the process of cloning a GitHub repository into a Docker container. It builds the code to generate the necessary HTML, CSS, and JavaScript files, which are then stored in MinIO. The entire process is orchestrated through a triggered shell script within the Docker container and a TypeScript index file that manages the upload to MinIO.

🏗️ Architecture

The architecture prioritizes security by ensuring that code execution and file handling occur within isolated Docker containers in the cloud. This setup minimizes the risk associated with executing arbitrary code, as all operations are confined to the containerized environment.

📈 Scalability

This solution is designed to scale efficiently.

🔄 Real-Time Build Logging

🎯 Objective

The goal is to implement real-time logging of the build process, similar to the logging features provided by Vercel during project builds and deployments to AWS.

🛠️ Implementation

To achieve real-time logging, the following components will be utilized:

  • WebSockets: A protocol for real-time communication, enabling live updates during the build process.
  • Redis: Used for streaming build logs to the appropriate user in real time.

🔄 Process

  1. WebSocket Connection: When a user navigates to the deployments page, a WebSocket connection is established between the user and the server.

  2. Executing the Build Command: The build command is executed within the Docker container via a TypeScript script. During this process, logs generated by the build can be streamed to Redis.

  3. Streaming Logs to the User: The logs published to Redis will be associated with the corresponding ProjectID. The server listens for these logs and retrieves the appropriate WebSocket object, sending the logs to the connected user for display in the browser.

🚀 Installation

Prerequisites

  • Docker 🐳
  • Dockerode
  • MinIO for storing files☁️
  • Redis server 🗄️
  • WebSocket library 🔌

Steps

  1. Clone the repository.
  2. Set up your MinIO credentials and S3 .
  3. Configure your Redis instance.
  4. Build and run the Docker container.
  5. Deploy your application to Docker Hub.

🖥️ Usage

  1. Navigate to the deployments page in your web application.
  2. Click the deploy button to trigger the build process.
  3. Monitor the build logs in real time as they are displayed in the browser.

🛠️ Tech Stack

  • 🐳 Docker
  • ☁️ Minio (Self Hosted alternative for AWS S3)
  • 🗄️ Redis
  • 🔌 WebSockets
  • 📜 TypeScript
  • 🐚 Shell Scripting
  • 🌐 Dockerode

Built with ❤️ by Janhavi

About

Marcel - This project automates the process of cloning a GitHub repository to deploying the project. It builds the code to generate the necessary HTML, CSS, and JavaScript files, which are then stored in MinIO

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages