Browse Source

[Feature] Add support for docker in fullstack app (#1134)

Deshraj Yadav 1 year ago
parent
commit
0c45020d81
2 changed files with 49 additions and 15 deletions
  1. 37 12
      docs/get-started/full-stack.mdx
  2. 12 3
      embedchain/cli.py

+ 37 - 12
docs/get-started/full-stack.mdx

@@ -2,36 +2,61 @@
 title: '💻 Full stack'
 ---
 
-Embedchain provides a clean and simple cli utility that lets you create full-stack RAG applications locally with a single command. 
+Get started with full-stack RAG applications using Embedchain's easy-to-use CLI tool. Set up everything with just a few commands, whether you prefer Docker or not.
 
-## Prerequisite
+## Prerequisites
+
+Choose your setup method:
+
+### Without Docker
+
+Ensure these are installed:
 
-Make sure that you have installed the following:
 - Embedchain python package (`pip install embedchain`)
 - [Node.js](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) and [Yarn](https://classic.yarnpkg.com/lang/en/docs/install/)
 
-## Get started
+### With Docker
+
+Install Docker from [Docker's official website](https://docs.docker.com/engine/install/).
+
+## Quick Start Guide
+
+### Setting Up
 
 For the purpose of the demo, you have to set `OPENAI_API_KEY` to start with but you can choose any llm by changing the configuration easily.
 
-Now run the following commands:
+### Installation Commands
+
+<CodeGroup>
 
-```bash
+```bash without docker
 ec create-app my-app
 cd my-app
 ec start
 ```
 
-Once you run this command, Embedchain does the following:
+```bash with docker
+ec create-app my-app --docker
+cd my-app
+ec start --docker
+```
+
+</CodeGroup>
 
-1. Fetch full stack template that uses FastAPI for backend, and Next.JS template for frontend
-2. Install necessary requirements
-3. Launch the frontend and backend server for you to interact with
+### What Happens Next?
 
-Once you are done, visit `http://localhost:3000` and you will see a chat UI as shown below.
+1. Embedchain fetches a full stack template (FastAPI backend, Next.JS frontend).
+2. Installs required components.
+3. Launches both frontend and backend servers.
+
+### See It In Action
+
+Open http://localhost:3000 to view the chat UI.
 
 ![full stack example](/images/fullstack.png)
 
-You can navigate to [Embedchain admin panel] where  you can see the chunks created for your documents that you ingested for your RAG application. Below is a screenshot for the same:
+### Admin Panel
+
+Check out the Embedchain admin panel to see the document chunks for your RAG application.
 
 ![full stack chunks](/images/fullstack-chunks.png)

+ 12 - 3
embedchain/cli.py

@@ -49,8 +49,9 @@ def cli():
 
 @cli.command()
 @click.argument("app_name")
+@click.option("--docker", is_flag=True, help="Use docker to create the app.")
 @click.pass_context
-def create_app(ctx, app_name):
+def create_app(ctx, app_name, docker):
     if Path(app_name).exists():
         console.print(
             f"❌ [red]Directory '{app_name}' already exists. Try using a new directory name, or remove it.[/red]"
@@ -98,7 +99,10 @@ def create_app(ctx, app_name):
         anonymous_telemetry.capture(event_name="ec_create_app", properties={"success": False})
         return
 
-    ctx.invoke(install_reqs)
+    if docker:
+        subprocess.run(["docker-compose", "build"], check=True)
+    else:
+        ctx.invoke(install_reqs)
 
 
 @cli.command()
@@ -126,7 +130,12 @@ def install_reqs():
 
 
 @cli.command()
-def start():
+@click.option("--docker", is_flag=True, help="Run inside docker.")
+def start(docker):
+    if docker:
+        subprocess.run(["docker-compose", "up"], check=True)
+        return
+
     # Set up signal handling
     signal.signal(signal.SIGINT, signal_handler)
     signal.signal(signal.SIGTERM, signal_handler)